实现PHP简单留言板功能需要完成数据库设计、前端表单搭建、后端数据处理、数据展示四个核心环节,整个过程围绕用户提交内容的存储与读取展开,下面逐步说明具体实现方法。

一、数据库表设计
首先需要在MySQL中创建存储留言数据的表,表结构需要包含留言的基本信息,比如留言ID、用户名称、留言内容、提交时间等,具体建表语句如下:
-- 创建留言表 CREATE TABLE `message_board` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '留言ID', `username` varchar(50) NOT NULL COMMENT '用户名称', `content` text NOT NULL COMMENT '留言内容', `create_time` datetime NOT NULL COMMENT '提交时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='留言板数据表';
二、前端留言提交表单
前端需要提供一个表单让用户输入名称和留言内容,表单提交到后端PHP处理文件,表单代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>简单留言板</title>
</head>
<body>
<h3>提交留言</h3>
<form action="submit_message.php" method="post">
<p>
用户名称:<input type="text" name="username" required>
</p>
<p>
留言内容:<textarea name="content" rows="5" cols="30" required></textarea>
</p>
<p>
<input type="submit" value="提交留言">
</p>
</form>
</body>
</html>
三、后端提交处理逻辑
创建submit_message.php文件处理表单提交的数据,需要先连接MySQL数据库,再获取提交的内容插入到数据表中,同时要做基础的防SQL注入处理,代码如下:
<?php
// 数据库连接配置
$host = '127.0.0.1';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'test';
// 创建数据库连接
$conn = new mysqli($host, $db_user, $db_pass, $db_name);
// 检查连接是否成功
if ($conn->connect_error) {
die("数据库连接失败:" . $conn->connect_error);
}
// 设置字符集
$conn->set_charset('utf8mb4');
// 获取提交的数据
$username = $_POST['username'] ?? '';
$content = $_POST['content'] ?? '';
// 基础校验
if (empty($username) || empty($content)) {
die("用户名称和留言内容不能为空");
}
// 使用预处理语句防SQL注入
$sql = "INSERT INTO message_board (username, content, create_time) VALUES (?, ?, NOW())";
$stmt = $conn->prepare($sql);
// 绑定参数,s代表字符串类型
$stmt->bind_param("ss", $username, $content);
// 执行插入操作
if ($stmt->execute()) {
echo "留言提交成功<br>";
echo "<a href='show_message.php'>查看所有留言</a>";
} else {
echo "留言提交失败:" . $stmt->error;
}
// 关闭资源
$stmt->close();
$conn->close();
?>
四、留言数据展示
创建show_message.php文件查询数据库中的留言数据并展示,代码如下:
<?php
// 数据库连接配置
$host = '127.0.0.1';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'test';
// 创建数据库连接
$conn = new mysqli($host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
die("数据库连接失败:" . $conn->connect_error);
}
$conn->set_charset('utf8mb4');
// 查询所有留言,按提交时间倒序排列
$sql = "SELECT username, content, create_time FROM message_board ORDER BY create_time DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>留言列表</title>
</head>
<body>
<h3>所有留言</h3>
<a href="index.html">返回提交留言</a>
<hr>
<?php
if ($result->num_rows > 0) {
// 输出每条留言
while ($row = $result->fetch_assoc()) {
echo "<p>用户:" . htmlspecialchars($row['username']) . "</p>";
echo "<p>内容:" . htmlspecialchars($row['content']) . "</p>";
echo "<p>时间:" . $row['create_time'] . "</p>";
echo "<hr>";
}
} else {
echo "暂无留言";
}
$conn->close();
?>
</body>
</html>
注意事项
- 实际部署时需要修改数据库连接配置,使用非root权限的数据库账号,避免安全风险
- 用户输入的内容需要使用
htmlspecialchars函数转义后再输出,防止XSS攻击 - 如果留言内容包含特殊字符,MySQL表的字符集建议使用utf8mb4,避免乱码问题