第 6 章 · 综合实战 · 第 6.2 课
实战:留言板
最后一课,把第五章的知识串起来,写一个留言板的核心类 MessageBoard。它要做到:
- 数据存在数据库里(这里用 SQLite 内存数据库);
- 所有 SQL 都用预处理语句,不怕 SQL 注入;
- 发帖前校验输入,不合格就抛异常;
- 生成 HTML 时转义用户内容,不怕 XSS。
在真实网站里,你只需要再加一个处理表单的页面:读 $_POST、调用 post()、然后 echo $board->render()。
先看一个小技巧:LIMIT ? 的参数必须是整数。execute([...]) 会把所有值当字符串传,所以这里要用 bindValue 指定类型。
练习 1
实现 MessageBoard
已通过补全三个方法:
post(string $name, string $content): int- 昵称去掉首尾空格后需要 1 到 20 个字符,否则抛出
InvalidArgumentException("昵称需要 1 到 20 个字") - 内容去掉首尾空格后需要 1 到 200 个字符,否则抛出
InvalidArgumentException("内容需要 1 到 200 个字") - 字数按字符算(中文一个字算 1 个),所以要用
mb_strlen - 用预处理语句插入(保存去掉空格后的值),返回新留言的 id
latest(int $limit = 10): array:按 id 从新到旧取最多$limit条,返回关联数组列表,每条至少包含name和contentrender(): string:返回最新 10 条留言的 HTML,格式为<ul><li><b>昵称</b>:内容</li>...</ul>,昵称和内容都要转义
点“只运行”,切到“网页预览”看看效果。
学完了,接下来学什么
恭喜你走完了整个练功房。接下来可以:
- 动手做一个完整的小网站:在自己电脑上装好 PHP(或者用 Docker),把这个留言板加上表单页面,真正跑起来。
- 学用 Composer:PHP 的包管理器,几乎所有现代 PHP 项目都用它。
- 学一个框架:Laravel 是目前最流行的 PHP 框架,路由、数据库、登录、队列都帮你做好了;你在这里学到的类、异常、PDO、安全知识,在框架里全都用得上。
- 遇到问题查手册:PHP 官方中文手册 里每个函数都有示例。现在的你已经能看懂它了。