0

我正在运行一个 mysql 查询来获取我网站上的所有用户评论,这些评论有待用户批准或删除。

我有一个基本的文件结构:

拉取mysql结果的Reviews.php和函数文件approve_review.php。

新评论在 mysql 查询中很好,但是当我尝试批准或删除评论时没有任何反应,我没有收到任何错误或任何东西。

单击批准时,假设将表 ptb_reviews.approved 从“0”更新为“1”,如果单击删除,则同样适用,它将评论从“0”更新为“1”。

(我只为此目的包含了批准代码,因为它们实际上是相同的,批准被设置为删除)

我正在使用 review_id 以便它知道要批准或删除哪个评论和会话,以便只有用户可以批准或删除它们。

有人可以看看,看看他们是否能找到让它工作的方法吗?

评论.php:

<?php
            $pending_set = get_pending_reviews();
            while ($reviews = mysql_fetch_array($pending_set)) {


    ?>

            <div class="prof-content-pend-reviews" id="reviews">
                 <div class="pend-review-content">
                 <?php echo "{$reviews['content']}"; ?>
                 </div>
                 <div class="message_pic">
                 <?php echo "<a href=\"profile.php?id={$reviews['from_user_id']}\"><img width=\"50px\" height=\"50px\" src=\"data/photos/{$reviews['from_user_id']}/_default.jpg\" /></a>";?>

                 </div>

                 <div class="forum-text">
                 <?php echo "Posted by {$reviews['display_name']}"; ?> <?php echo "".$age." days ago"; ?>
              </div>

              <a href="includes/approve_review.php?review=<?php echo $reviews['review_id']; ?>"><div class="approve"></div></a>
               <a href="includes/delete_review.php"><div class="delete"></div></a>


                 </div>

                 <? }  ?>

批准审查.php:

 function approve_review($review_id, $user) {
                            global $connection;
                global $_SESSION;
                            $query = "UPDATE ptb_reviews
                                        SET approved='1'
                                        WHERE id=$review_id";
                mysql_query($query, $connection);


                    }


        <?php
        require_once("session.php"); 
        require_once("functions.php");
        require('_config/connection.php');
        approve_review ($_GET['review_id'], $_SESSION['user_id']);
        header('Location: http://localhost/ptb1/reviews.php');
        ?>
4

3 回答 3

1

我注意到您的函数“approve_review”需要 2 个参数。但是第二个参数什么也没做。

反正,

首先,为了安全起见:

$review_id = (int) $_GET['review_id']; 
    // Just this, is a great security enhancement. Forces the variable to be int (like all id's are). 
    // You can also check if its a numeric by doing
if (is_numeric($review_id)){
    // continue with the update query
} else {
    // something fishy is going on..
}

您可能想查看PDO,准备好的语句以防止任何 SQL 注入。

您的查询应如下所示:

$query = "UPDATE ptb_reviews SET approved = 1 WHERE id = '$review_id' LIMIT 1";
// Using a LIMIT 1 is also a good practice. It limits the updates to 1 only in case of a hack.

要调试您的查询,您应该只回显您的查询,看看它是否是正确的 SQL 格式。

echo $query;
die();
// See what is really sent to MySQL

您还应该使用:

if (!mysql_query($query, $connection)){
    die(mysql_error());
}

查看您的查询是否成功执行以及是否有任何错误(为什么未将其设置为已审核 = 1)

于 2012-12-25T00:25:15.317 回答
1

我没有错误或任何东西。

那可能是因为您没有检查错误。

每次调用数据库 API 函数时,都需要检查返回值。如果有任何错误,大多数函数都会返回false,然后您需要调用另一个函数来检查它是什么类型的错误,错误消息等。

例子:

$result = mysql_query($query, $connection);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
于 2012-12-25T00:20:54.350 回答
0

你也可以只显示错误内联:

mysql_query($query, $connection) or die(mysql_error());

这应该揭示任何问题。

于 2012-12-25T00:23:14.320 回答