<?php练功房

第 6 章 · 综合实战 · 第 6.2 课

实战:留言板

约 30 分钟

最后一课,把第五章的知识串起来,写一个留言板的核心类 MessageBoard。它要做到:

  • 数据存在数据库里(这里用 SQLite 内存数据库);
  • 所有 SQL 都用预处理语句,不怕 SQL 注入;
  • 发帖前校验输入,不合格就抛异常;
  • 生成 HTML 时转义用户内容,不怕 XSS。

在真实网站里,你只需要再加一个处理表单的页面:读 $_POST、调用 post()、然后 echo $board->render()。

先看一个小技巧:LIMIT ? 的参数必须是整数。execute([...]) 会把所有值当字符串传,所以这里要用 bindValue 指定类型。

练习 1

实现 MessageBoard

补全三个方法:

  1. post(string $name, string $content): int
  2. 昵称去掉首尾空格后需要 1 到 20 个字符,否则抛出 InvalidArgumentException("昵称需要 1 到 20 个字")
  3. 内容去掉首尾空格后需要 1 到 200 个字符,否则抛出 InvalidArgumentException("内容需要 1 到 200 个字")
  4. 字数按字符算(中文一个字算 1 个),所以要用 mb_strlen
  5. 用预处理语句插入(保存去掉空格后的值),返回新留言的 id
  6. latest(int $limit = 10): array:按 id 从新到旧取最多 $limit 条,返回关联数组列表,每条至少包含 name 和 content
  7. render(): string:返回最新 10 条留言的 HTML,格式为 <ul><li><b>昵称</b>:内容</li>...</ul>,昵称和内容都要转义

点“只运行”,切到“网页预览”看看效果。

学完了,接下来学什么

恭喜你走完了整个练功房。接下来可以:

  • 动手做一个完整的小网站:在自己电脑上装好 PHP(或者用 Docker),把这个留言板加上表单页面,真正跑起来。
  • 学用 Composer:PHP 的包管理器,几乎所有现代 PHP 项目都用它。
  • 学一个框架:Laravel 是目前最流行的 PHP 框架,路由、数据库、登录、队列都帮你做好了;你在这里学到的类、异常、PDO、安全知识,在框架里全都用得上。
  • 遇到问题查手册:PHP 官方中文手册 里每个函数都有示例。现在的你已经能看懂它了。