点击进入:php评论功能实现代码及详细需求说明
评论回复功能的实现通常需要以下几个步骤:
- 创建数据库表:在评论数据库表中添加一个字段来表示回复的父级评论 ID,即回复的评论是哪个评论的子评论。
- 添加回复表单:在评论下方添加一个回复表单,该表单需要包括以下字段:用户昵称、电子邮件地址(可选)、回复内容和父级评论 ID。
- 处理表单提交:当用户提交回复表单时,将表单中的数据插入到评论数据库表中,并将回复的父级评论 ID 存储到数据库。
- 显示回复:在父级评论下方显示所有回复。回复可以按时间顺序排序,并包括回复内容、回复时间、用户昵称等。
下面是一个简单的 PHP 评论回复功能实现代码示例:
创建数据库表
CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `content` text NOT NULL, `created_at` datetime NOT NULL, `parent_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加回复表单
<form method="post" action="post_comment.php"> <input type="hidden" name="parent_id" value="{parent_comment_id}"> <label for="name">昵称:</label> <input type="text" name="name" id="name" required> <label for="email">电子邮件:</label> <input type="email" name="email" id="email"> <label for="content">回复内容:</label> <textarea name="content" id="content" required></textarea> <input type="submit" value="提交回复"> </form>
处理表单提交
<?php // 连接数据库 $conn = mysqli_connect('localhost', 'username', 'password', 'database_name'); // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 获取表单数据 $user_id = 1; // TODO: 替换为当前用户的 ID $content = mysqli_real_escape_string($conn, $_POST['content']); $created_at = date('Y-m-d H:i:s'); $parent_id = isset($_POST['parent_id']) ? (int)$_POST['parent_id'] : null; // 插入回复到数据库 $sql = "INSERT INTO comments (user_id, content, created_at, parent_id) VALUES ($user_id, '$content', '$created_at', $parent_id)"; mysqli_query($conn, $sql); } // 关闭数据库连接 mysqli_close($conn); ?>
显示回复
<?php // 连接数据库 $conn = mysqli_connect('localhost', 'username', 'password', 'database_name'); // 查询所有评论 $sql = "SELECT c.*, u.name FROM comments c LEFT JOIN users u ON c.user_id = u.id WHERE parent_id IS NULL ORDER BY c.created_at DESC"; $result = mysqli_query($conn, $sql); // 显示所有评论及其回复 while ($row = mysqli_fetch_assoc($result)) { // 显示评论 echo '<div class="comment">'; echo '<p class="comment-author">' . $row['name'] . ':</p>'; echo '<p class="comment-content">' . $row['content'] . '</p>'; echo '<p class="comment-time">' . $row['created_at'] . '</p>';
// 查询该评论的所有回复 $sql = "SELECT c.*, u.name FROM comments c LEFT JOIN users u ON c.user_id = u.id WHERE parent_id = {$row['id']} ORDER BY c.created_at ASC"; $reply_result = mysqli_query($conn, $sql); // 显示所有回复 while ($reply_row = mysqli_fetch_assoc($reply_result)) { echo '<div class="comment reply">'; echo '<p class="comment-author">' . $reply_row['name'] . ':</p>'; echo '<p class="comment-content">' . $reply_row['content'] . '</p>'; echo '<p class="comment-time">' . $reply_row['created_at'] . '</p>'; echo '</div>'; } // 显示回复表单 echo '<div class="reply-form">'; echo '<form method="post" action="post_comment.php">'; echo '<input type="hidden" name="parent_id" value="' . $row['id'] . '">'; echo '<label for="name">昵称:</label>'; echo '<input type="text" name="name" id="name" required>'; echo '<label for="email">电子邮件:</label>'; echo '<input type="email" name="email" id="email">'; echo '<label for="content">回复内容:</label>'; echo '<textarea name="content" id="content" required></textarea>'; echo '<input type="submit" value="提交回复">'; echo '</form>'; echo '</div>'; echo '</div>'; } // 关闭数据库连接 mysqli_close($conn); ?>
以上示例代码中,我们使用了两个数据库查询语句,第一个查询语句用于查询所有父级评论(即没有父级评论 ID 的评论),第二个查询语句用于查询每个父级评论的所有回复。我们在每个父级评论下方显示其所有回复,并在每个评论下方添加回复表单。请注意,由于上述示例代码仅供参考,因此可能需要进行修改以适应您的特定情况。
评论