2014-06-06 24 views
0

我有这段代码在服务器上创建一个json文件并将表单数据保存到该jason文件。使用php更新Json文件的数据

问题是每当我点击提交按钮时,表单数据会追加到json文件上的现有数据。

我想更新它不会创建更多的副本行。

这里是代码,你可以查看它。

任何帮助将不胜感激。

<?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]); 
    } 



$json = json_encode($final); 
$file = 'entries.json'; 
file_put_contents($file, $json, FILE_APPEND); 

    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> 
+1

尝试改变'file_put_contents($文件$ JSON,FILE_APPEND);''到file_put_contents($文件$ JSON);'具体根据[文档用于'FILE_APPEND'标志](HTTP:// WWW .php.net/manual/en/function.file-put-contents.php) - >'如果文件名已经存在,请将数据附加到文件中,而不是覆盖文件。' – Sean

+0

是的,这是非常快速的解决方案。谢谢 –

回答

0

试试这个:

$file = 'entries.json'; 
$data = file_get_contents($file); 
$data = json_decode($data, true); 
if(!(is_array($data) AND !empty($data))) { 
    $data = array(); 
} 
$data[] = $final; 
$data = json_encode($data); 
file_put_contents($file, $data); 
+0

但我不明白你为什么不使用数据库进行此操作?至少你可以使用sqlite来正确存储数据。 – num8er

+0

谢谢你,很酷。但对不起,我不能投你的答案,因为我只有11的声望。再次感谢 –

+0

没有问题。乐意帮助(: – num8er

0

存储作为JSON相反的,你能坚持PHP阵列本身在文件中,方便地检索。 有些事情是这样的。

file_put_contents('entries.php', '<?php $final = ' . var_export($final, true) . ';'); 

要检索数组,只需将'entries.php'文件包含在任意位置即可。

include_once('entries.php'); 
+0

听起来好人感谢,是的,它很容易使用。 对不起,我不能投你的答案,因为我只有11声望。再次感谢。 –