
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。多年电商行业从业经验,对系统架构,数据分析处理等大规模应用场景有丰富经验。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🏆另有专栏PHP入门基础教程,希望各位大佬多多支持❤️。
文章目录
- 一、简介
 - 二、系统设计
 - 2.1 数据库设计
 - 2.2 HTML页面设计
 - 2.2.1 留言列表页面(index.html)
 - 2.2.2 添加留言页面(add.html)
 
- 2.3 PHP代码编写
 - 2.3.1 新增留言(add.php)
 - 2.3.2 编辑留言(edit.php)
 - 2.3.3 删除留言(delete.php)
 - 2.3.4 查询留言(select_messages.php):
 
- 三、总结
 
一、简介
留言板是一个常见的Web应用程序,它允许用户在网站上发布留言,并可以对已发布的留言进行查看、编辑和删除操作。本文将使用PHP语言实现一个基本的留言板功能。

二、系统设计
首先,我们需要设计数据库表来存储留言信息,然后编写HTML页面展示留言列表以及提交留言的表单,最后使用PHP处理前端提交的请求,并与数据库进行交互。
2.1 数据库设计
我们将使用MySQL数据库来存储留言信息。假设我们需要存储的留言信息包括:id、姓名、邮箱、主题、内容和创建时间。
首先,创建一个名为guestbook的数据库,然后在该数据库中创建名为messages的数据表,表结构如下:
CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `subject` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `created_at` datetime NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 
2.2 HTML页面设计
我们需要编写两个HTML页面,一个用于展示留言列表,另一个用于提交新的留言。
2.2.1 留言列表页面(index.html)
<!DOCTYPE html>
<html>
<head>
    <title>留言板</title>
</head>
<body>
    <h1>留言板</h1>
    <a href="add.php">新增留言</a>
    <table>
        <tr>
            <th>姓名</th>
            <th>邮箱</th>
            <th>主题</th>
            <th>内容</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
        <?php
        // 使用PHP动态生成留言列表
        $db = new mysqli('localhost', 'username', 'password', 'guestbook');
        if ($db->connect_errno) {
            die('连接数据库失败:' . $db->connect_error);
        }
        $sql = "SELECT * FROM messages ORDER BY created_at DESC";
        $result = $db->query($sql);
        while ($row = $result->fetch_assoc()) {
            echo "<tr>";
            echo "<td>" . $row['name'] . "</td>";
            echo "<td>" . $row['email'] . "</td>";
            echo "<td>" . $row['subject'] . "</td>";
            echo "<td>" . $row['content'] . "</td>";
            echo "<td>" . $row['created_at'] . "</td>";
            echo "<td><a href='edit.php?id=" . $row['id'] . "'>编辑</a> | <a href='delete.php?id=" . $row['id'] . "'>删除</a></td>";
            echo "</tr>";
        }
        $db->close();
        ?>
    </table>
</body>
</html>
 
2.2.2 添加留言页面(add.html)
<!DOCTYPE html>
<html>
<head>
    <title>添加留言</title>
</head>
<body>
    <h1>添加留言</h1>
    <form action="add.php" method="post">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br>
        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" required><br>
        <label for="content">内容:</label><br>
        <textarea id="content" name="content" rows="5" required></textarea><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
 
2.3 PHP代码编写
我们需要编写三个PHP文件,分别用于处理新增留言、编辑留言和删除留言的请求。
2.3.1 新增留言(add.php)
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new mysqli('localhost', 'username', 'password', 'guestbook');
    if ($db->connect_errno) {
        die('连接数据库失败:' . $db->connect_error);
    }
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $content = $_POST['content'];
    $stmt = $db->prepare("INSERT INTO messages (name, email, subject, content) VALUES (?, ?, ?, ?)");
    $stmt->bind_param("ssss", $name, $email, $subject, $content);
    if ($stmt->execute()) {
        header('Location: index.html');
    } else {
        echo '添加留言失败:' . $stmt->error;
    }
    $stmt->close();
    $db->close();
}
?>
 
2.3.2 编辑留言(edit.php)
<?php
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['id'])) {
    $id = $_GET['id'];
    $db = new mysqli('localhost', 'username', 'password', 'guestbook');
    if ($db->connect_errno) {
        die('连接数据库失败:' . $db->connect_error);
    }
    $stmt = $db->prepare("SELECT * FROM messages WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($row = $result->fetch_assoc()) {
        $name = $row['name'];
        $email = $row['email'];
        $subject = $row['subject'];
        $content = $row['content'];
    } else {
        die('留言不存在');
    }
    $stmt->close();
    $db->close();
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['content'])) {
        $id = $_POST['id'];
        $name = $_POST['name'];
        $email = $_POST['email'];
        $subject = $_POST['subject'];
        $content = $_POST['content'];
        $db = new mysqli('localhost', 'username', 'password', 'guestbook');
        if ($db->connect_errno) {
            die('连接数据库失败:' . $db->connect_error);
        }
        $stmt = $db->prepare("UPDATE messages SET name = ?, email = ?, subject = ?, content = ? WHERE id = ?");
        $stmt->bind_param("ssssi", $name, $email, $subject, $content, $id);
        if ($stmt->execute()) {
            header('Location: index.html');
        } else {
            echo '编辑留言失败:' . $stmt->error;
        }
        $stmt->close();
        $db->close();
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>编辑留言</title>
</head>
<body>
    <h1>编辑留言</h1>
    <form action="edit.php" method="post">
        <input type="hidden" name="id" value="<?php echo $id; ?>">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" value="<?php echo $name; ?>" required><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" value="<?php echo $email; ?>" required><br>
        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" value="<?php echo $subject; ?>" required><br>
        <label for="content">内容:</label><br>
        <textarea id="content" name="content" rows="5" required><?php echo $content; ?></textarea><br>
        <input type="submit" value="保存">
    </form>
</body>
</html>
 
2.3.3 删除留言(delete.php)
删除留言
<?php
$id = $_GET['id'];
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "DELETE FROM messages WHERE id=$id";
if ($conn->query($sql) === TRUE) {
    echo "Message deleted successfully";
} else {
    echo "Error deleting message: " . $conn->error;
}
$conn->close();
?>
 
2.3.4 查询留言(select_messages.php):
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM messages ORDER BY created_at DESC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. ", Name: " . $row["name"]. ", Email: " . $row["email"]. ", Subject: " . $row["subject"]. ", Content: " . $row["content"]. "<br>";
    }
} else {
    echo "No messages found";
}
$conn->close();
?>
 
三、总结
今天我们通过PHP完整实现了一个留言板功能,实际过程中,可能还有更加复杂的设计。不过核心就是这样一些东西。希望能对您有所帮助,我们下次见。










![个人博客系统[SpringBoot+SpringMVC+MyBais]](https://img-blog.csdnimg.cn/6857e5eabf1e48b8a2811a373eda75fb.png)







