[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с удалением комментариев на странице
BlackGhost
Имеется страница, на которую выводится анекдот (заметка) и комментарии к нему.
Имеется возможность удалить сам анекдот (и все комментарии к нему удалятся автоматически) - с этим все в порядке, работает. Также можно удалять каждый комментарий в отдельности. Вот с этим проблема. Какой бы комментарий я не собирался удалить - удаляется все время последний в списке.

Вот часть, отвечающая за удаление

if ((isset($_POST['anek'])) && ($_POST['anek'] != "")) {
$deletecommentsSQL = sprintf("DELETE FROM comments WHERE noteid=%s", // Запрос для удаления комментариев, к удаляемому анекдоту
GetSQLValueString($_POST['anek'], "int"));
$deleteSQL = sprintf("DELETE FROM anekdots WHERE id=%s", //Запрос удаления анекдота
GetSQLValueString($_POST['anek'], "int"));

mysql_select_db($database_Anekdots, $Anekdots);
$R = mysql_query("LOCK TABLES comments WRITE, anekdots WRITE", $Anekdots) or die(mysql_error()); //Запрос блокировки таблиц на запись
$Result1 = mysql_query($deletecommentsSQL, $Anekdots) or die(mysql_error()); //Сначала удаляем комментарии
$Result1 = mysql_query($deleteSQL, $Anekdots) or die(mysql_error()); //А потом удаляем саму таблицу
$R = mysql_query("UNLOCK TABLES", $Anekdots) or die(mysql_error()); //Запрос, разблокирующий таблицы на запись
$deleteGoTo = "nimda.php";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}

if ((isset($_POST['com'])) && ($_POST['com'] != "")) {
$deleteSQL = sprintf("DELETE FROM comments WHERE id=%s",
GetSQLValueString($_POST['com'], "int"));

mysql_select_db($database_Anekdots, $Anekdots);
$Result1 = mysql_query($deleteSQL, $Anekdots) or die(mysql_error());

$deleteGoTo = "delete_anekdot.php";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}



На всякий случай наборы записей анекдотов и комментариев к ним:

mysql_select_db($database_Anekdots, $Anekdots);
$query_anekdot = sprintf("SELECT * FROM anekdots WHERE id = %s", GetSQLValueString($colname_anekdot, "int"));
$anekdot = mysql_query($query_anekdot, $Anekdots) or die(mysql_error());
$row_anekdot = mysql_fetch_assoc($anekdot);
$totalRows_anekdot = mysql_num_rows($anekdot);

// Набор записей comments
if (isset($_GET['anekdot'])) {
$colname_comments = $_GET['anekdot'];
}

mysql_select_db($database_Anekdots, $Anekdots);
$query_comments = sprintf("SELECT id, added, avtor, content FROM comments WHERE noteid = %s ORDER BY added ASC", GetSQLValueString($colname_comments, "int"));
$comments = mysql_query($query_comments, $Anekdots) or die(mysql_error());
$row_comments = mysql_fetch_assoc($comments);
$totalRows_comments = mysql_num_rows($comments);



Ну и сами формы удаления:


<form action="" method="POST" name="delete_anekdot" id="delete_anekdot">
<
div class="Anekdot_style">
<
p><?php echo $row_anekdot['content']; ?></p>
<
p><?php echo $row_anekdot['added']; ?></p>
<
p>Рэйтинг:<?php echo ' '.$row_anekdot['rating']; ?></p>
<
p>
<
input type="submit" name="delete" id="delete" value="Удалить анекдот">
</
p>
<
p>
<
input name="anek" type="hidden" id="anek" value="<?php echo $row_anekdot['id']; ?>">
</
p>
</
div>
</
form>
<?php } // Show if recordset not empty ?>

<?php if ($totalRows_comments == 0) { // Show if recordset empty ?>
<p>Комментариев пока что еще нет</p>
<?php } // Show if recordset empty ?>

<?php do { ?>
<form action="" method="POST" name="delete_comment" id="delete_comment">
<
div>
<
hr>
<
h4><?php echo $row_comments['id']; ?> </h4>
<
br>
<
p><?php echo $row_comments['avtor']; ?></p>
<
p><?php echo $row_comments['content']; ?></p>
<
br>
<
p><?php echo $row_comments['added']; ?>
<p>
<
input type="submit" name="delete_c" id="delete_c" value="Удалить коммент"><br>
<
br><hr size="3" color="#030303"><br>
<
p>
<
input name="com" type="hidden" id="com" value="<?php echo $row_comments['id']; ?>">
<?php } // Show if recordset not empty ?>
<br>
<?php } while ($row_comments = mysql_fetch_assoc($comments)); ?>
</div>
</
form>


Спасибо)))



Спустя 17 минут, 12 секунд (15.08.2011 - 19:10) neadekvat написал(а):
Делай не форму, а простую ссылку.
Ты присвашиваешь форме id, а форм таких явно не одна - не знаю, в этом ли ошибка, но ссылкой всяко проще управлять, чем сотней форм на странице.

Спустя 6 минут, 22 секунды (15.08.2011 - 19:16) Invis1ble написал(а):
BlackGhost
Ужас....
Попробуй так:
      <?php do { ?>
<form action="" method="POST" name="delete_comment" id="delete_comment">
<
div>
<
hr>
<
h4><?php echo $row_comments['id']; ?> </h4>
<
br>
<
p><?php echo $row_comments['avtor']; ?></p>
<
p><?php echo $row_comments['content']; ?></p>
<
br>
<
p><?php echo $row_comments['added']; ?>
<p>
<
input type="submit" name="delete_c" id="delete_c" value="Удалить коммент"><br>
<
br><hr size="3" color="#030303"><br>
<
p>
<
input name="com" type="hidden" id="com" value="<?php echo $row_comments['id']; ?>">
<
br>
</
div>
</
form>
<?php } // Show if recordset not empty ?>
<?php } while ($row_comments = mysql_fetch_assoc($comments)); ?>

neadekvat
скорее всего ошибка в том, что тег <form> открывается 100500 раз, а закрывается только по выходу из цикла

Спустя 6 минут, 5 секунд (15.08.2011 - 19:22) neadekvat написал(а):
Invis1ble, ага, соглашусь. Но я все-таки думаю, что форма в данном случаи лишний элемент, они созданы для других целей. Например, если понадобиться прикрутить редактирование комментариев, то при работе со ссылками это будет предельно просто реализовать. С формой - хрен знает, возможно ли без костылей.

Спустя 5 минут, 45 секунд (15.08.2011 - 19:28) Invis1ble написал(а):
neadekvat
да, мое имхо такое же. В данном случае форма лишнее, лучше сделать ссылкой.

Спустя 38 минут, 59 секунд (15.08.2011 - 20:07) BlackGhost написал(а):
Всем спасибо! Действительно проблема была в том, что следовало закрыть форму до завершения выхода из цикла.
Быстрый ответ:

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