当前位置:首页 > 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 表中:

// 处理评论提交
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 处理回复提交:

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实现评论回复功能

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

相关文章

vue实现倒计时功能

vue实现倒计时功能

vue实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInter…

vue实现分页功能

vue实现分页功能

Vue 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue实现功能

vue实现功能

Vue 实现功能的方法 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是几种常见的功能实现方法: 数据绑定 Vue 提供了双向数据绑定,可以通过 v-model 指令实现表单输入和应用…

php实现分页

php实现分页

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

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…