第1篇 入 门 篇
第1章 了解PHP
(视频讲解:15分钟)
1.1 什么是PHP
1.2 PHP语言的优势
1.3 PHP版本
1.4 如何学好PHP
1.5 准备PHP的开发条件
1.5.1 下载PHP及相关软件
1.5.2 代码编辑工具
1.5.3 下载PHP用户手册
1.6 本章小结
第2章 PHP开发环境搭建
(视频讲解:26分钟)
2.1 AppServ——Windows版PHP集成安装包
2.1.1 在Windows下搭建PHP开发环境
2.1.2 测试AppServ是否安装成功
2.2 XAMPP——Linux版PHP集成安装包
2.2.1 在Linux下搭建PHP开发环境
2.2.2 在Linux下启动、停止XAMPP
2.2.3 设置MySQL数据库root用户的密码
2.2.4 在Linux下编写第一个PHP程序
2.3 PHP开发环境的关键配置
2.3.1 Apache服务器的基本配置
2.3.2 php.ini文件的基本配置
2.4 Dreamweaver开发工具简介
2.4.1 Dreamweaver中编码格式的选择
2.4.2 Dreamweaver创建站点
2.4.3 Dreamweaver创建表格
2.4.4 Dreamweaver创建表单
2.5 综合应用
2.5.1 编写第一个PHP程序
2.5.2 输出一张漂亮的图片
2.6 本章常见错误
2.6.1 AppServ不能安装
2.6.2 Apache服务器端口冲突
2.7 本章小结
2.8 跟我上机
第1篇 入 门 篇
第1章 了解PHP
(视频讲解:15分钟)
1.1 什么是PHP
1.2 PHP语言的优势
1.3 PHP版本
1.4 如何学好PHP
1.5 准备PHP的开发条件
1.5.1 下载PHP及相关软件
1.5.2 代码编辑工具
1.5.3 下载PHP用户手册
1.6 本章小结
第2章 PHP开发环境搭建
(视频讲解:26分钟)
2.1 AppServ——Windows版PHP集成安装包
2.1.1 在Windows下搭建PHP开发环境
2.1.2 测试AppServ是否安装成功
2.2 XAMPP——Linux版PHP集成安装包
2.2.1 在Linux下搭建PHP开发环境
2.2.2 在Linux下启动、停止XAMPP
2.2.3 设置MySQL数据库root用户的密码
2.2.4 在Linux下编写第一个PHP程序
2.3 PHP开发环境的关键配置
2.3.1 Apache服务器的基本配置
2.3.2 php.ini文件的基本配置
2.4 Dreamweaver开发工具简介
2.4.1 Dreamweaver中编码格式的选择
2.4.2 Dreamweaver创建站点
2.4.3 Dreamweaver创建表格
2.4.4 Dreamweaver创建表单
2.5 综合应用
2.5.1 编写第一个PHP程序
2.5.2 输出一张漂亮的图片
2.6 本章常见错误
2.6.1 AppServ不能安装
2.6.2 Apache服务器端口冲突
2.7 本章小结
2.8 跟我上机
第3章 PHP开发基础
(视频讲解:50分钟)
3.1 PHP工作原理
3.2 PHP语法基础
3.2.1 PHP标记符
3.2.2 PHP的注释
3.3 PHP的数据类型
3.3.1 标量数据类型
3.3.2 复合数据类型
3.3.3 特殊数据类型
3.3.4 转换数据类型
3.3.5 检测数据类型
3.4 PHP常量
3.4.1 定义和使用常量
3.4.2 预定义常量
3.5 PHP变量
3.5.1 什么是变量
3.5.2 定义和使用变量
3.5.3 变量的作用域
3.5.4 可变变量
3.6 PHP运算符
3.6.1 算术运算符
3.6.2 字符串运算符
3.6.3 赋值运算符
3.6.4 位运算符
3.6.5 递增或递减运算符
3.6.6 逻辑运算符
3.6.7 比较运算符
3.6.8 三元运算符
3.6.9 运算符的使用规则
3.7 PHP表达式
3.8 综合应用
3.8.1 输出姚明个人信息
3.8.2 计算长方形的面积
3.9 本章常见错误
3.9.1 定界符的结束标识符之前有空格
3.9.2 表达式末尾未写分号
3.10 本章小结
3.11 跟我上机
第4章 PHP流程控制语句
(视频讲解:22分钟)
4.1 程序的3种结构
4.1.1 顺序结构
4.1.2 选择结构
4.1.3 循环结构
4.2 条件控制语句
4.2.1 if条件控制语句
4.2.2 switch多分支语句
4.3 循环控制语句
4.3.1 while循环语句
4.3.2 do…while循环语句
4.3.3 for循环语句
4.3.4 foreach循环语句
4.4 跳转语句
4.4.1 break跳转语句
4.4.2 continue跳转语句
4.5 综合应用
4.5.1 利用continue语句计算100以内奇数的和
4.5.2 应用switch语句设计网站主页
4.6 本章常见错误
4.6.1 条件语句中缺少小括号
4.6.2 应用break语句跳出的循环次数不正确
4.7 本章小结
4.8 跟我上机
第5章 函数
(视频讲解:52分钟)
5.1 自定义函数
5.1.1 函数的命名规则
5.1.2 自定义函数格式
5.1.3 自定义函数的调用
5.1.4 函数的参数
5.1.5 函数的返回值
5.1.6 函数的嵌套调用
5.1.7 函数的递归调用
5.2 内建函数
5.3 输出语句
5.3.1 应用print语句输出字符
5.3.2 应用echo语句输出字符
5.3.3 应用printf语句格式化输出字符
5.3.4 应用sprintf语句格式化输出字符
5.4 引用文件
5.4.1 应用include语句引用文件
5.4.2 应用require语句引用文件
5.4.3 应用include_once语句引用文件
5.4.4 应用require_once语句引用文件
5.4.5 include语句和require语句的使用区别
5.4.6 include_once语句和require_once语句的使用区别
5.5 综合应用
5.5.1 自定义一个为数字取绝对值的函数
5.5.2 应用include语句构建在线音乐网站主页
5.6 本章常见错误
5.6.1 使用PHP保留关键字作为函数名
5.6.2 自定义函数后没有调用
5.6.3 echo语句结束处未写分号
5.7 本章小结
5.8 跟我上机
第6章 字符串操作
(视频讲解:46分钟)
6.1 字符串简介
6.2 单引号与双引号
6.3 转义、还原字符串
6.3.1 手动转义、还原字符串
6.3.2 自动转义、还原字符串
6.4 获取字符串长度
6.5 截取字符串
6.6 比较字符串
6.6.1 按字节比较
6.6.2 按自然排序法比较
6.6.3 指定从源字符串的位置比较
6.7 检索字符串
6.7.1 strstr()函数
6.7.2 substr_count()函数
6.8 替换字符串
6.8.1 str_ireplace()函数
6.8.2 substr_replace()函数
6.9 去掉字符串首尾空格和特殊字符
6.9.1 ltrim()函数
6.9.2 rtrim()函数
6.9.3 trim()函数
6.10 格式化字符串
6.11 分割、合成字符串
6.11.1 explode()函数
6.11.2 implode()函数
6.12 字符串与HTML转换
6.13 综合应用
6.13.1 用substr()函数截取中文字符串
6.13.2 对关键字进行高亮显示
6.14 本章常见错误
6.14.1 截取含有中文的字符串时出现乱码
6.14.2 特殊字符插入数据库时未转义
6.14.3 explode()函数的分割符为空字符串
6.15 本章小结
6.16 跟我上机
第7章 正则表达式
(视频讲解:40分钟)
7.1 什么是正则表达式
7.2 正则表达式的语法规则
7.2.1 行定位符(^和$)
7.2.2 单词定界符(\b、\B)
7.2.3 字符类([ ])
7.2.4 选择字符(|)
7.2.5 连字符(-)
7.2.6 排除字符([^])
7.2.7 限定符(? * + {n,m})
7.2.8 点号字符(.)
7.2.9 转义字符(\)
7.2.10 反斜线(\)
7.2.11 括号字符(())
7.2.12 整合实用的正则表达式
7.3 PCRE兼容正则表达式函数
7.3.1 查找字符串
7.3.2 替换字符串
7.4 综合应用
7.4.1 通过JavaScript脚本和正则表达式验证用户注册信
息
7.4.2 通过正则表达式函数preg_match()验证注册信息
7.5 本章常见错误
7.5.1 定义正则表达式时未使用定界符“/”
7.5.2 匹配特殊字符时未使用转义字符(\)
7.6 本章小结
7.7 跟我上机
第8章 PHP数组
(视频讲解:44分钟)
8.1 数组概述
8.2 数组类型
8.2.1 数字索引数组
8.2.2 关联数组
8.3 声明数组
8.3.1 数组命名规则
8.3.2 用户创建数组
8.3.3 应用函数创建数组
8.3.4 创建二维数组
8.4 遍历与输出数组
8.4.1 遍历数组
8.4.2 输出数组元素
8.5 PHP的数组函数
8.5.1 合并数组
8.5.2 统计数组元素个数
8.5.3 添加数组元素
8.5.4 获取最后一个元素
8.5.5 删除重复元素
8.5.6 获取指定元素的键名
8.5.7 字符串与数组的转换
8.5.8 数组排序
8.6 PHP全局数组
8.6.1 $_SERVER[ ]全局数组
8.6.2 $_GET[ ]和$_POST[ ]全局数组
8.6.3 $_COOKIE[ ]全局数组
8.6.4 $_ENV[ ]全局数组
8.6.5 $_REQUEST[ ]全局数组
8.6.6 $_SESSION[ ]全局数组
8.6.7 $_FILES[ ]全局数组
8.7 综合应用
8.7.1 生成在线考试题
8.7.2 向投票系统添加投票选项
8.8 本章常见错误
8.8.1 数组元素之间用分号进行分隔
8.8.2 数组名和已存在的变量重名
8.9 本章小结
8.10 跟我上机
第9章 PHP与Web页面交互
(视频讲解:1小时34分钟)
9.1 表单概述
9.1.1 创建表单
9.1.2 认识表单元素
9.1.3 定义表单数据提交方法
9.2 在Web页中嵌入PHP脚本
9.2.1 在HTML标记中嵌入PHP脚本
9.2.2 为表单元素赋值
9.3 应用PHP全局变量获取表单数据
9.3.1 $_POST[]全局变量
9.3.2 $_GET[]全局变量
9.3.3 $_SESSION[]全局变量
9.4 对URL传递的参数进行编/解码
9.4.1 对URL传递的参数进行编码
9.4.2 对URL编码的字符串进行解码
9.5 综合应用
9.5.1 发布和查看公告信息
9.5.2 获取用户的个人信息
9.6 本章常见错误
9.6.1 全局变量中的表单元素名称与创建表单元素时设置
的名称不一致
9.6.2 在表单中添加复选框和列表时命名不正确
9.7 本章小结
9.8 跟我上机
第10章 日期和时间
(视频讲解:38分钟)
10.1 PHP的时区设置
10.1.1 在配置文件php.ini中设置时区
10.1.2 通过date_default_timezone_set()函数设置时区
10.2 UNIX时间戳
10.2.1 获取任意日期、时间的时间戳
10.2.2 获取当前时间的时间戳
10.2.3 将英文文本的日期时间转换为UNIX时间戳
10.3 日期和时间的处理
10.3.1 对日期和时间进行格式化
10.3.2 获取日期和时间信息
10.3.3 获取本地化的日期和时间
10.3.4 检验日期和时间的有效性
10.4 综合应用
10.4.1 倒计时
10.4.2 计算程序的运行时间
10.4.3 网页闹钟
10.5 本章常见错误
10.5.1 通过strftime()函数对本地时间格式化输出时出现
乱码
10.5.2 检验日期和时间有效性时参数的顺序不正确
10.6 本章小结
10.7 跟我上机
第2篇 提 高 篇
第11章 MySQL数据库设计
(视频讲解:36分钟)
11.1 MySQL简介
11.1.1 什么是MySQL
11.1.2 MySQL特点
11.1.3 MySQL 5支持的特性
11.2 启动和关闭MySQL服务器
11.2.1 启动MySQL服务器
11.2.2 连接和断开MySQL服务器
11.2.3 关闭MySQL服务器
11.3 操作MySQL数据库
11.3.1 创建数据库
11.3.2 选择数据库
11.3.3 删除数据库
11.4 MySQL数据类型
11.4.1 数字类型
11.4.2 字符串类型
11.4.3 日期和时间类型
11.5 操作MySQL数据表
11.5.1 创建数据表
11.5.2 查看表结构
11.5.3 修改表结构
11.5.4 重命名数据表
11.5.5 删除数据表
11.6 操作MySQL数据
11.6.1 插入记录
11.6.2 浏览数据库记录
11.6.3 修改记录
11.6.4 删除记录
11.7 phpMyAdmin图形管理工具
11.7.1 管理数据库
11.7.2 管理数据表
11.7.3 管理数据记录
11.7.4 导入/导出数据
11.8 综合应用
11.8.1 管理MySQL数据库及数据表
11.8.2 在phpMyAdmin中重置MySQL服务器登录密码
11.9 本章常见错误
11.9.1 执行修改和删除操作时未指定where条件语句
11.9.2 数据库恢复时不存在一个同名的空数据库
11.10 本章小结
11.11 跟我上机
第12章 PHP操作MySQL数据库
(视频讲解:46分钟)
12.1 PHP操作MySQL数据库的步骤
12.2 PHP操作MySQL数据库的方法
12.2.1 连接MySQL服务器
12.2.2 选择MySQL数据库
12.2.3 执行SQL语句
12.2.4 将结果集返回到数组中
12.2.5 从结果集中获取一行作为对象
12.2.6 从结果集中获取一行作为枚举数组
12.2.7 获取查询结果集中的记录数
12.2.8 释放内存
12.2.9 关闭连接
12.3 管理MySQL数据库中的数据
12.3.1 添加数据
12.3.2 编辑数据
12.3.3 删除数据
12.3.4 批量数据操作
12.4 综合应用
12.4.1 通用查询
12.4.2 高级查询
12.4.3 对查询结果分页显示
12.5 本章常见错误
12.5.1 数据库导致的错误
12.5.2 刷新页面重复提交
12.6 本章小结
12.7 跟我上机
第13章 Cookie和Session
(视频讲解:10分钟)
13.1 Cookie的操作
13.1.1 创建Cookie
13.1.2 读取Cookie
13.1.3 删除Cookie
13.2 Session的操作
13.2.1 启动Session
13.2.2 注册Session
13.2.3 使用Session
13.2.4 删除Session
13.3 Cookie与Session的比较
13.4 综合应用
13.4.1 通过Session控制页面访问权限
13.4.2 Cookie自动登录
13.4.3 应用Session控制用户登录时间
13.5 本章常见错误
13.5.1 在setcookie()函数之前有内容输出
13.5.2 应用Session之前没有启动Session
13.6 本章小结
13.7 跟我上机
第14章 图形图像处理技术
(视频讲解:16分钟)
14.1 GD2函数库简介
14.2 激活GD2函数库
14.3 常用的图像处理技术
14.3.1 创建画布
14.3.2 颜色处理
14.3.3 输出图像
14.3.4 绘制文字
14.3.5 绘制直线
14.3.6 销毁图像
14.4 应用Jpgraph类库绘制图像
14.4.1 Jpgraph类库简介
14.4.2 Jpgraph类库的安装
14.4.3 Jpgraph创建折线图统计图书销售走势
14.5 综合应用
14.5.1 应用GD2函数在图像上添加文字
14.5.2 应用图像处理技术生成验证码
14.5.3 Jpgraph创建3D饼形图展示部门业绩比较
14.6 本章常见错误
14.6.1 应用GD2函数库时代码段上端有HTML输出
14.6.2 通过imagettftext()函数不能正常输出中文
14.7 本章小结
14.8 跟我上机
第15章 文件和目录处理技术
(视频讲解:36分钟)
15.1 基本的文件处理
15.1.1 打开文件
15.1.2 读取文件中的内容
15.1.3 向文件中写入数据
15.1.4 关闭文件
15.2 目录操作
15.2.1 打开目录
15.2.2 读取目录结构
15.2.3 关闭目录
15.3 文件的上传与下载
15.3.1 开启文件的上传功能
15.3.2 全局变量$_FILES的应用
15.3.3 移动上传文件
15.3.4 文件下载技术
15.4 综合应用
15.4.1 通过文本文件统计网站访问量
15.4.2 规范化的文件上传
15.4.3 文本文件的分页输出
15.5 本章常见错误
15.5.1 在表单中未设置enctype属性
15.5.2 打开目录错误
15.6 本章小结
15.7 跟我上机
第16章 面向对象
(视频讲解:1小时2分钟)
16.1 面向对象的基本概念
16.1.1 类
16.1.2 对象
16.1.3 面向对象的特点
16.2 类的声明
16.2.1 定义类
16.2.2 成员属性
16.2.3 成员常量
16.2.4 成员方法
16.3 类的实例化
16.3.1 对象的创建
16.3.2 访问类中的成员
16.3.3 “$this”和“::”
16.3.4 构造方法和析构方法
16.4 面向对象的封装
16.4.1 公共成员关键字public
16.4.2 私有成员关键字private
16.4.3 保护成员关键字protected
16.5 面向对象的继承
16.5.1 继承关键字extends
16.5.2 子类调用父类的成员方法
16.5.3 覆盖父类方法
16.6 抽象类和接口
16.6.1 抽象类
16.6.2 接口
16.7 面向对象实现多态
16.7.1 通过继承实现多态
16.7.2 通过接口实现多态
16.8 面向对象的关键字
16.8.1 final关键字
16.8.2 static关键字
16.8.3 clone关键字
16.8.4 对象比较
16.8.5 instanceof关键字
16.9 面向对象的常用魔术方法
16.9.1 __set()和__get()方法
16.9.2 __isset()和__unset()方法
16.9.3 __call()方法
16.9.4 __toString()方法
16.9.5 __autoload()方法
16.10 综合应用
16.10.1 封装数据库连接类和操作类
16.10.2 用面向对象生成图像验证码
16.10.3 封装一个显示页码的分页类
16.11 本章常见错误
16.11.1 在类外直接调用私有变量
16.11.2 继承接口时方法没有全部重写
16.12 本章小结
16.13 跟我上机
第17章 PDO数据库抽象层
(视频讲解:1小时10分钟)
17.1 PDO概述
17.1.1 什么是PDO
17.1.2 PDO的特点
17.1.3 PDO的加载
17.2 通过PDO连接数据库
17.2.1 PDO的构造函数
17.2.2 DSN详解
17.3 执行SQL语句
17.3.1 exec()方法
17.3.2 query()方法
17.3.3 预处理语句
17.4 获取结果集
17.4.1 fetch()方法
17.4.2 fetchAll()方法
17.4.3 fetchColumn()方法
17.5 捕获SQL语句中的错误
17.5.1 使用默认模式——PDO::ERRMODE_SILENT
17.5.2 使用警告模式——PDO::ERRMODE_WARNING
17.5.3 使用异常模式——PDO::ERRMODE_EXCEPTION
17.6 错误处理
17.6.1 errorCode()方法
17.6.2 errorInfo()方法
17.7 PDO中的事务处理和存储过程
17.7.1 PDO中的事务处理
17.7.2 PDO中的存储过程
17.8 综合应用
17.8.1 添加留言信息
17.8.2 修改商品信息
17.8.3 删除会员信息
17.9 本章常见错误
17.9.1 PDO类库未加载
17.9.2 未设置数据库编码格式
17.10 本章小结
17.11 跟我上机
第18章 程序调试与错误处理
(视频讲解:32分钟)
18.1 程序调试的基本策略
18.2 常见错误类型
18.2.1 语法错误
18.2.2 语义错误
18.2.3 逻辑错误
18.2.4 注释错误
18.2.5 运行错误
18.3 错误处理机制
18.3.1 控制错误显示及显示方式
18.3.2 控制错误级别
18.4 常用程序调试方法
18.4.1 应用die语句进行调试
18.4.2 应用mysql_error()语句输出SQL语句的错误
18.4.3 应用try{}catch{}语句抛出并捕获异常
18.5 错误处理技巧
18.5.1 用“@”符号隐藏错误
18.5.2 自定义错误信息
18.6 综合应用
18.6.1 解决数据库乱码问题
18.6.2 封装异常处理类
18.7 本章常见错误
18.7.1 定义SQL语句时字段名不一致大小写不统一
18.7.2 全局变量register_globals的值设置为On
18.8 本章小结
18.9 跟我上机
第19章 Ajax技术
(视频讲解:1小时2分钟)
19.1 Ajax概述
19.1.1 什么是Ajax
19.1.2 Ajax的开发模式
19.1.3 Ajax的优点
19.2 Ajax技术的组成
19.2.1 JavaScript脚本语言
19.2.2 XMLHttpRequest对象
19.2.3 XML语言
19.2.4 DOM
19.2.5 CSS
19.3 Ajax与PHP的交互
19.3.1 通过GET方式与PHP进行交互
19.3.2 通过POST方式与PHP进行交互
19.4 Ajax开发注意事项
19.5 综合应用
19.5.1 在PHP中应用Ajax技术检测用户名
19.5.2 在PHP中应用Ajax技术实现博客文章类别添加
19.5.3 使用jQuery制作级联下拉列表框
19.6 本章常见错误
19.6.1 在应用Ajax过程中出现乱码
19.6.2 不能及时获取最新数据
19.7 本章小结
19.8 跟我上机
第20章 Smarty模板技术
(视频讲解:1小时2分钟)
20.1 Smarty简介
20.2 Smarty的安装配置
20.2.1 Smarty下载和安装
20.2.2 Smarty配置
20.2.3 第一个Smarty程序
20.3 Smarty模板设计
20.3.1 Smarty模板文件
20.3.2 注释
20.3.3 变量
20.3.4 修饰变量
20.3.5 流程控制
20.3.6 内建函数
20.4 Smarty程序设计
20.4.1 Smarty中的常用方法
20.4.2 Smarty的配置变量
20.5 综合应用
20.5.1 Smarty模板创建网页框架
20.5.2 分页输出会员信息
20.6 本章常见错误
20.6.1 Smarty模板的配置错误
20.6.2 模板引擎的解析错误
20.7 本章小结
20.8 跟我上机
第3篇 实 战 篇
第21章 明日企业网
(视频讲解:16分钟)
21.1 概述
21.2 开发背景
21.3 需求分析
21.4 功能结构
21.5 数据库设计
21.5.1 数据库概念设计
21.5.2 创建数据库及数据表
21.6 技术攻关
21.6.1 Smarty模板
21.6.2 最简单的网页框架
21.6.3 PDO数据库抽象层
21.6.4 封装分页类
21.7 首页设计
21.7.1 首页概述
21.7.2 首页技术分析
21.7.3 首页的实现过程
21.8 产品展示设计
21.8.1 产品展示概述
21.8.2 产品展示技术分析
21.8.3 产品展示实现过程
21.9 后台管理系统设计
21.9.1 后台管理系统概述
21.9.2 后台管理系统技术分析
21.9.3 后台管理系统实现过程
21.10 本章小结
第22章 应用Smarty模板开发电子商务平台
(视频讲解:2小时5分钟)
22.1 项目描述
22.2 系统分析
22.2.1 需求分析
22.2.2 编写项目计划书
22.3 系统设计
22.3.1 系统目标
22.3.2 系统功能结构
22.3.3 系统流程图
22.4 系统开发环境
22.5 搭建系统框架
22.6 数据库与数据表的设计
22.6.1 数据库分析
22.6.2 创建数据库和数据表
22.7 公共文件设计
22.7.1 数据库连接文件
22.7.2 Smarty配置文件
22.7.3 XMLHttpRequest对象文件
22.7.4 表单样式文件
22.8 前台首页设计
22.9 登录模块设计
22.9.1 用户注册
22.9.2 用户登录
22.9.3 找回密码
22.10 会员信息模块设计
22.10.1 会员中心
22.10.2 安全退出
22.11 商品展示模块设计
22.11.1 创建PHP页
22.11.2 创建模板页
22.11.3 js脚本页面
22.12 购物车模块设计
22.12.1 添加商品
22.12.2 显示购物车
22.12.3 更改商品数量
22.12.4 删除商品
22.12.5 保存购物车
22.13 收银台模块设计
22.13.1 显示订单
22.13.2 填写订单
22.13.3 处理订单
22.13.4 反馈订单
22.13.5 查询订单
22.14 后台首页设计
22.14.1 后台首页布局
22.14.2 DIV+JavaScript+CSS实现树状菜单
22.15 类别管理模块设计
22.15.1 添加类别
22.15.2 查看类别
22.16 订单管理模块设计
22.17 开发过程中的常见问题
22.17.1 使用js脚本获取、输出标签内容
22.17.2 解决Ajax的乱码问题
22.17.3 禁用页面缓存
22.17.4 使用浮动框架做关联菜单
22.17.5 防止站外链接
22.17.6 在新窗口中使用Session
22.17.7 判断上传文件格式
22.18 错误分析
22.18.1 数据库导致的错误
22.18.2 Smarty模板的配置错误
22.19 本章小结