当前位置:首页 > PHP

php实现评论回复功能

2026-02-27 20:01:30PHP

数据库设计

创建两个表:comments 存储评论,replies 存储回复。comments 表包含主键 idcontent(评论内容)、user_id(用户ID)和 created_at(创建时间)。replies 表包含主键 idcomment_id(关联的评论ID)、content(回复内容)、user_id(用户ID)和 created_at(创建时间)。

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

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

提交评论

通过表单提交评论内容,后端使用 PHP 处理并存入数据库。确保对用户输入进行过滤,防止 SQL 注入。

php实现评论回复功能

<?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]);
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
}
?>

显示评论及回复

查询评论列表,并为每条评论查询关联的回复。使用嵌套循环展示评论和回复。

<?php
$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 "<form method='POST' action='reply.php'>";
    echo "<input type='hidden' name='comment_id' value='".$comment['id']."'>";
    echo "<textarea name='reply_content' placeholder='回复内容'></textarea>";
    echo "<button type='submit'>回复</button>";
    echo "</form>";

    $replies = $pdo->prepare("SELECT * FROM replies WHERE comment_id = ? ORDER BY created_at");
    $replies->execute([$comment['id']]);
    foreach ($replies->fetchAll() as $reply) {
        echo "<div class='reply'>";
        echo "<p>".htmlspecialchars($reply['content'])."</p>";
        echo "</div>";
    }
    echo "</div>";
}
?>

处理回复

创建 reply.php 文件处理回复提交,将回复内容关联到对应评论。

php实现评论回复功能

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['reply_content'])) {
    $comment_id = (int)$_POST['comment_id'];
    $content = htmlspecialchars($_POST['reply_content']);
    $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: ".$_SERVER['HTTP_REFERER']);
    exit;
}
?>

前端优化

使用 AJAX 实现无刷新提交和加载评论回复。通过 JavaScript 监听表单提交事件,异步发送请求并动态更新页面内容。

document.querySelectorAll('form').forEach(form => {
    form.addEventListener('submit', function(e) {
        e.preventDefault();
        const formData = new FormData(this);
        fetch(this.action, {
            method: 'POST',
            body: formData
        }).then(response => {
            location.reload();
        });
    });
});

安全性增强

对用户输入进行验证和过滤,使用预处理语句防止 SQL 注入。对输出内容使用 htmlspecialchars 防止 XSS 攻击。

$content = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);
$user_id = filter_var($_SESSION['user_id'], FILTER_VALIDATE_INT);

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

相关文章

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php验证码的实现

php验证码的实现

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

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

原生实现vue功能

原生实现vue功能

原生 JavaScript 实现 Vue 核心功能 使用原生 JavaScript 模拟 Vue 的核心功能(如数据绑定、虚拟 DOM、响应式更新等),可以通过以下方式实现: 数据响应式系统 通过…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…