2016-10-25 21 views
0

jstreeを使用しています。ツリーはうまくいきます.JQueryを使ってJSONをPHPファイルに送ります。これは正常に動作します。JSONを使用してPHPでMYSQLテーブルを更新する方法

$("#button3").click(function(){ 
    //json object 
    var objtree = $("#container").jstree(true).get_json('#', { 'flat' : true }); 
    var fulltree = JSON.stringify(objtree); 
    var myarray = $.parseJSON(fulltree); 
    var params = { myarray: myarray }; 
    var paramJSON = JSON.stringify(params); 

    //sending to php file 
    $.post('update.php',{ data: paramJSON }); 

}); 

そして、PHPファイル(update.phpを)で、私はしてMySQLのテーブルを更新します。$テーブル名($ SQL1)内のすべてのレコードを削除し、JSON($ SQL2)から得た情報を挿入します。これは正常に動作します。

<?php 

    $connection = mysqli_connect($servername, $user,$password,$database) or die("Error " . mysqli_error($connection)); 

    $test = $_POST["data"]; 
    $obj = json_decode($test, true); 
    $data = $obj["myarray"]; 

    //first query 
    $sql1 = "DELETE FROM $tablename"; 
    $connection ->query($sql2); 

    foreach($data as $val){ 
     //second query 
     $sql2 = "INSERT INTO $tablename(id,parent,text) VALUES('".$val['id']."', '".$val['parent']."', '".$val['text']."')"; 
     $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection)); 
    } 

    mysqli_close($connection); 

?> 

しかし、私が望むのは、テーブルのすべてを削除してから新しいものを挿入しないことです。しかし、古い値を更新する(おそらく?を使用して)新しい値を挿入するSQL文。

だから、のような:

If id exists: 
    update row 
else: 
    insert new row 

私はPHPとSQLに新しいです。ですから、私の問題は、JSON配列情報にアクセスするためのPHP構文を知ることです。だから、どんな例でも大歓迎です!

+3

参照:http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.htmlパラメータ化されたクエリも使用してください。あなたはSQLインジェクションに慣れています。 – chris85

+1

ここには間違いがあります。あなたのコードが公開されている無数のSQLインジェクションの脆弱性からあなたを守るため、フレームワークを使用してください。検証なしでユーザーの入力を信頼し、文字列連結を使用してクエリを構築します(@ chris85が示唆するようにパラメータ化クエリを使用します)。また、上記のコードにはかなりの構文エラーがあります。実際に正直に実行されるかどうかは不明です。 –

答えて

1

まず、指定されたIDと一致するすべての行を取得するためにPHP関数を使用します。 ifこれは1つ返します。ID == valueFromPreviousFunctionelseという新しい機能をINSERTという新しい行に追加する場合は、UPDATEに別の機能を使用します。

1
$check = mysqli_query($connection,"SELECT * FROM `your_table_name` WHERE `id`='".$val["id"]."'"); 
    if(mysqli_num_rows($check)==1) 
    { 
     //Update the row 
     $update = mysqli_query($connection,"UPDATE `table_name` SET `parent`='".$val["parent"]."', `text`='".$val["text"]."' WHERE `id`='".$val["id"]."'"); 
    } 
    else 
    { 
     //Insert the row 
    } 
0

1回の操作で行う操作はありません。

事前にすべてのIDを取得し、それぞれのIDを個別に更新するか、REPLACE INTOを使用する必要があります。

REPLACE INTOに注意してください:プライマリ/ユニークキーと一致する行が存在する場合は、まず既存のキーを削除し、既存の行を更新するのではなく新しいものを挿入します。

関連する問題