2014-06-06 35 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聲望。再次感謝。 –