php实现回复功能
实现PHP回复功能的方法
数据库设计
创建一个数据库表用于存储回复信息,包含字段如id、parent_id(用于标识父级评论)、content、user_id、created_at等。
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
parent_id INT DEFAULT NULL,
content TEXT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
);
添加回复表单
在评论下方添加回复表单,包含隐藏字段parent_id用于标识回复对象。

<form action="reply.php" method="post">
<input type="hidden" name="parent_id" value="<?php echo $comment_id; ?>">
<textarea name="content" required></textarea>
<button type="submit">回复</button>
</form>
处理回复逻辑
创建reply.php文件处理回复提交,验证数据并插入数据库。

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 获取表单数据
$parent_id = $_POST['parent_id'] ?? null;
$content = $_POST['content'] ?? '';
$user_id = $_SESSION['user_id'] ?? 0;
// 验证并插入回复
if ($content && $user_id) {
$stmt = $db->prepare("INSERT INTO comments (parent_id, content, user_id) VALUES (?, ?, ?)");
$stmt->execute([$parent_id, $content, $user_id]);
header("Location: comments.php");
exit;
} else {
echo "回复内容不能为空";
}
?>
显示嵌套回复
使用递归函数或循环显示嵌套结构的回复。
function displayComments($parent_id = null, $depth = 0) {
global $db;
$stmt = $db->prepare("SELECT * FROM comments WHERE parent_id " . ($parent_id ? "= ?" : "IS NULL"));
$stmt->execute($parent_id ? [$parent_id] : []);
while ($comment = $stmt->fetch()) {
echo str_repeat(" ", $depth * 4) . htmlspecialchars($comment['content']) . "<br>";
displayComments($comment['id'], $depth + 1);
}
}
displayComments();
安全性考虑
对所有用户输入进行过滤和验证,使用预处理语句防止SQL注入,对输出内容使用htmlspecialchars()防止XSS攻击。
$content = filter_input(INPUT_POST, 'content', FILTER_SANITIZE_STRING);
性能优化
对于大量回复,考虑使用闭包表或嵌套集模型代替邻接表,为parent_id字段添加索引提高查询效率。






