You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

帖子系统代码无法正常显示评论及回复,求问题排查

排查思路与问题修复

让我帮你一步步排查评论和回复不显示的问题,你的代码里有几个明显的错误,直接导致了这个现象,咱们逐个解决:

1. 评论查询的SQL变量硬编码错误

在获取评论的SQL语句中,你不小心把postid变量写成了字符串字面量'postid',这会让SQL去查找postid字段等于字符串"postid"的记录,而不是当前帖子的真实ID:

// 错误写法
$commentsql = "SELECT * FROM posts WHERE hostid = '$hostid' AND postid = 'postid' AND commentid > 0 AND replyid = 0";
// 修正后
$commentsql = "SELECT * FROM posts WHERE hostid = '$hostid' AND postid = '$postid' AND commentid > 0 AND replyid = 0";

这是评论不显示的核心原因,改完这个后,评论查询就能匹配到正确的记录了。

2. 回复查询的变量名与函数拼写错误

处理回复的代码里有两处低级笔误,直接导致回复无法被查询和遍历:

  • 变量名写错:$replyresult = mysqli_query($conn, $repysql); 这里应该是$replysql(原代码少写了字母l)
  • 函数名拼写错误:myslqi_fetch_assoc($replyresult) 正确的函数名是mysqli_fetch_assoc(原代码把mysqli写成了myslqi,少了字母s)

修正后的回复处理代码:

$currentcommentid = $commentrow['commentid'];
$replysql = "SELECT * FROM posts WHERE hostid = '$hostid' AND postid = '$postid' AND commentid = '$currentcommentid' AND replyid > 0";
$replyresult = mysqli_query($conn, $replysql);
while ($replyrow = mysqli_fetch_assoc($replyresult)) {
    echo ' <div class="PostReplies"> <p> '.$replyrow['reply'].' </p> </div> ';
}

3. 查询结果判断的逻辑位置错误

你把mysqli_num_rows的判断放在了while循环内部,这是逻辑错误:如果查询没有结果,while循环根本不会执行,所以"There are no Comments."的提示永远不会显示。应该把行数判断移到循环外面,这样才能正确触发无评论的提示:

$commentresult = mysqli_query($conn, $commentsql);
if (mysqli_num_rows($commentresult) == 0) {
    echo ' <p>There are no Comments.</p> ';
} else {
    while ($commentrow = mysqli_fetch_assoc($commentresult)) {
        echo ' <div class="PostComments"> <p> '.$commentrow['comment'].' </p> </div> ';
        // 把回复处理的代码放在这里
    }
}

另外,回复的无结果判断可以直接去掉,因为如果没有回复,while循环不会执行,自然不会输出任何内容,刚好符合你“无回复时不输出”的需求。

额外提醒:SQL注入问题的修复(你提到已知该问题)

当前代码直接把$_GET参数拼接到SQL语句里,存在严重的SQL注入风险,必须修复。推荐使用预处理语句来处理所有包含用户输入的查询,示例如下:

比如获取用户信息的部分:

// 旧的危险写法
$usersql = "SELECT * FROM users WHERE userName = '$userName'";
$userresult = mysqli_query($conn, $usersql);

// 新的安全预处理写法
$usersql = "SELECT * FROM users WHERE userName = ?";
$stmt = mysqli_prepare($conn, $usersql);
mysqli_stmt_bind_param($stmt, "s", $userName); // "s"表示参数是字符串类型
mysqli_stmt_execute($stmt);
$userresult = mysqli_stmt_get_result($stmt);

所有涉及$_GET、$_POST等用户输入的SQL查询,都应该用这种方式处理,彻底避免注入攻击。

把以上这些错误全部修复后,你的评论和回复应该就能正常显示了。

内容的提问来源于stack exchange,提问作者Cole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:01:36