当前位置:首页 > 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和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…