用PHP和MySQL实现留言板需三步:建表(含id、nickname、content、created_at字段)、PHP用PDO预处理防SQL注入并htmlspecialchars过滤XSS、前端表单提交+后端查询倒序展示,辅以长度限制与空值校验。

用PHP和MySQL做一个简单留言板,核心就三件事:建数据库表、写后端逻辑、做前端页面。不复杂但容易忽略细节,比如SQL注入防护和基础XSS过滤。
创建留言数据表
在MySQL中新建一个数据库(比如 message_board),然后执行以下建表语句:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
nickname VARCHAR(50) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
注意字段长度要合理,TEXT类型适合存较长留言;created_at自动记录时间,省得PHP手动写。
PHP处理留言提交
接收表单POST数据时,必须过滤和转义。推荐用PDO预处理防止SQL注入:
立即学习“PHP免费学习笔记(深入)”;
- 连接数据库用PDO,设置错误模式为异常
- 用 prepare() + execute() 插入数据,参数绑定变量
- 对用户输入的留言内容用 htmlspecialchars() 转义HTML标签,防基础XSS
示例代码片段:
$pdo = new PDO("mysql:host=localhost;dbname=message_board;charset=utf8", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO messages (nickname, content) VALUES (?, ?)");
$stmt->execute([$_POST['nickname'], htmlspecialchars($_POST['content'])]);
显示所有留言
从数据库读取并按时间倒序展示:
- 查询用 SELECT * FROM messages ORDER BY created_at DESC
- 循环输出时,昵称和留言内容都要过 htmlspecialchars(),避免被插入恶意脚本
- 可加个简单的分页(比如每页10条),用 LIMIT offset, size 控制
前端只需一个form提交,下面用while循环把结果echo出来即可,不用框架也能跑得很稳。
基础安全与体验优化
上线前至少补上这几点:
- 表单加 required 属性,前端简单校验必填项
- PHP端检查 $_POST 是否为空,避免空提交
- 留言内容长度限制(比如2000字),用 mb_substr() 截断显示更安全
- 敏感词可简单用 str_replace() 过滤,进阶再上正则或词库
基本上就这些。做完能提交、存储、展示,就是一个可用的最小留言系统。











