删除评论

时间:2013-11-13 09:21:16

标签: php mysql

正如您所看到的,每个评论都有一个按钮,但是当我点击一个按钮时它会删除每个评论。我只想删除它所属的评论。我可能会理解删除所有内容的原因,因为它会从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");
    }


    }

3 个答案:

答案 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被删除