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

基于PHP、MySQL和HTML的博客评论区显示异常问题求助

问题分析与解决方案

你的问题核心是评论与文章的关联逻辑错误,再加上只获取了单条评论数据,才导致只有第一篇文章能显示评论。咱们一步步拆解解决:

问题根源

你的代码里先执行了:

$wyswkom = mysqli_query($polacz, "SELECT * FROM kom"); 
$komy = mysqli_fetch_assoc($wyswkom);

这会让$komy只存储第一条评论的数据,后续循环文章时,所有文章都只能用这条评论,而且完全没和文章ID做关联,自然其他文章找不到对应评论。

修正方案

正确逻辑应该是:循环每篇文章时,根据当前文章的ID查询对应的评论,再循环输出这些评论。假设你的news表主键是id,kom表有外键news_id关联文章ID,修正后的代码如下:

// 先查询所有文章
$wynik = mysqli_query($polacz, "SELECT * FROM news"); 

// 循环遍历每一篇文章
while($news = mysqli_fetch_assoc($wynik)) {
    echo "<h2>{$news['title']}</h2>"; // 输出文章标题
    echo "<p>{$news['content']}</p>"; // 输出文章内容

    // 关键步骤:根据当前文章ID查询对应评论
    $komQuery = mysqli_query($polacz, "SELECT * FROM kom WHERE news_id = {$news['id']}");
    
    // 循环输出该文章的所有评论
    echo "<div class='comments-section'>";
    while($komy = mysqli_fetch_assoc($komQuery)) {
        echo "<div class='single-comment'>";
        echo "<p><strong>{$komy['comment_author']}</strong></p>";
        echo "<p>{$komy['comment_content']}</p>";
        echo "</div>";
    }
    echo "</div>";
}

额外优化建议

  • 为避免SQL注入风险,推荐使用预处理语句执行查询,尤其是涉及用户输入的场景:
// 预处理评论查询语句
$stmt = mysqli_prepare($polacz, "SELECT * FROM kom WHERE news_id = ?");
mysqli_stmt_bind_param($stmt, "i", $news['id']);
mysqli_stmt_execute($stmt);
$komQuery = mysqli_stmt_get_result($stmt);
  • 确认你的kom表确实存在news_id这类关联字段,并且添加评论时正确存储了对应文章的ID,否则评论也无法匹配到文章。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:21:44