php评论实现过程
PHP 评论系统实现步骤
数据库设计
创建评论表,包含字段如 id、user_id、content、created_at 和 parent_id(用于回复功能)。MySQL 示例:
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
);
表单提交处理
创建 HTML 表单用于提交评论,通过 PHP 接收并存储到数据库:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$content = htmlspecialchars($_POST['content']);
$parentId = isset($_POST['parent_id']) ? (int)$_POST['parent_id'] : null;
$stmt = $pdo->prepare("INSERT INTO comments (user_id, content, parent_id) VALUES (?, ?, ?)");
$stmt->execute([$_SESSION['user_id'], $content, $parentId]);
}
?>
评论显示
从数据库查询评论并按层级显示:
function displayComments($parentId = null) {
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM comments WHERE parent_id " . ($parentId ? "= ?" : "IS NULL"));
$stmt->execute($parentId ? [$parentId] : []);
while ($comment = $stmt->fetch()) {
echo "<div class='comment'>";
echo "<p>{$comment['content']}</p>";
echo "<a href='?reply_to={$comment['id']}'>Reply</a>";
displayComments($comment['id']); // 递归显示回复
echo "</div>";
}
}
回复功能
在表单中隐藏 parent_id 字段以实现回复:
<?php if (isset($_GET['reply_to'])): ?>
<input type="hidden" name="parent_id" value="<?= $_GET['reply_to'] ?>">
<?php endif; ?>
安全性处理
对所有用户输入使用 htmlspecialchars() 转义,防止 XSS 攻击。使用预处理语句防止 SQL 注入。对敏感操作检查用户权限。
样式优化
通过 CSS 设置评论层级缩进,增强可读性:
.comment {
margin-left: 20px;
border-left: 1px solid #ddd;
padding-left: 10px;
}
异步加载(可选)
使用 AJAX 实现无刷新提交和加载评论:

$('#comment-form').submit(function(e) {
e.preventDefault();
$.post('comment.php', $(this).serialize(), function(data) {
$('#comments').append(data);
});
});






