mysql实现评论盖楼
时间: 2023-07-07 10:34:13 浏览: 62
实现评论盖楼系统一般需要以下步骤:
1. 创建评论表:在MySQL中创建一个表来存储评论数据,包括评论内容、时间戳、用户ID、回复的评论ID等字段。例如:
```
CREATE TABLE comments (
id INT(11) NOT NULL AUTO_INCREMENT,
user_id INT(11) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
parent_id INT(11),
PRIMARY KEY (id)
);
```
2. 编写PHP脚本:编写PHP脚本来处理用户提交的评论,并将其保存到数据库表中。需要注意的是,当用户回复某条评论时,需要保存该评论的ID作为回复的评论ID。
```
// 连接数据库
$conn = mysqli_connect($host, $username, $password, $dbname);
// 处理用户提交的评论
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$user_id = $_POST['user_id'];
$content = $_POST['content'];
$parent_id = $_POST['parent_id'];
$sql = "INSERT INTO comments (user_id, content, parent_id) VALUES ('$user_id', '$content', '$parent_id')";
mysqli_query($conn, $sql);
}
```
3. 显示评论列表:编写PHP脚本来查询数据库中的评论数据,并将其显示在页面上。需要使用递归算法来处理评论的嵌套结构,并使用CSS和JavaScript来实现评论盖楼的效果。
```
// 获取根评论列表
$sql = "SELECT * FROM comments WHERE parent_id IS NULL";
$result = mysqli_query($conn, $sql);
// 递归处理子评论列表
function showComments($parent_id, $level) {
global $conn;
$sql = "SELECT * FROM comments WHERE parent_id=$parent_id";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
echo '<div style="margin-left: ' . ($level * 20) . 'px;">';
echo '<p>' . $row['content'] . '</p>';
echo '<small>' . $row['created_at'] . '</small>';
echo '<a href="#" onclick="showReplyForm(' . $row['id'] . ')">回复</a>';
echo '<div id="reply-form-' . $row['id'] . '" style="display: none;">';
echo '<form method="post" action="#">';
echo '<input type="hidden" name="parent_id" value="' . $row['id'] . '">';
echo '<input type="text" name="content">';
echo '<input type="submit" value="提交">';
echo '</form>';
echo '</div>';
showComments($row['id'], $level + 1);
echo '</div>';
}
}
// 显示评论列表
while ($row = mysqli_fetch_assoc($result)) {
echo '<div>';
echo '<p>' . $row['content'] . '</p>';
echo '<small>' . $row['created_at'] . '</small>';
echo '<a href="#" onclick="showReplyForm(' . $row['id'] . ')">回复</a>';
echo '<div id="reply-form-' . $row['id'] . '" style="display: none;">';
echo '<form method="post" action="#">';
echo '<input type="hidden" name="parent_id" value="' . $row['id'] . '">';
echo '<input type="text" name="content">';
echo '<input type="submit" value="提交">';
echo '</form>';
echo '</div>';
showComments($row['id'], 1);
echo '</div>';
}
```
需要注意的是,为了避免SQL注入攻击,需要使用参数化查询或预处理语句来处理用户提交的数据。另外,为了安全起见,还需要进行用户身份验证和数据过滤。