Гостевая книга. Как удалить запись из бд?

  • Автор темы Автор темы nocturne
  • Дата начала Дата начала

nocturne

квантовая нелокальность
Пишу гостевую книгу, записи вывожу в цикле. Как удалить одну запись, как определить ее id, когда пользователь нажимает на ссылку удалить. Вот код вывода записей:

PHP:
if ($result = $mysqli->query('SELECT name, DATE_FORMAT(date,"%d.%m.%Y<br />%T") AS date, message, id_user FROM gb ORDER BY id_user DESC')) { 
    while( $row = $result->fetch_assoc() ){ 
       printf($row['date'] .$row['message'] .$delete_s .$row['id_user']); 
    }
}


Переменной $delete_s присваивается значение ссылки Удалить, ведущая на страницу mysql запроса удаления типа:

PHP:
	$result = $mysqli->query('SELECT id_user FROM gb');
    $row = $result->fetch_assoc();
	print_r( $row[id_user]);

	$mysqli->query("DELETE FROM gb WHERE id_user = " .$row[id_user]. " ");  
	printf("<br />Записей удалено: %d\n", $mysqli->affected_rows);

Я понимаю, что возможно изобретаю велосипед, но для себя хочу понять весь этот механизм. Как делают "правильно" направьте на путь истинный.
 
Логично. Мне же не нужно для каждой записи писать обработчик, что бы указывать id = 13, id = 358. Я поставил примерно,
PHP:
DELETE FROM gb WHERE id_user = " .$row[id_user]."
, где $row[id_user] - это значение id записи на конкретной записи. Я не знаю как мне это указать в запросе, что бы удалялась запись на которую нажали удалить. Можно написать в обработчике
PHP:
DELETE FROM gb WHERE id_user = id_user
, тогда удаляться все записи из бд. А нужна только одна.
 
По-моему вы товарищ запутались.
У каждой записи есть id, вы же удаляете запись, а не пользователя, так что при чём тут id_user? Должен быть id_post, который вы в ссылке и указываете, и уже
PHP:
DELETE FROM gb WHERE id = $id_post
А ваш код похож на удаление всех записей конкретного пользователя. Или вы этого и хотите? Судя по постановке вопроса - первое, судя по коду - второе. Или что у вас такое id_user в БД?
 
В силу своей неопытности, я примерно в теории знаю как удалить конкретную запись, а на практике нет. В теории, когда пользователь нажмет на ссылку "Удалить запись" должно выполняться следующее:

ссылка ведет в обработчик, какой нить delete.php где находиться mysql запрос удаления записи. Непонимание мое в том, что я не знаю как вместе ссылкой передать значение id_users (*id_users у меня это первичное поле в бд.) Или как правильно, что должно происходить при нажатии на ссылку?

Заносится запись в бд у меня так:

PHP:
$result = $mysqli->query("INSERT INTO gb VALUES (NULL, ' " .$this->name. " ', ' " .$this->email. " ', ' " .$this->message. " ', now()) ");

В таблице есть поля:

id_users - первичный ключ
name - имя пользователя
email - почта
message - сообщение
date - дата

Выводиться все сообщения в цикле (скриншот во вложении).
 

Вложения

  • gbbb.JPG
    gbbb.JPG
    46,8 KB · Просмотры: 2
PHP:
delete.php?id=".$row[id_user]."
э?
ну а там его при помощи $_GET получаешь.
 
Спасибо. От сюда буду отталкиваться.

И еще вопрос:
Решение передавать id через $_GET - это правильно и безопасно? Как во "взрослых" проектах это делают?
 
Вообще говоря, операции, которые изменяют что-то, надо делать через POST (это, кстати, явно прописано в RFC 2616, который любой веб-разработчик должен изучить. Если с английским не очень, или много букв, в принципе, достаточно информации тут http://ru.wikipedia.org/wiki/HTTP).

Иначе может получиться смешная фигня - были случаи, когда при индексации googe desktop-ом или подобной фигней, которая ходит по ссылкам из избранного с сохраненными паролями, удалялось все из админки :)

Другая сторона безопасности - правильно обрабатывать данные (неважно, в GET, POST или COOKIE) при формировании инструкций на каком-то языке (например SQL). Читай http://phpfaq.ru/mysql
 
Вообще говоря, операции, которые изменяют что-то, надо делать через POST (это, кстати, явно прописано в RFC 2616, который любой веб-разработчик должен изучить).
Про POST знаю, что в отличии от GET не видно в строке браузера, что он передает, поэтому и поинтересовался про безопасность и взрослые проекты.

Про гугл еще не знал и про формирование инструкций

Спасибо за ответ.
 
Все большое спасибо! Через GET успешно получилось это реализовать, буду изучать вопросы безопасности и еще варианты.
P.S. Отличный форум!
 
Сверху