PHP构建简单留言板教程_PHP与MySQL实现留言功能

用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注入:

  • 连接数据库用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() 过滤,进阶再上正则或词库

基本上就这些。做完能提交、存储、展示,就是一个可用的最小留言系统。