正如您所看到的,在每个评论上都有一个按钮,但当我单击一个按钮时,它会删除所有评论。我只希望它删除它所属的评论。我可能理解它为什么删除所有内容,因为它从comment_id查询中删除了列$sql_result2中的所有变量,但我不知道如何修复它。我应该改变我的$sql_result2吗?我在这里做错什么了?
$sql_result2 = $mysqli2->query("SELECT * FROM comments WHERE thread_id = '".$thread_id."'");
while ($comments = mysqli_fetch_assoc($sql_result2)) {
echo " <div id='comments' >{$comments['comment']}</br>";
echo "<div id='name_and_date'><a href=profile.php?comment_username={$comments['username']}>{$comments['username']}</a></br>";
echo "{$comments['date_made']}</div></div>";
echo <<<EOT
<table style='margin-left:42% ;'>
<form action="?" method="post">
<td><input name="delete_comment" type="submit" value="delete"></td>
<table>
EOT;
if ( isset( $_POST['delete_comment'] ) ) {
$sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$comments['comment_id']."'");
header("Location: thread.php");
}
}发布于 2013-11-13 09:30:19
您可以在while循环中执行它,因此对每个注释执行以下代码:
if ( isset( $_POST['delete_comment'] ) ) {
$sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$comments['comment_id']."'");
header("Location: thread.php");
}您应该从while循环中删除它,并将$comments['comment_id']替换为一个有效的get/post变量。
例如:
if ( isset( $_POST['delete_comment'] ) ) {
$sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$_POST['comment_id']."'");
header("Location: thread.php");
exit();
}
$sql_result2 = $mysqli2->query("SELECT * FROM comments WHERE thread_id = '".$thread_id."'");
while ($comments = mysqli_fetch_assoc($sql_result2)) {
echo " <div id='comments' >{$comments['comment']}</br>";
echo "<div id='name_and_date'><a href=profile.php?comment_username={$comments['username']}>{$comments['username']}</a></br>";
echo "{$comments['date_made']}</div></div>";
echo <<<EOT
<table style='margin-left:42% ;'>
<td><form action="?" method="post">
<input name="delete_comment" type="submit" value="delete">
<input name="comment_id" type="hidden" value="{$comments['comment_id']}">
</form></td>
<table>
EOT;
}但是,您应该认真考虑整理其余代码。有些标记没有以HTML结尾,它容易受到SQL注入的影响。
发布于 2013-11-13 09:32:26
我实际上不明白你在这里想做什么,但似乎你要用post方法传递变量。并使用变量作为筛选器删除数据.
您需要创建一个输入元素或任何允许在post方法中传递变量的元素。
<table style='margin-left:42% ;'>
<form action="?" method="post">
<td><input name="delete_comment" type="submit" value="<?php echo $comments['comment_id']; ?>"></td>
<table> 就像这样。我使用了你的提交按钮,因为它没有其他用途,只是检查它是否已经被点击。
发布于 2013-11-13 09:40:46
之所以会发生这种情况,是因为如果在此之前回显了任何内容,并且将其放入while循环中,则标头函数将无法工作,因此一旦条件设置为true ($_POST‘’delete_comment‘),则对循环中的所有记录都是正确的,从而删除所有记录。
if ( isset( $_POST['delete_comment'] ) ) {
$sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$comments['comment_id']."'");
header("Location: thread.php");
}您的逻辑中似乎也存在一个问题,即只删除一次记录。您只是设置了一个通用标志,而不是要删除的特定comment_id。
https://stackoverflow.com/questions/19949878
复制相似问题