删除注释


Deleting comments

如您所见,每条评论都有一个按钮,但当我单击一个按钮时,它会删除每条评论。我只希望它删除它所属的评论。我可能明白为什么它会删除所有内容,因为它从$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