通过表单更新JSON?

时间:2013-06-03 02:03:42

标签: php javascript mysql ajax json

我有一些json,我会手动更新,但随着数据通过电子邮件发送给我,数据越多,我花在写json上的时间就越多

有没有办法构建一个表单来获取一些数据(文本和上传),以及将JSON写入/输出到文件或数据库中? - 我尝试过使用Ajax,PHP,MySQL和其他没有运气的人,请指教(指出我正确的方向)

我的结构:

    {
    "FirstName": "John",
    "LastName": "Doe",
    "Photo": "http://ImageURL",
    "PhoneNumber": [
        {
            "MobilePhone": "555-555-5555",
            "Provider": "Verizon"
        },
        {
            "HomePhone": "555-555-5555",
            "Provider": "AT&T"
        },
        {
            "WorkPhone": "555-555-5555",
            "Provider": "SBC"
        }
    ]
}

需要表格

名字:(文字输入)

姓氏:(文字输入)

照片:(文件上传)

(嵌套在“电话号码”下)

移动电话:(文字输入)

提供者:(文字输入)

家庭电话:(文字输入)

提供者:(文字输入)

工作电话:(文字输入)

提供者:(文字输入)

注意:这是虚拟数据,实际的JSON字典用于音乐专辑,文件的地址是http://www.godsgypsychristianchurch.net/music.json

2 个答案:

答案 0 :(得分:2)

试试这个:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    move_uploaded_file($_FILES["Photo"]["tmp_name"],"images/".$_POST['Photo']);

    $filters=array(
        "FirstName",
        "LastName",
        "Photo",
        "MobilePhone",
        "MobilePhoneProvider",
        "HomePhone",
        "HomePhoneProvider",
        "WorkPhone",
        "WorkPhoneProvider"
    );

    $final=array();

    foreach ($filters as $filter) {
        $final[$filter]=$_POST[$filter]?$_POST[$filter]:"";
    }

    $final["PhoneNumber"]=array(
        array(
            "MobilePhone"=>$final["MobilePhone"],
            "Provider"=>$final["MobilePhoneProvider"],
        ),
        array(
            "HomePhone"=>$final["HomePhone"],
            "Provider"=>$final["HomePhoneProvider"],
        ),
        array(
            "WorkPhone"=>$final["WorkPhone"],
            "Provider"=>$final["WorkPhoneProvider"],
        )
    );

    $unsets=array(
        "MobilePhone",
        "MobilePhoneProvider",
        "HomePhone",
        "HomePhoneProvider",
        "WorkPhone",
        "WorkPhoneProvider"
    );

    foreach ($unsets as $unset) {
        unset($final[$unset]);
    }

    echo json_encode($final);
    exit;
}
?><!DOCTYPE html>
<html>
    <head>
        <title>Contact</title>
    </head>
    <body>
        <form action="" method="post" enctype="multipart/form-data">
            First Name: <input type="text" name="FirstName"><br>
            Last Name: <input type="text" name="LastName"><br>
            Photo: <input type="file" name="Photo"><br>
            Mobile Phone: <input type="tel" name="MobilePhone"><br>
            Mobile Phone Provider: <input type="text" name="MobilePhoneProvider"><br>
            Home Phone: <input type="tel" name="HomePhone"><br>
            Home Phone Provider: <input type="text" name="HomePhoneProvider"><br>
            Work Phone: <input type="tel" name="WorkPhone"><br>
            Work Phone Provider: <input type="text" name="WorkPhoneProvider"><br>
            <input type="submit">
        </form>
    </body>
</html>

这只是一个起点,您需要进行图像检查和其他各种检查以确保用户输入有效。 (对于此测试,您应该创建一个名为images

的文件夹

答案 1 :(得分:0)

Backbone.js等几个库提供了有用的方法来完成此任务。查看此问题的答案(Serialize form inputs to JSON using Backbone.js),看看这是否适合您的需求。

那就是说,您是否考虑过正常POST表单,然后在PHP函数中将其保存到数据库中?除非您需要将其作为字符串化JSON放入数据库中,因为某些原因(通常不推荐),您可以继续通过正常的INSERT调用将数据保存到MySQL数据库。 (参见本教程:http://php.about.com/od/phpbasics/ss/mysql_files.htm