[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление определенной записи из базы
psynick
Доброго времени суток.
Столкнулся с такой проблемой - делал админку для книги отзывов, реализовал функцию подтвеждения отзывов (при нажатии на баттон все отзывы из базы "неподтвержденные" переносятся в базу "подтвержденные").

Начал реализовывать удаление и столкнулся с проблемой - удаляются сразу все отзывы, а нужно удалить определенный.
Схема такая - список отзывов, и рядом с каждым кнопка "Удалить отзыв"
Нужно при нажатии на эту кнопку удалить именно тот отзыв, рядом с которым она находится.

В базе всего 2 поля - Имя и Сообщение

Пример кода:

<?php
echo "<TABLE BORDER=\"0\" ALIGN=\"left\" WIDTH=\"$tablewidth\">";
echo "<TR><TD><br><b>Неподтвержденные отзывы:</b><br><br></TD></TR>";
$result = mysql_query("SELECT * FROM unconfirmed ORDER BY date DESC") or die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$date_array = getdate($row['date']);
echo "
<TR>
<TD><font color=#265580>Разместил:</font>
$row[usr]</TD>
</TR>
<TR>
<TD VALIGN=
\"top\"><font color=#265580>Сообщение:</font> $row[message]</TD>
</TR>
<TR>
<FORM METHOD=
\"post\" ACTION=\"admin.php?action=del\">
<INPUT TYPE=
\"hidden\" NAME=\"action\" VALUE=\"del\">
<TR><TD><input type=
\"submit\" value=\"Удалить\" name=\"B1\"></TD></TR>
</FORM>
<TD><hr color=
\"$textcolor\" size=\"1\"></TD>
</TR>
"
;
}

if ($_GET[action]=="del")
{
mysql_query("DELETE FROM unconfirmed") or die(mysql_error());
echo "<br>Отзыв удален";
}


Заранее спасибо



Спустя 6 минут, 44 секунды (23.11.2010 - 15:51) linker написал(а):
Ну как ты написал, так оно и удаляет, чтобы удалить что-то конкретное в запросе нужно это конкретное указать
DELETE FROM таблица WHERE поле = значение
где значение должно приходить в POST-запросе (а лучше тут банальный GET, без всяких форм
echo '<input type="button" value="Удалить" name="B1" onclick="self.location=\'script.php?action=del&id=1\';">';
).

Спустя 2 минуты, 14 секунд (23.11.2010 - 15:53) SlavaFr написал(а):
какая структура таблицы unconfirmed и чем она отличается от таблицы confirmed?

Спустя 10 минут, 12 секунд (23.11.2010 - 16:03) psynick написал(а):
Они одинаковые.
Имя Отзыв
Вот и вся структура.
Это такая антиспам система :lol:
Отзывы отображаются из таблицы confirmed, а добавляются пользователями в таблицу аunconfirmed. Потом ручное подтвеждение - отзывы копируются в таблицу confirmed, а таблица unconfirmed очищается.

linker
Мне кажется я не понял.
Заменил свой FORM METHOD на Вашу строчку - не удаляет вообще ничего :)
<TD><input type=\"button\" value=\"Удалить\" name=\"B1\" onclick=\"self.location=\'admin.php?action=del&id=1\';\"></TD>

Спустя 17 минут, 54 секунды (23.11.2010 - 16:21) SlavaFr написал(а):
без id таблица не годится.
2 таблицы не нужны просто зделай поле
aktiv enum('0','1') not null default '1'
теперь вместо тяганий по таблицам делаеш просто update.

после того как зделаеш, что я тебе сказал и покажеш (show create table tvojatabliza) будем делать дальше.




Спустя 15 минут, 46 секунд (23.11.2010 - 16:37) psynick написал(а):
В базе уже куча отзывов, не хотелось бы менять структуру.

Вот структура обеих таблиц.

id date message usr
129 1290519074 авыавыа выавы
130 1290519076 авыавыа выавы
131 1290519078 авыавыа выавы
132 1290519079 авыавыа выавы
133 1290519082 авыавыа выавы
134 1290519085 авыавыа выавы
135 1290519086 авыавыа выавы

Спустя 2 минуты, 30 секунд (23.11.2010 - 16:39) psynick написал(а):
Теперь я понял как происходит процесс удаления, по id

Отсюда вопрос - как узнать какой именно id у удаляемого отзыва?

Спустя 11 секунд (23.11.2010 - 16:39) linker написал(а):
Слушай SlavaFr, не хватает поля уникального автоинкрементного поля id.
if ($_GET['action'] == "del")
{
$Id = isset($_GET['id']) ? (integer)$_GET['id'] : 0;
if ($Id)
{
mysql_query("DELETE FROM unconfirmed") or die(mysql_error());
header('Location: !!!!!ЗДЕСЬ НАЗВАНИЕ ТВОЕГО СКРИПТА');
}
}

...
echo '<input type="button" value="Удалить" name="B1" onclick="self.location=\'!!!!!ЗДЕСЬ НАЗВАНИЕ ТВОЕГО СКРИПТА?action=del&id=' . $row['id'] . '\';">';
...
Думай логически.

Спустя 40 минут, 36 секунд (23.11.2010 - 17:20) psynick написал(а):
Цитата
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/docs/guestbook/admin.php on line 20


Как только уже не пробовал оформить эту строчку. Все равно ошибка.

<input type=\"button\" value=\"X\" name=\"B1\" onclick=\"self.location=\'guestbook/admin.php?action=del&id= . $row['id'] .  \'   ;\">

Спустя 10 минут, 27 секунд (23.11.2010 - 17:30) SlavaFr написал(а):
Цитата (SlavaFr @ 23.11.2010 - 13:21)
после того как зделаеш, что я тебе сказал и покажеш (show create table tvojatabliza) будем делать дальше.


Спустя 2 минуты, 11 секунд (23.11.2010 - 17:33) psynick написал(а):
Так у таблицы есть поле с id
Цитата
В базе уже куча отзывов, не хотелось бы менять структуру.


Цитата
Стрктура:
id date message usr
129 1290519074 авыавыа выавы
130 1290519076 авыавыа выавы
131 1290519078 авыавыа выавы
132 1290519079 авыавыа выавы
133 1290519082 авыавыа выавы
134 1290519085 авыавыа выавы
135 1290519086 авыавыа выавы


Разве это не то?

Спустя 19 минут, 26 секунд (23.11.2010 - 17:52) psynick написал(а):
Так, с кнопкой удалить разобрался.
При нажатии на "удалить" получаем строчку в браузере
Цитата
http://gencred.ru/guestbook/admin.php?action=del&id=141

Думаю, этого и добивались.

Осталось решить вопрос с удалением именно этого id из таблицы. Сейчас удаляются сразу все записи

if ($_GET['action'] == "del")
{
$Id = isset($_GET['id']) ? (integer)$_GET['id'] : 0;
if ($Id)
{
mysql_query("DELETE FROM unconfirmed") or die(mysql_error());
}
}


Так работать не хочет, но в чем проблема сказать не могу, до конца не понимаю логики.

Спустя 1 час, 30 минут, 38 секунд (23.11.2010 - 19:23) linker написал(а):
mysql_query("DELETE FROM `unconfirmed` WHERE `id` = " . $id) or die(mysql_error());

Спустя 17 минут, 25 секунд (23.11.2010 - 19:40) psynick написал(а):
Вся проблема была в одной точке перед $Id
Спасибо, теперь все работает.
Вопрос напоследок - что означает эта точка? wink.gif

Спустя 13 часов, 50 минут, 48 секунд (24.11.2010 - 09:31) linker написал(а):
Конкатенация.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.