当前位置:首页 > PHP

php评论功能实现代码

2026-01-29 00:08:48PHP

数据库设计

创建一个评论表存储评论数据,表结构可包含以下字段:

  • id:评论唯一标识,主键自增
  • content:评论内容,TEXT类型
  • user_id:用户ID,关联用户表
  • article_id:文章ID,关联文章表
  • created_at:评论创建时间,TIMESTAMP类型
CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL,
    user_id INT NOT NULL,
    article_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (article_id) REFERENCES articles(id)
);

评论表单

创建前端表单提交评论内容,需包含CSRF防护:

php评论功能实现代码

<form action="submit_comment.php" method="post">
    <input type="hidden" name="article_id" value="<?php echo $article_id; ?>">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <textarea name="content" required></textarea>
    <button type="submit">提交评论</button>
</form>

评论提交处理

创建PHP文件处理表单提交:

// submit_comment.php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 验证CSRF令牌
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF token验证失败');
    }

    // 过滤和验证输入
    $content = htmlspecialchars(trim($_POST['content']));
    $article_id = filter_input(INPUT_POST, 'article_id', FILTER_VALIDATE_INT);
    $user_id = $_SESSION['user_id'] ?? null;

    if (empty($content) || !$article_id || !$user_id) {
        die('参数不完整');
    }

    // 数据库连接
    $db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    // 插入评论
    $stmt = $db->prepare("INSERT INTO comments (content, user_id, article_id) VALUES (?, ?, ?)");
    $stmt->execute([$content, $user_id, $article_id]);

    // 重定向回原页面
    header("Location: article.php?id=$article_id");
    exit;
}

评论显示

在文章页面显示已有评论:

php评论功能实现代码

// article.php
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$article_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

// 获取评论
$stmt = $db->prepare("SELECT c.*, u.username FROM comments c 
                     JOIN users u ON c.user_id = u.id 
                     WHERE c.article_id = ? 
                     ORDER BY c.created_at DESC");
$stmt->execute([$article_id]);
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 显示评论
foreach ($comments as $comment) {
    echo '<div class="comment">';
    echo '<strong>' . htmlspecialchars($comment['username']) . '</strong>';
    echo '<p>' . htmlspecialchars($comment['content']) . '</p>';
    echo '<small>' . $comment['created_at'] . '</small>';
    echo '</div>';
}

安全增强

  • 使用预处理语句防止SQL注入
  • 对输出内容使用htmlspecialchars()转义
  • 实现CSRF防护机制
  • 添加用户权限验证(如登录状态检查)
  • 对评论内容进行敏感词过滤

分页功能

对于大量评论可添加分页支持:

// 分页参数
$page = max(1, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT));
$per_page = 10;
$offset = ($page - 1) * $per_page;

// 获取分页评论
$stmt = $db->prepare("SELECT c.*, u.username FROM comments c 
                     JOIN users u ON c.user_id = u.id 
                     WHERE c.article_id = ? 
                     ORDER BY c.created_at DESC 
                     LIMIT ? OFFSET ?");
$stmt->bindValue(1, $article_id, PDO::PARAM_INT);
$stmt->bindValue(2, $per_page, PDO::PARAM_INT);
$stmt->bindValue(3, $offset, PDO::PARAM_INT);
$stmt->execute();

回复功能

如需实现评论回复功能,可扩展数据库表结构:

ALTER TABLE comments ADD COLUMN parent_id INT DEFAULT NULL;
ALTER TABLE comments ADD FOREIGN KEY (parent_id) REFERENCES comments(id);

然后在提交评论时处理parent_id参数,并修改显示逻辑实现嵌套展示。

标签: 代码功能
分享给朋友:

相关文章

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的方…

vue 实现多选功能

vue 实现多选功能

Vue 实现多选功能的方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选功能。适用于复选框组(checkbox)或下拉多选(select multi…

vue各种功能实现

vue各种功能实现

Vue 基础功能实现 数据绑定与响应式更新 使用 v-model 实现表单元素与数据的双向绑定,数据变更自动更新视图。 示例: <input v-model="message">…

vue实现代码

vue实现代码

以下是Vue实现常见功能的代码示例,涵盖基础语法、组件通信、状态管理等核心内容: 基础模板语法 <template> <div> <h1>{{ me…