1

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.

1
  • Is the number of tracks constant or variable? Commented Jun 3, 2013 at 3:21

3 Answers 3

2

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
}
?>
Sign up to request clarification or add additional context in comments.

Comments

2

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.

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.