当前位置:首页 > PHP

php 实现评论

2026-01-15 12:10:21PHP

实现 PHP 评论功能

数据库设计

创建数据库表存储评论数据,通常包含以下字段:

  • id:评论唯一标识
  • user_id:用户ID
  • content:评论内容
  • created_at:评论时间
  • parent_id:回复的父评论ID(用于嵌套评论)

SQL 创建表示例:

CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    parent_id INT DEFAULT NULL,
    FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
);

前端表单

创建评论提交表单:

<form action="submit_comment.php" method="post">
    <textarea name="content" required></textarea>
    <input type="hidden" name="parent_id" value="0">
    <button type="submit">提交评论</button>
</form>

处理评论提交

创建 submit_comment.php 处理表单提交:

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

// 获取表单数据
$content = htmlspecialchars($_POST['content']);
$parent_id = intval($_POST['parent_id']);
$user_id = $_SESSION['user_id']; // 假设用户已登录

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

// 重定向回评论页面
header('Location: comments.php');
?>

显示评论

创建 comments.php 显示评论列表:

php 实现评论

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

// 获取顶级评论
$stmt = $db->query("SELECT * FROM comments WHERE parent_id = 0 ORDER BY created_at DESC");
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 递归函数获取回复
function getReplies($comment_id, $db) {
    $stmt = $db->prepare("SELECT * FROM comments WHERE parent_id = ? ORDER BY created_at ASC");
    $stmt->execute([$comment_id]);
    $replies = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($replies as &$reply) {
        $reply['replies'] = getReplies($reply['id'], $db);
    }

    return $replies;
}

// 为每条评论添加回复
foreach ($comments as &$comment) {
    $comment['replies'] = getReplies($comment['id'], $db);
}
?>

<!-- 显示评论 -->
<div class="comments">
    <?php foreach ($comments as $comment): ?>
        <div class="comment">
            <p><?= $comment['content'] ?></p>
            <small>Posted by user <?= $comment['user_id'] ?></small>

            <!-- 回复表单 -->
            <form action="submit_comment.php" method="post">
                <textarea name="content" required></textarea>
                <input type="hidden" name="parent_id" value="<?= $comment['id'] ?>">
                <button type="submit">回复</button>
            </form>

            <!-- 显示回复 -->
            <div class="replies">
                <?php foreach ($comment['replies'] as $reply): ?>
                    <div class="reply">
                        <p><?= $reply['content'] ?></p>
                        <small>Posted by user <?= $reply['user_id'] ?></small>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>
    <?php endforeach; ?>
</div>

安全考虑

  • 使用预处理语句防止SQL注入
  • 对输出内容使用 htmlspecialchars() 防止XSS攻击
  • 验证用户权限,确保只有登录用户才能评论
  • 对评论内容进行过滤,防止不良内容

扩展功能

  • 添加评论点赞功能
  • 实现评论分页
  • 添加富文本编辑器支持
  • 实现评论审核机制
  • 添加用户头像和昵称显示

标签: php
分享给朋友:

相关文章

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <div st…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…