Столкнулся с такой проблемой - делал админку для книги отзывов, реализовал функцию подтвеждения отзывов (при нажатии на баттон все отзывы из базы "неподтвержденные" переносятся в базу "подтвержденные").
Начал реализовывать удаление и столкнулся с проблемой - удаляются сразу все отзывы, а нужно удалить определенный.
Схема такая - список отзывов, и рядом с каждым кнопка "Удалить отзыв"
Нужно при нажатии на эту кнопку удалить именно тот отзыв, рядом с которым она находится.
В базе всего 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 на Вашу строчку - не удаляет вообще ничего :)
Имя Отзыв
Вот и вся структура.
Это такая антиспам система :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) будем делать дальше.
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 авыавыа выавы
Вот структура обеих таблиц.
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 у удаляемого отзыва?
Отсюда вопрос - как узнать какой именно 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
Спасибо, теперь все работает.
Вопрос напоследок - что означает эта точка?
Спасибо, теперь все работает.
Вопрос напоследок - что означает эта точка?

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