php实现评论回复功能代码

涛哥 PHP代码

点击进入:php评论功能实现代码及详细需求说明

评论回复功能的实现通常需要以下几个步骤:

  1. 创建数据库表:在评论数据库表中添加一个字段来表示回复的父级评论 ID,即回复的评论是哪个评论的子评论。
  2. 添加回复表单:在评论下方添加一个回复表单,该表单需要包括以下字段:用户昵称、电子邮件地址(可选)、回复内容和父级评论 ID。
  3. 处理表单提交:当用户提交回复表单时,将表单中的数据插入到评论数据库表中,并将回复的父级评论 ID 存储到数据库。
  4. 显示回复:在父级评论下方显示所有回复。回复可以按时间顺序排序,并包括回复内容、回复时间、用户昵称等。

下面是一个简单的 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 的评论),第二个查询语句用于查询每个父级评论的所有回复。我们在每个父级评论下方显示其所有回复,并在每个评论下方添加回复表单。请注意,由于上述示例代码仅供参考,因此可能需要进行修改以适应您的特定情况。