Я работаю с Jstree. Дерево работает нормально. Я отправляю JSON в файл PHP с помощью JQuery. Это отлично работает.
$("#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: удаляя все записи в $ tablename ($ 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. Поэтому моя проблема — знание синтаксиса PHP для доступа к информации массива JSON. Поэтому, пожалуйста, любой пример будет высоко ценится!
Во-первых, вы будете использовать функцию PHP, чтобы получить все строки, соответствующие данному идентификатору. if
это возвращает один, вы будете использовать другую функцию для UPDATE
где ID == valueFromPreviousFunction
, else
Вы будете вызывать функцию для INSERT
новый ряд.
$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
}
Там нет команды, чтобы сделать то, что вы хотите в одной операции.
Вы должны либо получить все идентификаторы заранее и запустить обновление для каждого из них отдельно, либо использовать ЗАМЕНИТЬ В.
Будьте осторожны с REPLACE INTO, однако: если строка, соответствующая первичному / уникальному ключу, существует, она сначала удаляет его, а затем вставляет новый, а не обновляет существующую строку.