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

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);
Я понимаю, что возможно изобретаю велосипед, но для себя хочу понять весь этот механизм. Как делают "правильно" направьте на путь истинный.
 

nocturne

квантовая нелокальность
Логично. Мне же не нужно для каждой записи писать обработчик, что бы указывать 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
, тогда удаляться все записи из бд. А нужна только одна.
 

KorP

Новичок
По-моему вы товарищ запутались.
У каждой записи есть id, вы же удаляете запись, а не пользователя, так что при чём тут id_user? Должен быть id_post, который вы в ссылке и указываете, и уже
PHP:
DELETE FROM gb WHERE id = $id_post
А ваш код похож на удаление всех записей конкретного пользователя. Или вы этого и хотите? Судя по постановке вопроса - первое, судя по коду - второе. Или что у вас такое id_user в БД?
 

nocturne

квантовая нелокальность
В силу своей неопытности, я примерно в теории знаю как удалить конкретную запись, а на практике нет. В теории, когда пользователь нажмет на ссылку "Удалить запись" должно выполняться следующее:

ссылка ведет в обработчик, какой нить 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 - дата

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

Вложения

KorP

Новичок
PHP:
delete.php?id=".$row[id_user]."
э?
ну а там его при помощи $_GET получаешь.
 

nocturne

квантовая нелокальность
Спасибо. От сюда буду отталкиваться.

И еще вопрос:
Решение передавать id через $_GET - это правильно и безопасно? Как во "взрослых" проектах это делают?
 

fixxxer

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

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

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

nocturne

квантовая нелокальность
Вообще говоря, операции, которые изменяют что-то, надо делать через POST (это, кстати, явно прописано в RFC 2616, который любой веб-разработчик должен изучить).
Про POST знаю, что в отличии от GET не видно в строке браузера, что он передает, поэтому и поинтересовался про безопасность и взрослые проекты.

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

Спасибо за ответ.
 

nocturne

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