2013-06-03 69 views
1

我有一些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

+1

如果您有数据库,那么为什么要将其保存为JSON格式?将每个表单字段保存到适当的数据库列。但是如果你要保存到一个平面文件,只需将所有表单数据写入一个数组并将'json_encode()'写入该文件即可。 – Barmar

+0

您几乎提供了在数据库中创建表格所需的所有字段。为了不断更新/增长数据,数据库总是更好。以JSON或XML格式存储值应最好保存为静态数据,这些数据变化不大。 –

+0

@ francisco.preller我将如何构建一个表单来将数据输入到数据库中,并且我需要从该数据库输出JSON,因为我的网站和移动应用程序依赖于该数据(JSON) – Michael

回答

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的文件夹)

+0

表单工作正常,但上传的文件如何保存到服务器并输入到JSON中,以及如何将JSON文件保存到服务器(但所有数据都需要收集到一个.JSON文件中) – Michael

+0

你是说多个用户将被放置在一个json中?这是可能的,但你有没有尝试过数据库方法? –

0

像Backbone.js这样的几个库提供了很多有用的方法来做到这一点。看看这个问题的答案(Serialize form inputs to JSON using Backbone.js),看看是否可以满足您的需求。

这就是说,你有没有考虑过正常发布表单,然后将它保存到PHP函数的数据库中?除非你需要需要将它作为字符串化的JSON放入数据库(出于某种原因,通常不建议这样做),你可以直接通过普通的INSERT调用将数据保存到MySQL数据库中。 (请参阅本教程:http://php.about.com/od/phpbasics/ss/mysql_files.htm