diff --git a/readme.md b/readme.md
index 2d55d6f9f6e142bc91bc8f8cfc2e10d769af8802..f023364010792dca896ad90c469dcd47a81e67ff 100644
--- a/readme.md
+++ b/readme.md
@@ -128,118 +128,118 @@
### 2.0.3 分页对象
- 00:10 下载教程代码、启动环境、导入SQL
- 01:50 用page对象重构已有功能
- 03:50 知识点:include_once()
- 06:32 实现上一页、下一页功能
- 11:09 知识点:使用phpMyAdmin测试SQL语法是否正确
- 15:20 计算总页数
- 16:00 知识点:PHP向上去整
- 18:40 知识点:字符串拼接
- 19:40 知识点:变量污染及如何debug
- 22:30 解决XAMPP中 ?>不生效的问题
- 23:58 解决序号问题
- 26:29 知识点:构造函数 __construct()
- 30:55 active点亮效果
+00:10 下载教程代码、启动环境、导入SQL
+01:50 用page对象重构已有功能
+03:50 知识点:include_once()
+06:32 实现上一页、下一页功能
+11:09 知识点:使用phpMyAdmin测试SQL语法是否正确
+15:20 计算总页数
+16:00 知识点:PHP向上去整
+18:40 知识点:字符串拼接
+19:40 知识点:变量污染及如何debug
+22:30 解决XAMPP中 ?>不生效的问题
+23:58 解决序号问题
+26:29 知识点:构造函数 __construct()
+30:55 active点亮效果
### 2.0.4 综合查询
- 00:27 下载教程代码、启动环境
- 01:00 编写查询功能
- 07:12 知识点:SQL where查询
- 14:14 知识点:PHP数组长度--count() sizeof()
- 26:58 自动填写查询信息
- 32:31 知识点: SQL like模糊查询
- 39:20 查询时增加页号page
+00:27 下载教程代码、启动环境
+01:00 编写查询功能
+07:12 知识点:SQL where查询
+14:14 知识点:PHP数组长度--count() sizeof()
+26:58 自动填写查询信息
+32:31 知识点: SQL like模糊查询
+39:20 查询时增加页号page
### 2.0.5 组件化
- 00:15 下载教程代码、启动环境
- 01:05 用组件化思想重构代码
- 03:50 增加权限管理
- 06:47 知识点:header和body
- 10:11 知识点:http状态码302和404
- 13:02 重构header,分离引用和执行环节
- 22:15 实现退出按钮
- 24:06 勘误:container写错了,应找到第一个错误的位置打上字幕
- 25:36 解决active样式问题
- 27:00 知识点:$_Server查看服务器参数
- 29:35 重构nav组件,分离引用和执行环节
+00:15 下载教程代码、启动环境
+01:05 用组件化思想重构代码
+03:50 增加权限管理
+06:47 知识点:header和body
+10:11 知识点:http状态码302和404
+13:02 重构header,分离引用和执行环节
+22:15 实现退出按钮
+24:06 勘误:container写错了,应找到第一个错误的位置打上字幕
+25:36 解决active样式问题
+27:00 知识点:$_Server查看服务器参数
+29:35 重构nav组件,分离引用和执行环节
## 第二部分:增加用户
### 2.1.0 新增用户
- 00:40 实现新增按钮
- 01:20 实现”新增“页面
- 08:28 知识点:Bootstrap选择按钮radio和select
- 11:42 知识点:radio分组(卡带式收音机)
- 12:20 保存按钮
- 17:25 save组件原型
+00:40 实现新增按钮
+01:20 实现”新增“页面
+08:28 知识点:Bootstrap选择按钮radio和select
+11:42 知识点:radio分组(卡带式收音机)
+12:20 保存按钮
+17:25 save组件原型
### 2.1.1 功能开发
- 00:10 下载教程代码、启动环境、导入SQL
- 01:10 查看POST数据
- 02:04 获取变量
- 03:15 向数据中插入数据
- 05:12 知识点:PDO方式插入数据
- 07:42 知识点:PDO错误提示功能
- 09:14 知识点:MySQL 1054 1364
- 12:10 整理代码
- 13:25 在保存失败时输出错误信息,成功时跳转
- 15:46 新插入的数据放在第一行
- 知识点:order by desc
+00:10 下载教程代码、启动环境、导入SQL
+01:10 查看POST数据
+02:04 获取变量
+03:15 向数据中插入数据
+05:12 知识点:PDO方式插入数据
+07:42 知识点:PDO错误提示功能
+09:14 知识点:MySQL 1054 1364
+12:10 整理代码
+13:25 在保存失败时输出错误信息,成功时跳转
+15:46 新插入的数据放在第一行
+ 知识点:order by desc
### 2.1.2 JavaScript校验
- 00:10 下载教程代码、启动环境
- 01:13 解决不填字段也不报错的bug
- 01:50 知识点:bootstrap提示信息
- 03:43 知识点:JavaScript和PHP代码执行阶段的区别
- 06:38 知识点:浏览器兼容性
- 07:50 知识点:JavaScript submit事件
- 10:17 知识点:阻止表单提交
- 11:59 知识点:CSS选择器
- 14:58 知识点:HTMLInputElement
- 15:18 使用JavaScript判断name是否为空值
- 16:46 知识点:HTMLDivElement
- 18:37 知识点:CSS display样式
- 21:52 知识点:HTML.innerText
- 25:51 知识点:HTML获取radio选中情况
+00:10 下载教程代码、启动环境
+01:13 解决不填字段也不报错的bug
+01:50 知识点:bootstrap提示信息
+03:43 知识点:JavaScript和PHP代码执行阶段的区别
+06:38 知识点:浏览器兼容性
+07:50 知识点:JavaScript submit事件
+10:17 知识点:阻止表单提交
+11:59 知识点:CSS选择器
+14:58 知识点:HTMLInputElement
+15:18 使用JavaScript判断name是否为空值
+16:46 知识点:HTMLDivElement
+18:37 知识点:CSS display样式
+21:52 知识点:HTML.innerText
+25:51 知识点:HTML获取radio选中情况
### 2.1.3 友好跳转
- 00:45 知识点:SweetAlert友好的警告框
- 02:43 使用SweetAlert
- 08:47 知识点:JavaScript回调函数
- 09:25 实现操作成功
- 知识点:JavaScript跳转URL
- 10:00 实现操作失败
- 11:07 if -- else -- endif结构
- 13:14 知识点:操作失败回跳 history.back
- 13:54 增加失败的提示信息
+00:45 知识点:SweetAlert友好的警告框
+02:43 使用SweetAlert
+08:47 知识点:JavaScript回调函数
+09:25 实现操作成功
+ 知识点:JavaScript跳转URL
+10:00 实现操作失败
+11:07 if -- else -- endif结构
+13:14 知识点:操作失败回跳 history.back
+13:54 增加失败的提示信息
## 第三部分 删除用户
### 2.2.0 删除用户
- 00:12 下载教程代码、启动环境、导入SQL
- 01:34 删除链接跳转
- 04:02 实现删除方法
- 09:30 知识点:delete没有删除数据也不会报异常
- 11:07 实现成功和失败时的弹窗
- 13:18 展示bug
- 16:52 传入页号参数,解决删除后回到第一页的问题
- 知识点:$_SERVER
+00:12 下载教程代码、启动环境、导入SQL
+01:34 删除链接跳转
+04:02 实现删除方法
+09:30 知识点:delete没有删除数据也不会报异常
+11:07 实现成功和失败时的弹窗
+13:18 展示bug
+16:52 传入页号参数,解决删除后回到第一页的问题
+ 知识点:$_SERVER
### 2.2.1 Alert组件
- 00:45 下载教程代码、启动环境、导入SQL
- 01:24 重构代码:alart提示信息
- 09:10 知识点:双引号、反斜杠
- 18:12 知识点:ob 向js文件传值
+00:45 下载教程代码、启动环境、导入SQL
+01:24 重构代码:alart提示信息
+09:10 知识点:双引号、反斜杠
+18:12 知识点:ob 向js文件传值
## 第四部分 修改用户
@@ -294,22 +294,67 @@
00:10 下载教程代码
00:31 重构代码减少不必要的文件
06:47 知识点:debug_backtrace回溯追踪
-16:22 知识点:PHP子串 substr
-18:59 知识点:dynamic invoke method
+16:22 知识点:PHP子串 substr
+18:59 知识点:dynamic invoke method
20:36 知识点:method_exists()判断方法是否存在
22:49 定义error()方法处理404错误
### 3.0.3 权限校验
-
-
+00:07 下载教程代码
+00:33 提出两个问题:没有权限验证、菜单问题
+00:53 添加nav菜单
+02:43 添加container,修正布局
+04:45 重构代码:为了让HTML有语法检查,打造一个模板
+12:59 添加form表单
+ 知识点:form-inline
+14:42 知识点:mb-2 -> margin bottom = 2
+19:26 构建form表单
+ 知识点:form-row 创建一行
+ 知识点:col-x 设定盒子宽度
+23:16 知识点:btn-outline 带轮廓线的按钮
+24:59 实现权限校验(在构造函数中启用session)
+25:51 在nav菜单中增加班级管理按钮
## 第二部分
### 3.1.0 数据库初始化
+00:30 下载教程代码、启动环境
+02:02 导入SQL文件
+03:02 基础字段
+04:37 新建数据表
+ 知识点:自增 - A I - auto increase
+ 知识点:驼峰式、下划线式
+07:50 知识点:日期和时间,当前时间戳
+11:30 知识点:数据库关联(外键)降低数据冗余
+15:32 为create_user_id设置外键
+ 知识点:FK开头,共34位,不可以包含多余空格
+16:08 (TODO 插入视频:如果字段显示不全的解决办法)
+16:37 验证外键效果
+17:41 为user_id添加外键
+ 知识点:外键约束的字段类型必须和原字段类型相同
+
### 3.1.1 功能模拟
+00:32 下载教程代码、启动环境、导入SQL文件
+01:53 原型由HTML变为实体
+03:07 创建clazz实体
+03:56 知识点:sublime修改回车的缩进方式
+05:14 (TODO 补充Windows修改配置文件的视频 )
+07:22 知识点:sublime 上下移动代码 (Windows -> ctrl + shift + ↑/↓ 、Mac -> control + command + ↑/↓)
+09:10 创建user实体
+11:10 移动page类、修改引用位置
+13:12 准备page()方法的参数
+14:10 知识点:方法注释的规范格式
+16:46 准备原型
+ 知识点:PHP array 初始化
+20:26 知识点:PHP 时间戳 time()
+22:07 知识点:PHP 对象属性初始化
+23:29 知识点:PHP array foreach循环
+27:54 解决foreach不识别的问题
+ 知识点:endforeach
+
### 3.1.2 命名空间
00:00 命名空间相关介绍