如您所见,每条评论都有一个按钮,但当我单击一个按钮时,它会删除每条评论。我只希望它删除它所属的评论。我可能明白为什么它会删除所有内容,因为它从$sql_result2
查询中删除了列comment_id
中的所有变量,但我不知道如何解决它。我应该改变我的$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");
}
}
你在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注入的影响。
我实际上不明白您在这里想做什么,但似乎您要使用 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>
就像这样...我使用了您的提交按钮,因为它除了检查它是否已经单击之外没有其他用途。
发生这种情况
是因为如果在此之前回显了任何内容并且您将其放入 while 循环中,则标头函数不起作用,因此一旦条件 isset( $_POST['delete_comment'] 为 true,它将对循环中的所有记录为真,因此删除所有记录。
if ( isset( $_POST['delete_comment'] ) ) {
$sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$comments['comment_id']."'");
header("Location: thread.php");
}
您的逻辑中似乎也存在问题,仅删除一条记录。 您只是设置了一个常规标志,而不是要删除的特定comment_id