当前位置:首页 > 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防护:

<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;
}

评论显示

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

// 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();

回复功能

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

php评论功能实现代码

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实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

vue拨号功能实现

vue拨号功能实现

Vue 拨号功能实现 基本思路 拨号功能通常包括数字键盘、号码显示区、拨号按钮等组件。通过Vue的数据绑定和事件处理机制,可以轻松实现交互逻辑。 实现步骤 1. 创建数字键盘组件 使用Vue的v-f…

vue实现截图功能

vue实现截图功能

Vue实现截图功能的方法 使用html2canvas库 html2canvas是一个流行的JavaScript库,可以将HTML元素转换为Canvas,进而生成图片。在Vue项目中安装html2can…

vue实现预览功能

vue实现预览功能

Vue 实现文件预览功能 使用 FileReader 实现本地文件预览 通过 HTML5 的 FileReader API 可以读取本地文件内容并显示预览。创建一个文件上传组件,监听 change…

vue实现关注功能

vue实现关注功能

Vue 实现关注功能的方法 数据绑定与状态管理 使用 Vue 的响应式数据绑定功能,通过 v-model 或 v-bind 动态绑定关注按钮的状态。在组件的 data 或 Vuex 状态管理中定义 i…