#php #ajax #insert #insert-update
#php #ajax #вставить #вставить-обновить
Вопрос:
У меня есть значения, которые используют метод GET для отправки переменных URL на страницу PHP с использованием Ajax.
На странице у меня есть:
$value=$_GET["q"];
$id=$_GET["id"];
$mod=$_GET["mod"];
Я начал с использования метода UPDATE SET для изменения значений в базе данных MySQL.
Я использовал: $num_rows= mysql_num_rows($result);
С помощью If Else
инструкции либо вставить значения (если их там нет), либо обновить столбец «Атрибут»
Но это было очень непоследовательно и часто не обновлялось, и появилось несколько повторяющихся значений (even though if($num_rows > 0){ (WHERE Object_ID = '".$mod."' AND Type='".$id."')
, которые НЕ СЛЕДОВАЛО вставлять, но это было сделано.)
Итак, я переключился на это:
$sql="SELECT * FROM Attributes WHERE Object_ID = '".$mod."' AND Type='".$id."'";
$result = mysql_query($sql);
mysql_query("DELETE FROM Attributes WHERE Object_ID = '".$mod."' AND Type = '".$id."'");
mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute)
VALUES ('".$mod."', '".$id."', '".$value."')");
Я знаю, действительно плохая идея. Но даже этот метод не всегда вставляет значения правильно.
Я знаю, что переменные попадают на страницу, потому что ответ был бы записан в div с использованием innerHTML, и он всегда отображался правильно.
Как я могу гарантировать, что значения ВСЕГДА обновляются / вставляются в базу данных?
Ответ №1:
Почему бы не запустить SELECT COUNT (*) для условия и проверить, что это возвращает, и на основе этого запустить ваше ОБНОВЛЕНИЕ или ВСТАВКУ?
Ответ №2:
я действительно не понимаю, что не так с вашей работой с базой данных, но единственный способ убедиться в этом — отправить ответ из вашего php-скрипта в ajax. Это может быть json или простой текст, информирующий вас о том, какое действие было запрошено и что выполнено. В зависимости от ответа вы можете настроить то, что хотите.
Комментарии:
1. Да, отправленный ответ работает нормально. На самом деле это свойство CSS.
2. Да, я тоже не уверен, что не так с моим скриптом или базой данных!
Ответ №3:
Вам нужно запросить таблицу, чтобы узнать, существует ли там уже идентификатор или нет, если он завершается, то напишите запрос на обновление, т. Е.
$update = "update tbl_name set column=value where id = $_GET['id']"
и если идентификатор не существует, то используйте вставку
$insert = «Вставить в …..»
надеюсь, это решит вашу проблему. И, кроме того, вам нужно повторить ответ здесь либо в строковом формате, либо в каком-либо другом значении, которое вы получите в методе успеха $.Ajax.
Комментарии:
1. Да, ответ успешно повторяется, но он просто не вставлен. Я попробую ваш метод и посмотрю, исправил ли он мою проблему!
Ответ №4:
Нет необходимости запрашивать базу данных, чтобы узнать, существуют ли данные уже. Пока у вас есть правильные данные, вы можете удалять строку каждый раз. Если строка не существует, удаление ничего не делает.
Запускайте эти два запроса каждый раз, и все будет в порядке.
mysql_query("DELETE FROM Attributes WHERE Object_ID = '$mod' AND Type='$id'");
mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute) VALUES ('$mod', '$id', '$value'");
И, пожалуйста, как минимум, прежде чем что-либо делать с $ _GET, сначала запустите их через mysql_real_escape_string . Вероятно, вам следует провести дополнительную проверку, просто чтобы убедиться, что переданные значения действительны.
$value=mysql_real_escape_string($_GET["q"]);
$id=mysql_real_escape_string($_GET["id"]);
$mod=mysql_real_escape_string($_GET["mod"]);