2016-04-26 14 views
0

jsonファイル内のオブジェクトの1つの値を更新しようとしています。問題は、同じキーと値のペアを持つ同じjsonファイル内にいくつかの兄弟があることです。PHPを使用してJSONファイルの値を更新する方法

マイJSONファイルはそうのようになります。

{"LogIns":[ 
{"Username":"Alfred", 
"password":"123", 
"Won":0,"Lost":0}, 
{"Username":"Farrah", 
"password":"123", 
"Won":0,"Lost":0}]} 

たびに誰かが手を(それはカードゲームです)、私はゲームの数が勝敗更新する必要が勝ちます。

これは、PHPファイルへのAJAX呼び出しです:


AJAX:あなたはHTMLがすべて正しく、本当に必要されていないこと、それは私の言葉を取ることができ

var username = localStorage.getItem("username"); 

    if(document.getElementById(btnId).value == answer){ 
     var xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange=function() { 
      console.log("returned:", xhttp.responseText); 
     } 
     xhttp.open("POST", "leaderboard.php", true); 
     xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhttp.send("username=" + username + "&won=1"); 

    } 
    else{ 
     var xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange=function() { 
      console.log(xhttp.responseText); 
     } 
     xhttp.open("POST", "leaderboard.php", true); 
     xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhttp.send("username=" + username + "&lost=1"); 

    } 
    setTimeout(reloadPage, 2000); 

} 

私のPHPファイルは次のようになります:

PHP:

<?php 

$username = $_POST['username']; 

if(isset($_POST['won'])){ 
    $won = $_POST['won']; 
    //echo $won; 
} 

if(isset($_POST['lost'])){ 
    $lost = $_POST['lost']; 
    //echo $lost; 
} 
$str = file_get_contents('logins.json'); // Save contents of file into a variable 

$json = json_decode($str, true); // decode the data and set it to recieve data asynchronosly - store in $json 

foreach($json['LogIns'] as $res){ 
    if($res['Username']==$username){ 
     if(isset($won)){ 
      $add = $res['Won']; 
      $add = ($add + $won); 
      $res['Won'] = $add; 
      echo $res['Won']; 
     } 
     else{ 

      $add = $res['Lost']; 
      $add = ($add + $lost); 
      $res['Lost'] = $add; 
      echo $res['Lost']; 

     } 
     break; 
    } 
} 

file_put_contents('logins.json', json_encode($json)); 

?> 

画面に印刷されてxhttp.responseTextが(「1」)は常にあるが、私ますprint_r $ jsonの勝敗フィールドはまだ0

で誰もが私が間違ってやっている知っています?

これまでどおり、大変助かりました。まもなく

おかげ

答えて

2

:あなたは、元の配列の要素を参照されていない一時的な項目$resを更新しています。 PHPでは、オブジェクトのみがデフォルトで参照渡しされます。参照で別の変数型を渡す場合は、その前に&を追加する必要があります。ここ

いくつかの詳細:http://php.net/manual/en/control-structures.foreach.php

クイックフィックス、テストされていない:

foreach ($json['LogIns'] as $index => $res) { 
    if ($res['Username'] == $username) { 
     if (isset($won)) { 
      $add = $res['Won']; 
      $add = ($add + $won); 
      $json[$index]['Won'] = $add; // <- 
      echo $res['Won']; 
     } 
     else{ 

      $add = $res['Lost']; 
      $add = ($add + $lost); 
      $json[$index]['Lost'] = $add; // <- 
      echo $res['Lost']; 
     } 
     break; 
    } 
} 

それとも、参照することによりループに配列項目を渡すことができます。

foreach ($json['LogIns'] as &$res) { // <- 
    if ($res['Username'] == $username) { 
     if (isset($won)) { 
      $add = $res['Won']; 
      $add = ($add + $won); 
      $res['Won'] = $add; 
      echo $res['Won']; 
     } 
     else{ 

      $add = $res['Lost']; 
      $add = ($add + $lost); 
      $res['Lost'] = $add; 
      echo $res['Lost']; 
     } 
     break; 
    } 
} 
+0

を 'ブレークを使用して、なぜ。 '?まだif-elseステートメントでそれを見ていない。 –

+0

@JeroenBellemansそれは 'foreach'ループから抜け出す –

+0

ええ、いくつかの研究は、後で便利かもしれません:)ありがとう –

関連する問題