Я создаю простую таблицу mysql, которая содержит идентификатор, имя, фамилию и адрес электронной почты. Код создания таблицы выглядит следующим образом:
$sql="CREATE TABLE users ( id int NOT NULL auto_increment, PRIMARY KEY(id), firstname varchar(20), lastname varchar(20), email varchar(40) )";
Работы по созданию таблицы, и у меня не было проблем. Моя проблема возникает, когда я пытаюсь обновить таблицу и пользовательскую информацию.
Мой запрос на обновление выглядит следующим образом:
mysql_select_db(dustin,$con); $sql="UPDATE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']"'"; $sherlock=mysql_query($sql,$con);
По сути, я открываю файл, который позволяет пользователю редактировать хранимую информацию в элементах формы, а затем, когда выполняется запрос на обновление, он должен изменять информацию, содержащуюся в таблице.
mysql_error (); не выводит результат, и запрос UPDATE завершается с ошибкой.
$sql="UPDATE users SET firstname='".$_GET['fn']."', lastname='".$_GET['ln']."',email='".$_GET['emadd']"'";
Давайте посмотрим … сделайте это.
$sql="UPDATE `users` SET firstname='{$_GET['fn']}', lastname='{$_GET['ln']}', email='{$_GET['emadd']}'";
НО Я НЕ РЕКОМЕНДУЮ ЭТО !!!
Сначала очистите данные mysql_real_escape_string (), чтобы предотвратить SQL-инъекцию!
Например:
$firstname = mysql_real_escape_string($_GET['fn']); $lastname = mysql_real_escape_string($_GET['ln']); $email = mysql_real_escape_string($_GET['emadd']); $sql="UPDATE `users` SET `firstname`='$firstname', `lastname`='$lastname', `email`='$email' WHERE ..."; mysql_query($sql);
Кроме того, где ваше WHERE
?
Я не очень хорошо знаком с php, но вам может не хватать period
:
email='".$_GET['emadd'] ----------------------/\
Вам также не хватает предложения WHERE
, поэтому вы обновите все записи.
В вашем запросе условие WHERE отсутствует …
каждый запрос на обновление требует, чтобы условие
WHERE id = nn может быть чем угодно
а также ошибка в запросе u miss. после $ _GET ['emadd']
Синтаксис error email='".$_GET['emadd']"'";
здесь вы забыли точку до "'"
. Также это отвратительный код. Не используйте mysql
use mysqli
или PDO
и подготовленные инструкции, чтобы избежать SQL-инъекции и сделать код более читаемым.
в вашем коде, где код отсутствует, а также в последнем из кода, который вы допустили, ваш запрос должен быть
$sql="UPDATE users SET firstname='".$_GET['fn']."', lastname='".$_GET['ln']."', email='".$_GET['emadd']."' where condition";
вместо
$sql="UPDATE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']"'";
вы пропустите a .
оператор в конце вашего запроса
В вашем запросе отсутствует WHERE-часть, unles, конечно же, вы не будете обновлять все записи.
$sql="UPDATE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']."' WHERE id = ".$_GET['id'];
Кроме того, вы уже подготовили таблицу? Вы можете изменить INSERT на REPLACE, и это будет работать как с новыми, так и с обновленными линиями.
$sql="REPLACE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']."' WHERE id = ".$_GET['id'];