当前位置:首页 > 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
// 连接数据库
$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实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_sh…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…