php 实现评论
实现 PHP 评论功能
数据库设计
创建数据库表存储评论数据,通常包含以下字段:
id:评论唯一标识user_id:用户IDcontent:评论内容created_at:评论时间parent_id:回复的父评论ID(用于嵌套评论)
SQL 创建表示例:

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
);
前端表单
创建评论提交表单:

<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攻击 - 验证用户权限,确保只有登录用户才能评论
- 对评论内容进行过滤,防止不良内容
扩展功能
- 添加评论点赞功能
- 实现评论分页
- 添加富文本编辑器支持
- 实现评论审核机制
- 添加用户头像和昵称显示






