php 实现评论
PHP 实现评论功能
要实现评论功能,需要处理数据库存储、表单提交和显示评论等关键部分。以下是实现的基本方法:
数据库设计
创建一张评论表,包含字段如 id、name、email、content、created_at 等。使用以下 SQL 语句创建表:
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
表单提交处理 创建 HTML 表单让用户提交评论,使用 PHP 处理表单数据并存入数据库:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$content = htmlspecialchars($_POST['content']);
$stmt = $pdo->prepare("INSERT INTO comments (name, email, content) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $content]);
}
?>
<form method="post">
<input type="text" name="name" placeholder="Your Name" required>
<input type="email" name="email" placeholder="Your Email" required>
<textarea name="content" placeholder="Your Comment" required></textarea>
<button type="submit">Submit Comment</button>
</form>
显示评论 从数据库获取评论并显示在页面上:
<?php
$stmt = $pdo->query("SELECT * FROM comments ORDER BY created_at DESC");
$comments = $stmt->fetchAll();
foreach ($comments as $comment) {
echo '<div class="comment">';
echo '<h4>' . htmlspecialchars($comment['name']) . '</h4>';
echo '<p>' . htmlspecialchars($comment['content']) . '</p>';
echo '<small>' . $comment['created_at'] . '</small>';
echo '</div>';
}
?>
安全措施 对用户输入进行过滤和验证,防止 SQL 注入和 XSS 攻击:
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$content = filter_input(INPUT_POST, 'content', FILTER_SANITIZE_STRING);
分页功能 对于大量评论,实现分页显示:
$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM comments ORDER BY created_at DESC LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
回复功能
如果需要嵌套回复,修改数据库结构并添加 parent_id 字段:
ALTER TABLE comments ADD COLUMN parent_id INT DEFAULT NULL;
然后处理回复逻辑:

if (isset($_POST['parent_id'])) {
$parentId = (int)$_POST['parent_id'];
$stmt = $pdo->prepare("INSERT INTO comments (name, email, content, parent_id) VALUES (?, ?, ?, ?)");
$stmt->execute([$name, $email, $content, $parentId]);
}






