正如您所看到的,每个评论都有一个按钮,但是当我点击一个按钮时它会删除每个评论。我只想删除它所属的评论。我可能会理解删除所有内容的原因,因为它会从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");
}
}
答案 0 :(得分:3)
您在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注入攻击。
答案 1 :(得分:0)
我实际上并没有得到你想要做的事情,但似乎你要使用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>
就像这样......我使用了你的提交按钮,因为除了检查它是否已被点击之外别无用了。
答案 2 :(得分:0)
这种情况正在发生,因为如果在此之前回显了任何事物并且你把它放在while循环中,那么头函数不起作用所以一旦条件设置($ _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被删除