当前位置:首页 > PHP

php实现评论回复功能

2026-02-13 21:06:18PHP

数据库设计

创建两个表:comments 用于存储评论,replies 用于存储回复。
comments 表结构:

CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL,
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

replies 表结构:

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

添加评论功能

通过表单提交评论内容,插入到 comments 表中:

php实现评论回复功能

// 处理评论提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['comment'])) {
    $content = htmlspecialchars($_POST['comment']);
    $user_id = $_SESSION['user_id']; // 假设用户已登录

    $stmt = $pdo->prepare("INSERT INTO comments (content, user_id) VALUES (?, ?)");
    $stmt->execute([$content, $user_id]);
}

显示评论列表

查询并显示所有评论:

$comments = $pdo->query("SELECT * FROM comments ORDER BY created_at DESC")->fetchAll();

foreach ($comments as $comment) {
    echo "<div class='comment'>";
    echo "<p>" . htmlspecialchars($comment['content']) . "</p>";
    echo "<a href='#' onclick='showReplyForm(" . $comment['id'] . ")'>回复</a>";

    // 显示回复表单(初始隐藏)
    echo "<div id='reply-form-" . $comment['id'] . "' style='display:none;'>";
    echo "<form method='POST' action='add_reply.php'>";
    echo "<input type='hidden' name='comment_id' value='" . $comment['id'] . "'>";
    echo "<textarea name='reply_content'></textarea>";
    echo "<button type='submit'>提交回复</button>";
    echo "</form>";
    echo "</div>";

    // 显示该评论的回复
    $replies = $pdo->prepare("SELECT * FROM replies WHERE comment_id = ? ORDER BY created_at ASC");
    $replies->execute([$comment['id']]);

    foreach ($replies->fetchAll() as $reply) {
        echo "<div class='reply'>";
        echo "<p>" . htmlspecialchars($reply['content']) . "</p>";
        echo "</div>";
    }

    echo "</div>";
}

添加回复功能

创建 add_reply.php 处理回复提交:

php实现评论回复功能

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['reply_content'])) {
    $content = htmlspecialchars($_POST['reply_content']);
    $comment_id = $_POST['comment_id'];
    $user_id = $_SESSION['user_id'];

    $stmt = $pdo->prepare("INSERT INTO replies (comment_id, content, user_id) VALUES (?, ?, ?)");
    $stmt->execute([$comment_id, $content, $user_id]);

    header("Location: comments.php"); // 返回评论页
    exit();
}

前端交互

使用 JavaScript 切换回复表单的显示/隐藏:

function showReplyForm(commentId) {
    var form = document.getElementById('reply-form-' + commentId);
    form.style.display = form.style.display === 'none' ? 'block' : 'none';
}

样式优化

添加基础 CSS 样式区分评论和回复:

.comment {
    border: 1px solid #ddd;
    padding: 10px;
    margin-bottom: 10px;
}

.reply {
    margin-left: 30px;
    border-left: 3px solid #eee;
    padding-left: 10px;
    margin-top: 5px;
}

标签: 功能php
分享给朋友:

相关文章

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

php 实现秒杀

php 实现秒杀

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

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…