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

PHP开发如何实现仅向单篇文章提交评论 评论同步所有文章怎么修复

问题修复方案

你的问题出在评论提交逻辑错误和评论查询未过滤当前文章ID两个环节,按以下步骤修改即可:

1. 页面开头增加当前文章ID获取逻辑

访问单篇文章页的路径应为post.php?post_id=xxx,在页面最顶部先拿到并校验当前文章ID:

// 放在页面最开头,优先获取当前文章ID
$current_post_id = isset($_GET['post_id']) ? intval($_GET['post_id']) : 0;
if ($current_post_id <= 0) {
    echo "文章不存在";
    exit;
}

2. 修复评论提交逻辑

原有提交逻辑存在两个错误:一是取文章ID时错误将字符串变量当数组读取,二是提交成功跳转未带文章ID,修改如下:

if(isset($_POST['create_comment'])){
    // 增加内容非空校验
    $comment_content = trim($_POST['comment_contents']);
    if (empty($comment_content)) {
        echo "评论内容不能为空";
        exit;
    }
    
    $comment = $db->prepare('INSERT INTO comments SET comment_user_id=?, comment_post_id=?, comment_contents=?, created_time=NOW()');
    $comment->execute(array(
        $user['user_id'],
        $current_post_id, // 直接使用已经校验过的当前文章ID
        $comment_content
    ));
    // 跳转时带上当前文章ID,回到对应文章页
    header("Location: post.php?post_id={$current_post_id}");
    exit();
}

3. 评论表单增加隐藏的文章ID字段

在<form>标签内部增加隐藏域,确保提交时传递当前文章ID:

<form action="" method="post" role="form">
    <!-- 新增下面这行隐藏域 -->
    <input type="hidden" name="post_id" value="<?php echo $current_post_id; ?>">
    <div class="form-group">
        <label for="Comment">Your Comment</label>
        <textarea class="form-control" rows="3" name="comment_contents"></textarea>
    </div>
    <button type="submit" name="create_comment" class="btn btn-primary">Comment</button>
</form>

4. 修复评论查询逻辑,增加文章ID过滤

原有查询没有过滤条件,会取出所有文章的评论,修改为仅查询当前文章的评论:

// 使用预处理查询,仅查询当前文章的评论,不需要关联posts表
$comments = $db->prepare('SELECT u.user_name, c.* FROM users u, comments c WHERE u.user_id=c.comment_user_id AND c.comment_post_id = ? ORDER BY c.created_time DESC');
$comments->execute(array($current_post_id));

额外优化建议

  • 新增评论时可以额外校验当前文章是否存在,避免给不存在的文章提交评论
  • 删除评论逻辑中,除了校验用户身份,建议也校验评论所属文章,避免越权操作
  • 所有输出到页面的内容都已经做了htmlspecialchars转义,有效避免XSS风险,可保持该做法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:24:03