php评论实现过程
实现PHP评论功能的基本步骤
数据库设计
创建评论表(如comments),包含字段:id(主键)、user_id(用户ID)、content(评论内容)、created_at(创建时间)、parent_id(父评论ID,用于回复功能)等。
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 (user_id) REFERENCES users(id),
FOREIGN KEY (parent_id) REFERENCES comments(id)
);
前端表单 创建评论提交表单,包含内容输入框和提交按钮。使用HTML和CSS设计界面。
<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>
后端处理
创建PHP脚本(如submit_comment.php)接收表单数据并存入数据库。进行数据验证和防SQL注入处理。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$content = htmlspecialchars($_POST['content']);
$parent_id = intval($_POST['parent_id']);
$user_id = $_SESSION['user_id']; // 假设用户已登录
$stmt = $pdo->prepare("INSERT INTO comments (user_id, content, parent_id) VALUES (?, ?, ?)");
$stmt->execute([$user_id, $content, $parent_id]);
header("Location: index.php");
exit;
}
?>
显示评论 创建PHP脚本从数据库获取评论并按时间或层级显示。可以使用递归函数处理嵌套回复。
function displayComments($parent_id = 0) {
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM comments WHERE parent_id = ? ORDER BY created_at DESC");
$stmt->execute([$parent_id]);
while ($comment = $stmt->fetch()) {
echo '<div class="comment">';
echo '<p>' . htmlspecialchars($comment['content']) . '</p>';
echo '<a href="#" class="reply" data-id="' . $comment['id'] . '">回复</a>';
displayComments($comment['id']); // 递归显示回复
echo '</div>';
}
}
高级功能实现
AJAX无刷新提交 使用jQuery或原生JavaScript实现异步评论提交,提升用户体验。
$('form').submit(function(e) {
e.preventDefault();
$.post('submit_comment.php', $(this).serialize(), function() {
location.reload();
});
});
分页加载 对于大量评论,实现分页功能避免一次性加载所有数据。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$stmt = $pdo->prepare("SELECT * FROM comments WHERE parent_id = 0 ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->execute([$limit, $offset]);
敏感词过滤 在提交前检查评论内容是否包含敏感词汇。
$badWords = ['敏感词1', '敏感词2'];
foreach ($badWords as $word) {
if (stripos($content, $word) !== false) {
die('评论包含不允许的内容');
}
}
安全注意事项
防止XSS攻击
始终使用htmlspecialchars()函数输出用户提交的内容。
防止CSRF攻击 在表单中添加CSRF令牌并验证。
$_SESSION['token'] = bin2hex(random_bytes(32));
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
输入验证 验证用户输入的数据类型和长度。
if (strlen($content) < 5 || strlen($content) > 1000) {
die('评论长度不符合要求');
}





