Michael
Michael

Reputation: 183

Creating a form to update JSON Data with MySQL

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

Answers (3)

Dave Chen
Dave Chen

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

Fallexe
Fallexe

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

Shoan
Shoan

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

Related Questions