【问题标题】:Creating a form to update JSON Data with MySQL创建表单以使用 MySQL 更新 JSON 数据
【发布时间】:2023-03-07 23:15:01
【问题描述】:

这是我需要的输出:

{
    "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"
        }
    ]
}

我需要一个表单来收集所有这些信息,将其保存到数据库中并将收集到的条目输出到服务器上的单个 JSON 文件中,以便我可以在我正在开发的应用程序中使用该 .json 文件.

【问题讨论】:

  • 轨道数是固定的还是可变的?

标签: php mysql ajax json


【解决方案1】:

试试这个:

<?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
}
?>

【讨论】:

    【解决方案2】:

    您可以使用以数组索引命名的表单元素创建一个表单,例如: &lt;input type="text" name="record[album]"/&gt; 等等。

    表单发布到服务器后,你可以使用json_encode($_POST['record']),当然是通过验证后得到想要的json输出。

    【讨论】:

      【解决方案3】:

      补充 Shoan 的答案:您还需要使用 javascript 处理程序创建一个按钮来创建更多输入,以便用户可以根据需要添加更多轨道。附加输入需要如下所示:

      <input type="text" name="record[tracks][n][name]"/>
      

      n 是下一首曲目的编号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        相关资源
        最近更新 更多