0

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


    }
4

3 回答 3

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 注入的影响。

于 2013-11-13T09:30:19.770 回答
0

发生这种情况是因为如果在此之前回显任何内容并将其放入 while 循环中,则标头函数不起作用,因此一旦条件 isset( $_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

于 2013-11-13T09:40:46.903 回答
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> 

就像这样......我使用了你的提交按钮,因为它除了检查它是否已经被点击之外没有其他用途。

于 2013-11-13T09:32:26.150 回答