2016-10-25 4 views
0

aktualisieren Ich arbeite mit Jstree. Der Baum funktioniert gut. Ich sende JSON zu einer PHP-Datei mit JQuery. Das funktioniert gut.Wie MYSQL-Tabelle in PHP mit JSON

$("#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 }); 

}); 

Dann in der PHP-Datei (update.php), aktualisiere ich mySQL Tabelle durch: alle Datensätze in $ Tabellenname Löschen ($ sql1) und die Informationen aus dem JSON bekommen Einfügen ($ sql2). Das funktioniert gut.

Aber was ich will, ist nicht alles in der Tabelle zu löschen, dann fügen Sie sie brandneu. Aber eine SQL-Anweisung, um die alten Werte (unter Verwendung der ID vielleicht?) Zu aktualisieren und die neuen Werte einzufügen.

So wie:

If id exists: 
    update row 
else: 
    insert new row 

Ich bin neu in PHP und SQL. Mein Problem ist also, die PHP-Syntax für den Zugriff auf JSON-Array-Informationen zu kennen. Also bitte jedes Beispiel würde sehr geschätzt werden!

+3

Siehe: http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html Verwenden Sie auch parametrisierte Abfragen. Sie sind offen für SQL-Injektionen. – chris85

+1

Hier ist einfach so viel falsch. Bitte verwenden Sie ein Framework, da es Sie vor unzähligen SQL Injection-Schwachstellen schützt, für die Ihr Code offen ist. Sie vertrauen Benutzereingaben ohne Validierung und erstellen Abfragen mit String-Verkettung (verwenden Sie parametrisierte Abfragen wie @ chris85 empfiehlt). Es gibt auch eine Menge Syntaxfehler im obigen Code - nicht sicher, ob es tatsächlich laufen würde, um ehrlich zu sein. –

Antwort

1

Zuerst verwenden Sie eine PHP-Funktion, um alle Zeilen mit der angegebenen ID abzurufen. if dies gibt einen zurück, Sie verwenden eine andere Funktion zu UPDATE, wo die ID == valueFromPreviousFunction, else Sie eine Funktion zu INSERT eine neue Zeile aufrufen.

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

Es gibt keinen Befehl, um in einer einzigen Operation das zu tun, was Sie wollen.

Sie sollten entweder alle IDs vorab abrufen und ein Update für jede einzelne davon separat ausführen oder REPLACE INTO verwenden.

Seien Sie jedoch vorsichtig mit REPLACE INTO: Wenn eine Zeile existiert, die einem primären/eindeutigen Schlüssel entspricht, wird sie zuerst gelöscht und dann eine neue eingefügt, anstatt die vorhandene Zeile zu aktualisieren.