首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除评论

问删除评论
EN

Stack Overflow用户
提问于 2013-11-13 09:21:16
回答 3查看 133关注 0票数 0

正如您所看到的,在每个评论上都有一个按钮,但当我单击一个按钮时,它会删除所有评论。我只希望它删除它所属的评论。我可能理解它为什么删除所有内容,因为它从comment_id查询中删除了列$sql_result2中的所有变量,但我不知道如何修复它。我应该改变我的$sql_result2吗?我在这里做错什么了?

代码语言:javascript
复制
$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");
    }


    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-13 09:30:19

您可以在while循环中执行它,因此对每个注释执行以下代码:

代码语言:javascript
复制
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变量。

例如:

代码语言:javascript
复制
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注入的影响。

票数 3
EN

Stack Overflow用户

发布于 2013-11-13 09:32:26

我实际上不明白你在这里想做什么,但似乎你要用post方法传递变量。并使用变量作为筛选器删除数据.

您需要创建一个输入元素或任何允许在post方法中传递变量的元素。

代码语言:javascript
复制
 <table style='margin-left:42% ;'>
            <form action="?" method="post">
            <td><input name="delete_comment" type="submit" value="<?php echo $comments['comment_id']; ?>"></td>
            <table> 

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

票数 0
EN

Stack Overflow用户

发布于 2013-11-13 09:40:46

之所以会发生这种情况,是因为如果在此之前回显了任何内容,并且将其放入while循环中,则标头函数将无法工作,因此一旦条件设置为true ($_POST‘’delete_comment‘),则对循环中的所有记录都是正确的,从而删除所有记录。

代码语言:javascript
复制
if ( isset( $_POST['delete_comment'] ) ) { 
        $sqldeletecomment=$mysqli2->query("delete from comments WHERE comment_id = '".$comments['comment_id']."'");
        header("Location: thread.php");
    }

您的逻辑中似乎也存在一个问题,即只删除一次记录。您只是设置了一个通用标志,而不是要删除的特定comment_id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19949878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档