📜  创建评论和回复系统 PHP 和 MySQL (1)

📅  最后修改于: 2023-12-03 15:36:53.965000             🧑  作者: Mango

创建评论和回复系统 PHP 和 MySQL

本文将介绍如何使用PHP和MySQL创建一个简单的评论和回复系统。此系统将允许用户提交评论,管理员审核并回复评论,其他用户可以查看和回复评论。

设计数据库

首先,我们需要设计一个数据库来存储评论和回复。我们将创建两个表:comments和replies。

comments表将包含以下字段:

  • id: 评论的唯一标识符。
  • name: 评论者的姓名。
  • email: 评论者的电子邮件地址。
  • comment: 评论的内容。
  • status: 评论的状态(已发布/待审核)。
  • created_at: 评论创建的时间戳。

replies表将包含以下字段:

  • id: 回复的唯一标识符。
  • comment_id: 回复所属评论的id。
  • name: 回复者的姓名。
  • email: 回复者的电子邮件地址。
  • reply: 回复的内容。
  • created_at: 回复创建的时间戳。

创建数据库脚本如下:

CREATE DATABASE comments_db;
USE comments_db;

CREATE TABLE comments (
  id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(50),
  comment TEXT,
  status ENUM('approved','pending') DEFAULT 'pending',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE replies (
  id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  comment_id INT(11),
  name VARCHAR(50),
  email VARCHAR(50),
  reply TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
创建表单

现在我们需要创建一个表单让用户提交评论。我们将使用HTML表单来创建我们的表单,并使用PHP来处理表单提交并将评论保存到数据库中。

表单中每个输入框对应表单中的一个输入字段。当用户提交表单时,我们将从输入框中提取数据并将其插入到数据库中。

以下是HTML表单的代码:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
  <div class="form-group">
    <label for="name">姓名</label>
    <input type="text" class="form-control" name="name" required>
  </div>
  <div class="form-group">
    <label for="email">电子邮件地址</label>
    <input type="email" class="form-control" name="email" required>
  </div>
  <div class="form-group">
    <label for="comment">评论</label>
    <textarea class="form-control" name="comment" rows="5" required></textarea>
  </div>
  <button type="submit" class="btn btn-primary">提交评论</button>
</form>
处理表单提交

现在我们需要编写PHP代码来处理表单提交。将以下代码添加到PHP文件的顶部:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "comments_db";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

在表单中,我们将包含一个按钮,用户单击按钮后,表单将提交到$_SERVER ['PHP_SELF'],我们将使用此来检查表单是否已提交。

接下来,我们需要检查表单是否已提交,并处理POST数据。将以下代码添加到PHP文件的顶部:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = $_POST['name'];
  $email = $_POST['email'];
  $comment = $_POST['comment'];

  // 插入评论到数据库
  $sql = "INSERT INTO comments (name, email, comment) VALUES ('$name', '$email', '$comment')";
  if ($conn->query($sql) === TRUE) {
    echo "评论已提交并等待审核。";
  } else {
    echo "发生错误: " . $sql . " " . $conn->error;
  }
}

现在,当用户提交表单时,我们将从POST数据中提取评论并将其插入到comments表中。

显示评论

现在我们已经能够接收评论并将其存储在数据库中,我们需要将评论显示给用户。为此,我们将查询comments表中的所有评论并将其显示在网页上。

以下是查询评论的代码:

$sql = "SELECT * FROM comments WHERE status='approved' ORDER BY created_at DESC";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $comment_id = $row['id'];
    $name = $row['name'];
    $comment = $row['comment'];
    $created_at = $row['created_at'];
   
    // 显示评论
    echo "<div class='comment'>";
    echo "<h4>".$name." 说:</h4>";
    echo "<p>".$comment."</p>";
    echo "<p class='text-muted'>".$created_at."</p>";
    echo "</div>";
  }
} else {
  echo "暂无评论。";
}

此代码将查询comments表,并循环遍历每个评论。我们将从每个评论中提取必要的字段并将评论显示在网页上。

管理员回复

最后,我们将为管理员添加一些功能,使其能够审核和回复评论。

首先,我们需要添加一个status字段到comments表,用于跟踪评论的状态(已发布/待审核)。

接下来,我们将添加一个管理页面,用于显示所有待审核的评论,并允许管理员批准或拒绝评论。

以下是管理页面的代码:

$sql = "SELECT * FROM comments WHERE status='pending' ORDER BY created_at DESC";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $comment_id = $row['id'];
    $name = $row['name'];
    $comment = $row['comment'];
    $created_at = $row['created_at'];
   
    // 显示待审核的评论
    echo "<div class='comment'>";
    echo "<h4>".$name." 说:</h4>";
    echo "<p>".$comment."</p>";
    echo "<p class='text-muted'>".$created_at."</p>";
    echo "<form method='post' action='".htmlspecialchars($_SERVER["PHP_SELF"])."'>";
    echo "<input type='hidden' name='comment_id' value='".$comment_id."'>";
    echo "<button type='submit' name='status' value='approved' class='btn btn-primary btn-sm'>批准</button>";
    echo "<button type='submit' name='status' value='rejected' class='btn btn-danger btn-sm'>拒绝</button>";
    echo "</form>";
    echo "</div>";
  }
} else {
  echo "没有需要审核的评论。";
}

此代码将查询comments表,并循环遍历所有待审核的评论。我们将从每个评论中提取必要的字段并将其显示在网页上。

我们还将为每条评论添加两个按钮:一个用于批准评论,另一个用于拒绝评论。单击这些按钮后,我们将更新数据库的评论状态。

以下是更新评论状态的代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $status = $_POST['status'];
  $comment_id = $_POST['comment_id'];

  // 更新评论状态
  $sql = "UPDATE comments SET status='$status' WHERE id='$comment_id'";
  if ($conn->query($sql) === TRUE) {
    echo "评论状态已更新。";
  } else {
    echo "发生错误: " . $sql . " " . $conn->error;
  }
}

此代码将从POST数据中提取评论状态和评论ID,并将状态更新为comments表中的状态字段。

添加回复

最后,我们将允许管理员回复评论。为此,我们将添加一个回复表单,允许管理员在查看评论时回复评论。

以下是回复表单的代码:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
  <input type="hidden" name="comment_id" value="<?php echo $comment_id; ?>">
  <div class="form-group">
    <label for="name">姓名</label>
    <input type="text" class="form-control" name="name" required>
  </div>
  <div class="form-group">
    <label for="email">电子邮件地址</label>
    <input type="email" class="form-control" name="email" required>
  </div>
  <div class="form-group">
    <label for="reply">回复</label>
    <textarea class="form-control" name="reply" rows="5" required></textarea>
  </div>
  <button type="submit" class="btn btn-primary">回复</button>
</form>

此表单包含一个名为“comment_id”的隐藏字段,用于指定回复所属的评论。当管理员提交回复时,我们将插入一条新的行到replies表中。

以下是插入回复的代码:

if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST['reply'])) {
  $comment_id = $_POST['comment_id'];
  $name = $_POST['name'];
  $email = $_POST['email'];
  $reply = $_POST['reply'];

  // 插入回复到数据库
  $sql = "INSERT INTO replies (comment_id, name, email, reply) 
          VALUES ('$comment_id', '$name', '$email', '$reply')";
  if ($conn->query($sql) === TRUE) {
    echo "回复已提交。";
  } else {
    echo "发生错误: " . $sql . " " . $conn->error;
  }
}

此代码将从POST数据中提取回复的相关信息并将其插入到replies表中。

总结

我们通过使用PHP和MySQL创建了一个简单的评论和回复系统,涵盖了以下功能:

  • 提交评论
  • 显示评论
  • 管理审核待批准评论
  • 批准/拒绝评论
  • 回复评论

这是一个非常简单的示例,但我们可以使用此示例为其他项目构建更复杂的评论系统。