|
|
|
| Помогите разобраться с updat'ом - не обновляется строка в mysql, хотя echo выдаёт "Страница успешно обновлена!"
$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$id = $_REQUEST['id'];
if ($_POST['submit']=='Ok'){
$result=mysql_query("UPDATE `items` SET `title`='".$title."', `body`='".$body."' WHERE `id`='".$id."'");
if ($result == 'true') {echo "<p><b>Страница успешно обновлена!</b></p>";}
else
{echo "<p>Страница не обновлена.</p>";}
}
|
| |
|
|
|
|
|
|
|
для: Vigorius
(29.07.2009 в 00:47)
| | Информация к размышлению, взятая из мануала:
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки. Значение не равное FALSE говорит о том, что запрос был выполнен успешно. Он не говорит о количестве затронутых или возвращённых рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда. | |
|
|
|
|
|
|
|
для: yuk
(29.07.2009 в 01:09)
| | yuk , спасибо за инфо!
$result="UPDATE `items` SET `title`='".$title."', `body`='".$body."' WHERE `id`='".$id."'";
|
Результат - "Страница не обновлена"
Ошибку так и не могу найти... | |
|
|
|
|
|
|
|
для: Vigorius
(29.07.2009 в 01:28)
| | echo $result;
echo mysql_error(); | |
|
|
|
|
|
|
|
для: Vigorius
(29.07.2009 в 01:28)
| | нет, ищите ошибку здесь:
| |
|
|
|
|
|
|
|
для: yuk
(29.07.2009 в 09:39)
| | проблема не в этой строке.
вы же сами привели отрывок из мануала.
Автору темы:
думаю, проблема в $id.
echo $id что вам покажет?
UPD
возможно, проблема в том, что вы не обрабатываете спец символы перед вставкой их в запрос, и где-то проскакивает ковычка.
попробуйте написать не $title, а mysql_escape_string($title)
а вообще, конечно, как сказал Trianon, mysql_error() вам в помощь | |
|
|
|
|
|
|
|
для: ride
(29.07.2009 в 10:45)
| | Сейчас не важно, чему равно id. Даже если упростить код до:
$title = 'text1';
$body = 'text2';
$id = 'то что никак не может быть в id';
$result=mysql_query("UPDATE `items` SET `title`='".$title."', `body`='".$body."' WHERE `id`='".$id."'");
if ($result == 'true') {echo "<p><b>Страница успешно обновлена!</b></p>";}
else
{echo "<p>Страница не обновлена.</p>";}
|
Все-равно будет выводиться сообщение об успешном обновлении.
Главная ошибка в том, что $result проверяют на true (причем весьма не грамотно -$result сравнивают со строкой, которую mysql_query() никогда не возвращал. К сожалению, РНР в силу своей интеллектуальности сам преобразовывает строку 'true' в true).
Не будем зацикливаться на строке, предположим, проверка была if($result==true).
Похоже, автор хочет проверить, были ли обновлены строки таблицы запросом. Вот тут пригодится выше указанный отрывок из мануала, в частности то место, где говорится, что "Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда".
т. е., если запрос выполняется без ошибок - $result будет равен true, даже если ничего не было изменено.
Сделать проверку на то, были ли внесены изменения при UPDATE - можно с помощью, скажем, mysql_affected_rows(). | |
|
|
|
|
|
|
|
для: yuk
(29.07.2009 в 11:29)
| | начну по порядку.
1. автор сначала написал
"Помогите разобраться с updat'ом - не обновляется строка в mysql, хотя echo выдаёт "Страница успешно обновлена!""
первое, что приходит в голову - это то, что id, например, равен нулю.
такая запись не найдена, рез-т - "Страница успешно обновлена!"
2. Далее вы приводите отрывок из мануала.
В рез-те, он получает "Страница не обновлена."
Это может быть по следующим причинам:
2.1 Не известно, какой вывод для себя сделал топикстартер, и как он исправил свой код.
2.2 возможно, он ввел другие данные, которые будут содержать одинарные ковычки.
3 теперь по последнему вашему сообщению:
>>Главная ошибка в том, что $result проверяют на true
это не главная ошибка.
здесь
К сожалению, РНР в силу своей интеллектуальности сам преобразовывает строку 'true' в true).
|
вы сами это доказываете.
заметьте, я не говорю, что так сравнивать правильно, я просто говорю, что это не главная ошибка.
>>Похоже, автор хочет проверить, были ли обновлены строки таблицы запросом.
с чего вы это взяли?
>>"Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда".
>>т. е., если запрос выполняется без ошибок - $result будет равен true
именно это у него и происходит(в самом первом посте) | |
|
|
|
|
|
|
|
для: ride
(29.07.2009 в 12:10)
| | >>2. Далее вы приводите отрывок из мануала.
>>В рез-те, он получает "Страница не обновлена."
да, причина именно в
>>2.1 Не известно, какой вывод для себя сделал топикстартер, и как он исправил свой код.
>>>>Похоже, автор хочет проверить, были ли обновлены строки таблицы запросом.
>>с чего вы это взяли?
Действительно, с чего я это взял? Возможно с того, что при не успешном обновлении выводится сообщение "страница не обновлена". Но теперь, смотрю, сообщение поменялось на "Ошибка при обновлении!" - что уже больше подходит под проверку на ошибки запроса. Если автор хочет проверить, была ли ошибка при выполнении запроса - тогда я не прав, и все мои посты можно проигнорировать.
Обратимся тогда к автору:
что вы хотите проверить? - была ли ошибка при выполнении запроса, или были ли затронуты ряды таблицы при выполнении запроса? | |
|
|
|
|
|
|
|
для: yuk
(29.07.2009 в 09:39)
| | здесь, конечно, ошибка.
Только она не влияет... | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2009 в 11:10)
| | >здесь, конечно, ошибка.
Я бы добавил - и не одна. | |
|
|
|
|
|
|
|
для: yuk
(29.07.2009 в 11:34)
| | Всем спасибо!
Рабочий пример:
<?php
if ($_REQUEST['submit']=='Ok'){
$title = htmlspecialchars($_REQUEST['title']);
$body = htmlspecialchars($_REQUEST['body']);
$id = intval($_REQUEST['id']);
$result="UPDATE `items` SET `title`='$title', `body`='$body' WHERE `id`='$id'";
$query_result = mysql_query($result);
if (mysql_affected_rows() > '0') {$msg = "Запись обновлена!";} else {$msg = "Ошибка при обновлении!";}
echo $msg;
}
?>
|
Покажите, пожалуйста, в чём ещё ошибки! | |
|
|
|
|
|
|
|
для: Vigorius
(29.07.2009 в 12:20)
| | Это не рабочий пример, а ересь мерзкая.
Вместо того, чтобы ошибки исправить, Вы их добавили.
htmlspecialchars здесь никаким боком не лезет. | |
|
|
|
|
|
|
|
для: Vigorius
(29.07.2009 в 12:20)
| | >>if (mysql_affected_rows() > '0')
да и это тоже не правильно
прочитайте отрывок из мануала, который вам привели выше+ добавлю от себя:
если вы попытаетесь обновить данные на те же самые, mysql не обновит, в рез-те вернет true(запрос выполнен успешно), но mysql_affected_rows будет равен 0.
чувствуете разницу?
и, в конце-концов, хотя пхп за вас преобразует переменные, вы работаете с числами, а не со строками, так будьте добры, пишите числа: 0 а не '0' | |
|
|
|