为什么删除查询在PHP中不起作用?

时间:2015-11-25 14:42:57

标签: php mysql

我正在制作一个评论系统&我创建了一个管理员可以删除评论的页面。我已编码所有内容和它似乎是对的,但我不知道为什么它根本不起作用......

这是管理员页面的代码:

    <html>
    <head>
        <title>Admins Page</title>
    </head>
    <body>
    <?php 
    function getCM(){
        global $con;
        $get_comment = "select * from product_comments where type='0'";
        $run_comment = mysqli_query($con, $get_comment);
        while($row_comment = mysqli_fetch_array($run_comment)){
            $cmid = $row_comment["id"];
            $cmcode = $row_comment["productcode"];
            $cmemail = $row_comment["email"];
            $cmname= $row_comment["name"];
            $cmcomment = $row_comment["comment"];
            $cmdate = $row_comment["modified_date"];
            $cmtime = $row_comment["modified_time"];
            $cmtype = $row_comment["type"];

            echo "
                <div class='container'>
                  <div id='table' class='table-editable'>
                    <span class='table-add glyphicon glyphicon-plus'></span>
                    <table class='table'>
                      <tr>
                        <th>Comment ID #$cmid</th>
                      </tr>
                      <tr>
                        <td contenteditable='true'>$cmcomment</td>
                        <td>
                          <span class='table-remove glyphicon glyphicon-remove'></span>
                        </td>
                        <td>
                          <a href='delete.php?id=$cmid'>Delete</a>
                        </td>
                      </tr>

                </div>
            ";
        }
    }
    ?>
    </body>
</html>

这是delete.php页面的代码:

 <?php 
session_start();
if (!isset($_SESSION["manager"])) {
    header("location: admin_login.php"); 
    exit();
}
require '../php_includes/init/db_conx.php'; 
require '../functions/func.php'; 

    if (isset($_GET['cmid'])){
        $comment_id = $_GET['cmid'];
        mysqli_query("DELETE FROM product_comments WHERE id='$comment_id'") or die(mysql_error());
        echo "<script>alert('Comment has been deleted!')</script>";
        header("Location: product_comments.php");
    }
?>

如果您知道我的问题,请告诉我......

2 个答案:

答案 0 :(得分:4)

这里有一些问题。

您没有连接到您的查询mysqli_query("DELETE...

该函数需要传递数据库连接参数。

然后mysql_error() mysql_函数不会与其自身API以外的任何内容混合使用mysqli_error($con),假设与mysqli_$con成功连接作为其变量。

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements

在PHP方面:

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

如果您的代码中存在其他错误。

在你的代码的这一部分中有:

    echo "<script>alert('Comment has been deleted!')</script>";
    header("Location: product_comments.php");

您在标头之前输出,需要删除回显并为标题添加exit;

咨询:How to fix "Headers already sent" error in PHP

然后这个:

<a href='delete.php?id=$cmid'>Delete</a>

您正在使用?id并引用$_GET['cmid']数组。

关于&#34; id&#34;被称为&#34;教一个人如何捕鱼&#34;

<强>脚注:

  • 我不知道你在哪里以及如何调用getCM()函数。

答案 1 :(得分:0)

您遇到的错误是

$comment_id = $_GET['cmid'];

将其更改为此

  $comment_id = $_GET['id'];

toexplain whz

<a href='delete.php?id=$cmid'>Delete</a>

你称cmid不是id。因此你需要得到id