当前位置:首页 > PHP

php 实现评论

2026-01-15 12:10:21PHP

实现 PHP 评论功能

数据库设计

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

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

SQL 创建表示例:

php 实现评论

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

前端表单

创建评论提交表单:

php 实现评论

<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 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现购物车

php实现购物车

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

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…