php实现评论回复
PHP实现评论回复功能
数据库设计
创建一个包含评论和回复的表结构,通常需要以下字段:
id: 主键content: 评论内容parent_id: 父评论ID(0表示顶级评论)user_id: 用户IDcreated_at: 创建时间
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT NOT NULL,
parent_id INT DEFAULT 0,
user_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
添加评论功能
通过表单提交评论内容,PHP处理并存入数据库:
// 处理评论提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['content'])) {
$content = htmlspecialchars($_POST['content']);
$parentId = isset($_POST['parent_id']) ? (int)$_POST['parent_id'] : 0;
// 假设已连接数据库
$stmt = $pdo->prepare("INSERT INTO comments (content, parent_id, user_id) VALUES (?, ?, ?)");
$stmt->execute([$content, $parentId, $_SESSION['user_id']]);
}
显示评论及回复
递归方式获取评论层级结构:
function getComments($parentId = 0) {
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM comments WHERE parent_id = ? ORDER BY created_at DESC");
$stmt->execute([$parentId]);
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($comments as &$comment) {
$comment['replies'] = getComments($comment['id']);
}
return $comments;
}
// 显示评论
$comments = getComments();
foreach ($comments as $comment) {
echo '<div class="comment">';
echo '<p>' . $comment['content'] . '</p>';
echo '<a href="?reply_to=' . $comment['id'] . '">回复</a>';
// 显示回复
if (!empty($comment['replies'])) {
echo '<div class="replies">';
foreach ($comment['replies'] as $reply) {
echo '<div class="reply">';
echo '<p>' . $reply['content'] . '</p>';
echo '</div>';
}
echo '</div>';
}
echo '</div>';
}
回复功能实现
在评论下方添加回复表单:

if (isset($_GET['reply_to'])) {
echo '<form method="POST" action="">
<input type="hidden" name="parent_id" value="' . (int)$_GET['reply_to'] . '">
<textarea name="content" placeholder="写下你的回复..."></textarea>
<button type="submit">提交回复</button>
</form>';
}
安全注意事项
- 对所有用户输入使用
htmlspecialchars()过滤 - 使用预处理语句防止SQL注入
- 验证用户权限,确保只有登录用户才能评论
- 对频繁操作实施限流措施






