Reputation: 183
This is the output I need:
{
"album": "Text_Input",
"artwork": "DefaultURL/http://www.ggcc.tv/ArmyoftheLord/Army%20of%20the%20Lord.png/OR Overwrite with Uploaded Image",
"church": "City Name And State Wich can be selected from Dropdown Menu",
"cityartwork": "Default URL Will Be Set/ This input is hidden",
"des": "Text_Input_For_Description",
"release_date": "February 24th 2013 ",
"tracks": [
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
},
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
},
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
},
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
},
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
},
{
"name": "Text_Input",
"url": "File Upload of .MP3 which should be saved on server and its new url should be inputed here by the script"
}
]
}
I need a form that will collect all this information, save it to a database and output the collected entries in a single JSON file on the server, so that I can use that .json file in the app I'm working on.
Upvotes: 1
Views: 542
Reputation: 10975
Try this:
<?php
$minimum_tracks=1;
$maximum_tracks=10;
$tracks=isset($_GET['tracks'])?$_GET['tracks']:0;
if (is_numeric($tracks) && $tracks>=$minimum_tracks && $tracks<=$maximum_tracks) {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$_POST['cityartwork']="Default Set from PHP";
$_POST['tracks']=array();
$_POST['artwork']='http://www.ggcc.tv/ArmyoftheLord/Army%20of%20the%20Lord.png';
if ($_FILES['artwork']['size']!=0) {
move_uploaded_file($_FILES['artwork']['tmp_name'],"artworks/".$_FILES['artwork']['name']);
$_POST['artwork']=$_SERVER['HTTP_HOST']."/artworks/".$_FILES['artwork']['name'];
}
for ($i=0;$i<$tracks;$i++) {
$filename="tracks/".$_FILES['tracks']['name'][$i];
$_POST['tracks'][$i]=array(
"name"=>$_POST['track_names'][$i],
"url"=>$_SERVER['HTTP_HOST']."/".$filename
);
move_uploaded_file($_FILES['tracks']['tmp_name'][$i],$filename);
}
unset($_POST['track_names']);
echo json_encode($_POST);
exit;
} else {
?><!DOCTYPE html>
<html>
<head>
<title>New Album</title>
</head>
<body>
<form method="post" action="" enctype="multipart/form-data">
Album Name: <input type="text" name="album"><br>
Artwork: <input type="file" name="artwork"><br>
Church: <select name="church"><option value="New York NY">New York NY</option><option value="Los Angeles CA">Los Angeles CA</option></select><br>
Description: <br><textarea name="des"></textarea><br>
Release Date: <input type="date" name="release_date"><br>
Tracks: <br><br><?php
for ($i=1;$i<=$tracks;$i++) {
echo 'Track '.$i.'<br><input type="text" name="track_names[]"><input type="file" name="tracks[]"><br><br>';
}
?>
<input type="submit">
</form>
<?php
exit;
}
} else {
?>
<!DOCTYPE html>
<html>
<head>
<title>New Album</title>
</head>
<body>
How many tracks are in this album?
<form action="" method="get">
<select name="tracks">
<?php
for ($i=1;$i<$maximum_tracks;$i++) {
echo '<option value='.$i.'>'.$i.'</option>';
}
?>
</select><br>
<input type="submit">
</form>
</body>
</html>
<?php
}
?>
Upvotes: 2
Reputation: 596
To add to Shoan's answer: You also need to create a button with a javascript handler to create more inputs so the user can add more tracks as needed. The additional inputs need to look like this:
<input type="text" name="record[tracks][n][name]"/>
Where n
is the number for the next track.
Upvotes: 1
Reputation: 4078
You can create a form with the form elements named with an array index ex:
<input type="text" name="record[album]"/>
and so on.
After the form is posted to the server, you can use json_encode($_POST['record'])
, after validation of course, to get the desired json output.
Upvotes: 2