📅  最后修改于: 2023-12-03 15:36:53.965000             🧑  作者: Mango
本文将介绍如何使用PHP和MySQL创建一个简单的评论和回复系统。此系统将允许用户提交评论,管理员审核并回复评论,其他用户可以查看和回复评论。
首先,我们需要设计一个数据库来存储评论和回复。我们将创建两个表:comments和replies。
comments表将包含以下字段:
replies表将包含以下字段:
创建数据库脚本如下:
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创建了一个简单的评论和回复系统,涵盖了以下功能:
这是一个非常简单的示例,但我们可以使用此示例为其他项目构建更复杂的评论系统。