2017-10-24 1 views
0

PHPフォームを使用してJSONファイルを更新しようとしていますが、ファイルのフィールドを編集するとエントリの複製が作成されます。たとえば、次のようにPHPを使用してJSONファイルを更新すると、重複したエントリが発生する

[ 
    {"toolName":"tool1", "url":"https://google.com/", "phase":"None"}, 
    {"toolName":"tool2", "url":"http://yahoo.com/", "phase":"None"}, 
    {"toolName":"tool3", "url":"http://bing.com/", "phase":"None"} 
] 

PHPのフォームは「TOOL1」の「フェーズ」を変更したい提出の場合は、アップデートで新しいエントリを追加します。いいね:

[ 
    {"toolName":"tool1", "url":"https://google.com/", "phase":"None"}, 
    {"toolName":"tool2", "url":"http://yahoo.com/", "phase":"None"}, 
    {"toolName":"tool3", "url":"http://bing.com/", "phase":"None"}, 
    {"toolName":"tool1", "url":"https://google.com/", "phase":"NewPhase"} 
] 

これをどう回避できますか?私は更新識別子として、アレイ内のツールのインデックスを使用していますので、私の現在のソリューションはこれです:

$toolId = $_POST['tool-id']; 
$toolName = $_POST['tool-name']; 
$toolUrl = $_POST['tool-url']; 
$toolPhase = $_POST['tool-phase']; 

$data = file_get_contents("../assets/js/tools.json"); 
$json_data = json_decode($data, true); 

$json_data[$toolId]->toolName = $toolName; 
$json_data[$toolId]->url = $toolUrl; 
$json_data[$toolId]->phase = $toolPhase; 

$json_data = array_values($json_data); 

file_put_contents("../assets/js/tools.json", stripslashes(json_encode($json_data))); 

**注:フォームを送信すると、私は、ブートストラップモーダルを使用しているので、私しています表示されている現在のツール(つまり、インデックスのtoolId)のデータを送信するだけなので、JSONファイル全体を反復処理しません。

+0

'$ toolId'をキーとして連想配列として格納する必要があります。 'array_values($ json_data)'を実行すると、キーが失われます。 – Barmar

+0

'$ _POST ['tool-id']'は 'tool1'のインデックスである' 0'を含んでいなければなりません。 – apokryfos

+0

jsonでエンコードされた値に 'stripslashes'もしないでください。 'json_encode'は、有効なjsonを生成する方法を知っていて、スラッシュを破ると破損する可能性があります。 – apokryfos

答えて

0

この行の真の文がしかし、これらの行は、あなたがこれにそれらを変更した場合、それは

$json_data[$toolId]['toolName'] = $toolName; 
$json_data[$toolId]['url'] = $toolUrl; 
$json_data[$toolId]['phase'] = $toolPhase; 
を動作するはずオブジェクト

$json_data[$toolId]->toolName = $toolName; 
$json_data[$toolId]->url = $toolUrl; 
$json_data[$toolId]->phase = $toolPhase; 

を作成するPHPは、配列

$json_data = json_decode($data, true); 

を返すように指示し

+0

ありがとうございます!これは参考になり、問題を解決したようです。 – plusvictoria

関連する問題