我正在运行一个mysql查询来获取我网站上的所有用户评论,这些评论待审批或被用户删除。
我有一个基本的文件结构:
Reviews.php,它提取mysql结果和函数文件approve_review.php。
新的评论在mysql查询中很好用,但是当我尝试批准或删除评论没有任何反应时,我没有任何错误或任何错误。
当点击批准时,假设将表格ptb_reviews.approved从“0”更新为“1”,如果点击删除同样适用,它会将评论从“0”更新为“1”。
(我只为此目的包含了批准代码,因为它们实际上都与批准设置为删除相同)
我正在使用review_id,以便它知道要批准或删除哪个审核以及会话,以便只有用户可以批准或删除它们。
有人可以看看,看看他们是否能看到让它发挥作用的方法?
Reviews.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>
<? } ?>
approve_review.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');
?>
答案 0 :(得分:1)
我没有任何错误或任何错误。
这可能是因为你没有检查错误。
每次调用数据库API函数时,都需要检查返回值。如果有任何错误,大多数函数都返回false
,然后你需要调用另一个函数来检查错误的类型,错误信息等。
示例:
$result = mysql_query($query, $connection);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
答案 1 :(得分: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, prepared statements to prevent any SQL injections.
您的查询应如下所示:
$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());
}
查看您的查询是否成功执行以及是否存在任何错误(为何未将其设置为review = 1)
答案 2 :(得分:0)
您也可以只显示内联错误:
mysql_query($query, $connection) or die(mysql_error());
哪个应该揭示任何问题。