当前位置:首页 > 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
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
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 攻击。

php实现评论回复功能

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

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

相关文章

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

php实现打印功能

php实现打印功能

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

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…