• 1. PHP网站开发案例教程
  • 2. 2/180目 录第1章 配置PHP开发环境第2章 PHP语言基础第3章 数组与函数第4章 字符串与正则表达式第5章 构建PHP互动网页第6章 PHP文件编程第7章 PHP图像处理第8章 MySQL数据库管理第9章 PHP数据库编程第10章 会员管理系统设计
  • 3. 3/180第1章 配置PHP开发环境 1.1 PHP开发组件介绍 1.2 配置PHP开发环境
  • 4. 4/1801.1 PHP开发组件介绍1.1.1 Apache服务器 Apache是一款流行的Web服务器软件。据调查,目前在Internet 上大约有50%以上的Web服务器都在用Apache。Apache功能强大、 性能稳定,而且是完全免费的,完全开放源代码,可以从Internet 上自由下载。 Apache服务器的主要特点 支持多种Web编程语言。 安全性高。 扩展性好。。 UNIX线程。 新的编译系统。 对非UNIX平台更好的支持。 第1章目录
  • 5. 5/1801.1 PHP开发组件介绍1.1.2 PHP语言 PHP是一种流行的开放源代码的Web编程语言,主要用于开发 服务器端应用程序及动态网页。 PHP语言的主要特点 开放性源代码。 运行于服务器端。 跨平台性。 语言简单易学。 执行效率高。 图像处理功能。 数据库访问功能。 面向对象编程。 可伸缩性。 第1章目录
  • 6. 6/1801.1 PHP开发组件介绍1.1.3 MySQL数据库 MySQL是目前最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL是一个快速的、多线程、 多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、 重负载生产系统的使用。MySQL是一款完全免费的数据库产品。 MySQL数据库服务器的特点 快速、可靠、易于使用。 工作在客户端/服务器模式下或嵌入式系统中。 真正的多线程。 跨平台性。 数据类型丰富。 安全性好。 处理大型数据库。 连接性好。第1章目录
  • 7. 7/1801.2 PHP开发环境配置1.2.1 安装和测试Apache Apache的下载网址: http://httpd.apache.org/download.cgi 文件: apache_2.2.4-win32-x86-no_ssl.msi。 1. 安装Apache服务器 2. 测试Apache服务器 在IE浏览器的地址栏输入以下网址: http://localhost/ 第1章目录
  • 8. 8/1801.2 PHP开发环境配置1.2.2 配置Apache服务器 1. Listen指令 Listen指令用于设置Apache服务器监听的IP地址和端口 Listen [IP-address:]portnumber [protocol] 2. DocumentRoot指令 DocumentRoot指令用于设置网站文档的根目录 DocumentRoot directory-path 3. Alias指令 Alias指令用于映射指向文件系统某个物理目录的URL: Alias URL-path file-path|directory-path 4. DirectoryIndex指令 DirectoryIndex指令用于设置当客户端请求一个目录时寻找的资源列表,也就是为网站指定一组默认文档 DirectoryIndex local-url [local-url] ... 第1章目录
  • 9. 9/1801.2 PHP开发环境配置第1章目录1.2.3 管理Apache服务器
  • 10. 10/1801.2 PHP开发环境配置第1章目录1.2.4 安装和配置PHP 1. 下载和安装PHP PHP 5.2.3下载网址: http://www.php.net/downloads.php 文件: php-5.2.3-Win32.zip。 PHP的安装: 把zip压缩包解压缩到指定的文件夹中
  • 11. 11/1801.2 PHP开发环境配置第1章目录1.2.4 安装和配置PHP 2. 配置PHP 通过编辑文件php.ini来实现。 把PHP目录中的php.ini-dist文件复制到Apache目录中,把文件php.ini-dist重命名为php.ini。 设置动态模块的加载路径: extension_dir = "F:\PHP\ext" 设置PHP的文档根目录: doc_root = "F:\phpdocs" 设置保存会话信息的目录: session.save_path = "/tmp" 设置错误信息显示选项: display_errors = On 设置服务器默认时区: date.timezone = PRC
  • 12. 12/1801.2 PHP开发环境配置第1章目录1.2.4 安装和配置PHP 3. 通过修改httpd.conf文件让Apache支持PHP CGI二进制文件方式: ScriptAlias /php/ "F:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi.exe“ DLL动态链接库模块方式: 把PHP安装目录中的php5ts.dll文件复制到Windows系统的system32文件夹中 LoadModule php5_module "F:/php/php5apache2_2.dll" AddType application/x-httpd-php .php
  • 13. 13/1801.2 PHP开发环境配置第1章目录1.2.4 安装和配置PHP 4. 测试PHP 文件内容: 测试URL: http://localhost/chap01/page1-01.php 运行结果
  • 14. 14/1801.2 PHP开发环境配置第1章目录1.2.5 安装和配置MySQL MySQL 5.041的下载网址:http://dev.mysql.com/downloads/mysql/5.0.html 文件名:mysql-essential-5.0.41-win32.msi。 1. 安装和配置MySQL 结束安装并启动MySQL服务器配置向导 选择MySQL配置类型 选择数据库的用途 设置数据库的存储位置 设置MySQL服务器的最大并发连接数 设置MySQL的网络选项 设置MySQL默认字符集:选择【Manual Selected Default Character Set/Cllation】,选择gb2312字符集(简体中文)。 设置MySQL的Windows选项:将MySQL作为Windows服务来安装 设置MySQL服务器的安全性选项,为MySQL的默认账号root设置密码
  • 15. 15/1801.2 PHP开发环境配置第1章目录1.2.5 安装和配置MySQL 2. 测试MySQL服务器
  • 16. 16/1801.2 PHP开发环境配置第1章目录1.2.5 安装和配置MySQL 3. 通过PHP连接MySQL服务器 将PHP目录下的libmysql.dll文件复制到F:\Apache2.2\bin目录中。 打开php.ini文件,对以下属性进行设置。 设置MySQL服务器的主机名: mysql.default_host = localhost 设置MySQL服务器的端口号: mysql.default_port = 3306 设置默认用户: mysql.default_user = root 设置默认密码: mysql.default_password = password 启用PHP对MySQL的支持模块: extension = php_mysql.dll
  • 17. 17/1801.2 PHP开发环境配置第1章目录1.2.5 安装和配置MySQL 3. 通过PHP连接MySQL服务器 通过PHP连接MySQL服务器
  • 18. 18/1801.2 PHP开发环境配置第1章目录1.2.6 创建PHP MySQL动态站点(在Dreamweaver CS3中)
  • 19. 19/180第2章 PHP语言基础 2.1 PHP基本知识 2.2 数据类型 2.3 变量与常量 2.4 运算符与表达式 2.5 流程控制语句
  • 20. 20/1802.1 PHP基本知识第2章目录2.1.1 PHP动态网页概述 PHP动态网页就是混合使用PHP和HTML编写的Web页面。当访问者通 过客户端浏览器必出PHP页请求时时,服务端会首先对页面中的PHP代码 进行处理,然后把处理后的结果连同HTML内容一起传送到客户端浏览器。 1. PHP动态网页的内容 HTML标记;CSS样式定义;客户端脚本;PHP定界符;PHP代码。 2. PHP动态网页的访问方式 PHP动态网页过输入“http://”开头的虚拟路径来访问。 通过虚拟路径访问PHP动态网页时,首先通过Apache服务器将PHP代码 转发给PHP语言引擎进行处理,然后将执行结果连同HTML代码一起发送 到客户端浏览器。 如果正在用Dreamweaver创建PHP动态网页,按下F12键即可通过虚拟路径方式在浏览器中打开当前正在编辑的PHP动态网页,而不必用手动方式在浏览器中输入虚拟路径。
  • 21. 21/1802.1 PHP基本知识第2章目录2.1.2 创建PHP代码块 PHP定界符 <%…%> 2.1.3 编写PHP注释 C++风格的单行注释“//” UNIX Shell风格的单行注释“#” C风格的多行注释“/*…*/”
  • 22. 22/1802.1 PHP基本知识第2章目录2.1.4 PHP与HTML混合编码 PHP语句在语法上是完全独立的单元,但也可以使一个语句跨越两个 PHP代码块,并在这两个代码块之间包含HTML代码或其他非PHP代码, 此时PHP将直接输出上一个结束标记与下一个开始标记之间的任何非PHP 代码。当需要输出大量HTML内容时,退出PHP解析模式比使用echo()、 print()或此类函数输出这些内容更为有效。 2.1.5 PHP与JavaScript协同工作 在PHP动态网页中,既可以包含PHP服务器端脚本,也可以包含 JavaScript客户端脚本,而且这两种脚本可以协同工作。 当访问者通过客户端浏览器发出对某个PHP动态网页的请求后,由PHP 在运行中按照HTML的语法格式动态生成页面,并由服务器将整个页面的 数据发送给客户端浏览器,该页面中可能包含通过标记 引入的JavaScript客户端脚本。在浏览器所执行的客户端JavaScript脚本其 实是由PHP服务器端脚本动态生成的。 使用PHP生成或操作客户端脚本,可以增强其有效性。
  • 23. 23/1802.2 数据类型第2章目录PHP语言支持的8种原始数据类型 4种标量类型 布尔型(boolean) 整型数(integer) 浮点数(float) 字符串(string) 两种复合类型 数组(array) 对象(object) 两种特殊类型 资源(resource) 空值(NULL)
  • 24. 24/1802.2 数据类型第2章目录2.2.1 整型数 整型数是集合Z = {..., −2, −1, 0, 1, 2, ...} 中的一个数。整型数包括正整 数、负整数和零。一个整型数可以用十进制,十六进制或八进制符号表示, 前面可以加上可选的符号(−或+)。若用八进制符号,则必须在数字前加 上0;若用十六进制符号,则必须在数字前加上0x。 整型数的字长和平台有关。在32位操作系统中,整型数的取值范围是 −2 147 483 648~+2 147 483 647。若给定的一个数超出了整型数的范围, 则将被解释为浮点数;当运算结果超出了整型数范围时,也会返回浮点数。 PHP不支持无符号整数。
  • 25. 25/1802.2 数据类型第2章目录2.2.2 浮点数 浮点数也称为双精度数或实数,其取值范围和精度远远大于整型数。 在32位操作系统中,浮点数的取值范围为1.7E−308~1.7E+308(即 1.7×10–308~1.7×10308)。浮点数可以用小数形式或科学计数法表示, 在科学计数法中用E或e表示以10为底的幂。 以下给出浮点数的例子。
  • 26. 26/1802.2 数据类型第2章目录2.2.3 字符串 1. 用单引号定义字符串 表示一个字符串的最简单方法是用单引号(‘)括起这个字符串。若要表示一个 单引号,需要用反斜线(\)转义,即表示为“\‘”。 2. 用双引号定义字符串 若用双引号(")括起字符串,则会使PHP处理更多特殊字符的转义序列。 在用双引号定义的字符串中,变量名会被变量值替代;用花括号把变量名括起来, 便于变量解析。 转义字符:\n:换行;\r:回车;\t:水平制表符;\\:反斜线:\$:美元符号:\":双引号 3. 用定界符定义字符串 <<<标识符 字符串内容 标识符 与双引号字符串一样,使用定界符定义字符串时,在字符串中包含的变量名运 行时将被变量值替代。此外,在这种字符串中,可以直接包含单引号和双引号,而 不必进行转义。
  • 27. 27/1802.2 数据类型第2章目录2.2.4 布尔型 布尔型用于表示真值,其取值可以是true或false。布尔值通常用于控制程序的执 行流程。若要定义指定一个布尔值,可以使用关键字true或false,这两个关键字是 不区分大小写的,因此也可以使用True或False。例如: 2.2.5 特殊类型 1. 资源 资源是一种特殊变量,保存了对外部资源的一个引用。资源是通过专门的函数 来建立和使用的。由于资源类型变量保存为打开文件、数据库连接、图形画布区域 等的特殊句柄,因此无法将其他类型的值转换为资源。 2. NULL 特殊的NULL值表示一个变量没有值。NULL类型只有一个值,就是大小写敏感 的关键字NULL。 例如:
  • 28. 28/1802.2 数据类型第2章目录2.2.6 数据类型转换 1. 强制类型转换 ( type ) value 2. 整型转换 3. 字符串转换 4. 布尔转换 5. 测试数据类型 使用gettype()函数来测试一个值的数据类型: string gettype ( mixed var )
  • 29. 29/1802.3 变量与常量第2章目录2.3.1 定义变量 在PHP语言中规定,变量用一个美元符号($)后面跟变量名来表示, 而且变量名是区分大小写的。变量名与其他标识符一样都遵循相同的命名 规则:一个有效的变量名由字母或下划线开头,后面可以跟上任意数量的 字母、数字或下划线。命名变量通常与对变量赋值一起进行。 检查变量或对象是否属于某种数据类型。 is_int()检查变量是否为整型;is_float()检查变量是否为浮点型;is_numeric()检查变量是否为数值型;is_string()检查变量是否为字符串;is_bool()检查变量是否为布尔型;is_array() 检查是否为数组;is_object()检查变量是否为对象。 使用gettype()函数测试一个变量的数据类型。 使用var_dump()函数显示变量的相关信息: void var_dump ( mixed expression [, mixed expression [, ...]] ) 使用print_r()函数显示关于变量的易于理解的信息: bool print_r ( mixed expression [, bool return] )
  • 30. 30/1802.3 变量与常量第2章目录2.2.2 检查变量是否设置 empty()函数检查一个变量是否为空: bool empty ( mixed var ) 若参数var是非空或非零的值,则empty()返回false。空字符串 (“”)、0、“0”、NULL、false、array()、var $var; 以及没有任何属 性的对象都将被认为是空的,若参数var为空,则empty()返回true。 isset()函数检测变量是否设置: bool isset ( mixed var [, mixed var [, ...]] ) 若参数var存在则返回true,否则返回false。isset()函数只能用于 变量,因为传递任何其他参数都将造成解析错误。 若使用isset()测试一个被设置成NULL的变量,将返回false。同 时要注意,一个NULL字节("\0")并不等同于PHP的NULL常数。
  • 31. 31/1802.3 变量与常量第2章目录2.3.3 可变变量与变量的引用 1. 可变变量 若一个变量获取一个普通变量的值作为变量名,则该变量就称 为可变变量。在某些情况下,使用可变变量是很方便的,由此可以 动态地设置和使用一个变量的变量名。例如: $a = "hello" ; $$a = "world" ; echo "$a $hello" ; 2. 变量的引用 在PHP中,通过的引用可以用两个变量来指向同一个内容。若 要引用一个变量,可在该变量名前面加一个&符号。例如: $a = & $b ;
  • 32. 32/1802.3 变量与常量第2章目录2.3.4 使用常量 1. 自定义常量 在PHP语言中,可以用define()函数来定义常量。语法如下: bool define ( string name, mixed value [, bool case_insensitive] ) 其中name指定常量的名称,常量名与其他任何PHP标识符遵循同样的 命名规则,合法的常量名以字母或下划线开始,后面跟着任何字母、数字 或下划线;value指定常量的值;参数bool case_insensitive指定常量名称是 否区分大小写,默认值为true,即区分大小写。 2. 预定义常量 __LINE__返回文件中的当前行号。 __FILE__返回文件的完整路径和文件名。 __FUNCTION__返回函数名称。 __CLASS__返回类的名称。 __METHOD__返回该方法被定义时的名字(区分大小写)。 PHP_VERSION返回PHP的版本号。 PHP_OS返回执行PHP解析器的操作系统名称。
  • 33. 33/1802.4 运算符与表达式第2章目录2.4.1 算术运算符 算术运算符包括加号(+)、减号(−)、乘号(*)、除号(/)和取 模运算符(%),分别用于执行加、减、乘、除和求余数运算。其中“−”除 了作为减号外,也可以作为一元运算符(负号)使用,即对一个数取相反 数;除号(“/”)总是返回浮点数。当被除数$a为负值时,取模$a % $b的 结果也是负值。 2.4.2 赋值运算符 赋值运算符“=”的作用是把右边表达式的值赋给左边的运算数。赋值运 算表达式的值就是所赋的值。也就是说,“$a = 3”的值是3。这样,一个赋 值运算表达式也可用在其他表达式中,例如:$a = ($b = 3) + 6; 常用复合赋值运算符 += $op1 += $op2 →$op1 = $op1 + $op2 −= $op1 −= $op2 →$op1 = $op1 – $op2 *= $op1 *= $op2 →$op1 = $op1 * $op2 /= $op1 /= $op2 → $op1 = $op1 / $op2 %= $op1 %= $op2 →$op1 = $op1 % $op2 .= $op1 .= $op2 → $op1 = $op1 . $op2
  • 34. 34/1802.4 运算符与表达式第2章目录2.4.3 递增/递减运算符 ++(递增) ++$op(前加) 首先在$op的值上加1,然后返回$op $op++(后加) 首先返回$op,然后在$op的值上加1 −−(递减) −−$op(前减) 首先在$op的值上减1,然后返回$op $op−−(后减) 首先返回$op,然后将$op的值减1 递增/递减运算符对布尔值没有影响。递减NULL值也没有效果, 递增NULL的结果是1。
  • 35. 35/1802.4 运算符与表达式第2章目录2.4.4 字符串运算符 连接运算符(“.”),它返回两个操作数连接后的字符串; 连接赋值运算符(“.=”),它将右边操作数附加到左边的操作数之后。 2.4.5 位运算符 位运算符允许对整型数中指定的位进行置位,即对二进制位从低位到 高位对齐后进行运算。执行位运算时会将操作数转换为二进制整数,然后 按位进行相应的运算,运算的结果以十进制整数表示。如果两个运算数都 是字符串,则位运算符将对字符的ASCII值进行操作。 &(按位与)$op1 & $op2 把$op1和$op2中都为1的位设置为1 |(按位或) $op1 | $op2 把$op1或$op2中为1的位设置为1 ^(按位异或)$op1 ^ $op2 把$op1和$op2中不同的位设置为 1 ~(按位取反)~$op(单目运算符)将$op中为0的位设置为1,反之亦然 <<(向左移位)$op1 << $op2 把$op1中的位向左移动$op2次(每一次移动都表示“乘以2”) <<(向右移位)$op1 >> $op2 将$op1中的位向右移动$op2次(每一次移动都表示“除以2”)
  • 36. 36/1802.4 运算符与表达式第2章目录2.4.6 比较运算符 比较运算符用于比较两个值的大小,通过比较运算符连接操作数将构成比较表 达式,比较表达式的值为布尔值true或false。 ==(等于) $op1 == $op2 若$op1等于$op2,则为true;否则为false ===(全等) $op1 === $op2 若$op1等于$op2且两者类型相同,则为true;否则为false !=(不等于) $op1 != $op2 若$op1不等于$op2,则为true;否则为false <>(不等于) $op1 <> $op2 若$op1不等于$op2,则为true;否则为false !==(非全等) $op1 !== $op2 若$op1不等于$op2或两者类型不同,则为true;否则为false <(小于) $op1 < $op2 若$op1小于$op2,则为true;否则为false >(大于) $op1 > $op2 若$op1大于$op2,则为true;否则为false <=(小于或等于)$op1 <= $op2 若$op1小于或等于$op2,则为true;否则为false >=(大于或等于)$op1 >= $op2 若$op1大于或等于$op2,则为true;否则为false
  • 37. 37/1802.4 运算符与表达式第2章目录2.4.7 条件运算符 (expr1) ? (expr2) : (expr3) 条件表达式 (expr1) ? (expr2) : (expr3) 的值按照以下规 则计算: 当表达式expr1的值为true时,条件表达式的值为 expr2;在expr1求值为false时,条件表达式的值为expr3。 条件运算符可以用于快速构造条件语句,可以视为 if…else语句的简写形式。例如,可以利用条件运算符来 计算一个数的绝对值,即: $y = x > 0 ? x : -x ;
  • 38. 38/1802.4 运算符与表达式第2章目录2.4.8 逻辑运算符 逻辑运算符用于连接布尔表达式并构成逻辑表达式,逻辑天的 值为布尔值true或false。在PHP语言中,逻辑运算符包括逻辑与、 逻辑或、逻辑异或和逻辑非。 and(逻辑与)$a and $b 若$a和$b均为true,则为true or(逻辑或) $a or $b 若$a或$b任一为true,则为true xor(逻辑异或)$a xor $b 若$a或$b任一为true但不同时为true,则为true !(逻辑非) ! $a 若$a为true,则为false &&(逻辑与) $a && $b 若$a和$b均为true,则为true ||(逻辑或) $a || $b 若$a或$b任一为true,则为true 逻辑与和逻辑或都有两种不同形式的运算符,原因是它们运算 的优先级不同。
  • 39. 39/1802.4 运算符与表达式第2章目录2.4.9 表达式 表达式是PHP语言的重要基础之一。通过在表达式后 面添加一个分号(;)将构成一个语句。最基本的表达 式形式是常量和变量,稍微复杂的表达式是函数。在 PHP中,表达式可以说是无处不在的。除了常见的算术 表达式外,还有各种各样的表达式。 一个常用的表达式类型是比较表达式,这些表达式的 值为false或true。PHP支持各种比较运算符,通过这些 运算符构成的比较表达式经常用在条件判断语句中。通 过逻辑运算符连接比较表达式可以构成逻辑表达式,用 来表示更为复杂的条件。
  • 40. 40/1802.4 运算符与表达式第2章目录2.4.10 运算符优先级
  • 41. 41/1802.5 流程控制语句第2章目录2.5.1 选择语句 1. if语句 if ( expr ) statements if ( expr ) statements else elsestatements if ( expr1 ) statements elseif ( expr2 ) elseifstatements else elsestatements
  • 42. 42/1802.5 流程控制语句第2章目录2.5.1 选择语句 2. switch语句 switch ( expr ) { case expr1: statements1 ; break ; case expr2: statements2 ; break ; . . . default: defaultstatements ; break ; }
  • 43. 43/1802.5 流程控制语句第2章目录2.5.2 循环语句 1. while语句 while语句根据指定的条件将一组语句执行零遍或若干遍: while ( expr ) statements 2. do-while语句 do-while语句根据指定的条件将一组语句执行一遍或若干遍: do { statements } while ( expr ); 3. for语句 for语句的语法如下: for ( expr1; expr2; expr3 ) statements
  • 44. 44/1802.5 流程控制语句第2章目录2.5.3 跳转语句 1. break语句 break语句结束当前for、foreach、while、do-while或 switch语句的执行,在该语句可以添加一个可选的数字 参数,以决定跳出几重循环。 2. continue语句 continue语句用在各种循环结构中,用来跳过本次循 环中剩余的代码并在条件求值为真时开始执行下一次循 环。在PHP中,continue也可以用在switch语句中。在 continue语句中,可以使用一个可选的数字参数,以决 定跳过几重循环到循环结尾。
  • 45. 45/1802.5 流程控制语句第2章目录2.5.4 包含文件语句 1. include语句 include filepath ; include ( filepath ) ; 2. include_once语句 include_once语句功能与include语句类似,惟一的区别在于:如果该文件中的代 码已经被包含了,则不会再次包含。如同此语句名称暗示的那样,只会包含一次。 require_once()的返回值与include()相同。如果文件已被包含,则返回true。 3. require语句 require filename require ( filename ) require语句与include语句功能类似,惟一区别在于:如果找不到文件,则 include语句产生一个警告,而require语句则导致一个致命错误。如果想在丢失文件 时停止处理页面,则应该使用require语句。 4. require_once语句 require_once语句用于在脚本执行期间包含并运行指定文件,其功能与require语 句类似,所不同的是,如果该文件中的代码已经被包含了,则不会再次包含。
  • 46. 46/180第3章 数组与函数 3.1 数组 3.2 函数 3.3 面向对象编程初步
  • 47. 47/1803.1 数组第3章目录数组的概念: 数组是一种复合数据类型,可用于保存一组类型相同或不相同的数据, 并把一组值映射为键。键也称为数组的索引,它可以是整型数或字符串, 相应的数组分别称为枚举数组或关联数组。键可以有一个或多个,相应的 数组分别称为一组数组或多维数组。 3.1.1 创建数组 1. 用array()创建数组 $array_name = array( [key =>] value , . . . ) ; 其中参数key表示键名,可以是整型数或字符串;value表示与键对应的 值,可以是任何类型的值(包括数组)。array()语言结构返回根据参数建 立的数组。 2. 用方括号语法新建或修改数组 $arr_name[key] = value ; 也可以省略键名: $arr_name[] = value ; 其中key可以是整型数或字符串;value可以是任何值。
  • 48. 48/1803.1 数组第3章目录3.1.2 遍历数组 语法1 foreach (array_expr as $value) statements 语法2 foreach (array_expr as $key => $value) statements 第一种语法格式遍历给定的array_expr数组。在每次循环中,当 前元素的值被赋给$value,并且数组内部的指针向前移一步,因此 在下一次循环中将会得到下一元素。第二种语法格式与第一种语法 格式作用相同,但当前元素的键名会在每次循环中赋给变量$key。
  • 49. 49/1803.1 数组第3章目录3.1.3 预定义数组
  • 50. 50/1803.1 数组第3章目录3.1.3 预定义数组 常用的$_SERVER数组元素
  • 51. 51/1803.1 数组第3章目录3.1.4 数组函数 bool array_key_exists ( mixed key, array search ):检查给定的键名或索引是否存在于数组中。key表示键名或索引,search表示待搜索的数组。若给定的key存在于数组中,则返回true。 mixed array_pop ( array &arr ):弹出并返回arr数组的最后一个元素(出栈),将数组arr的长度减1。若arr为空或不是数组,则返回NULL。 int array_push ( array &arr, mixed var [, mixed ...] ):将一个或多个传入的单元压入数组arr的末尾(入栈)。var表示传入的单元。数组arr的长度将根据入栈单元的数目增加。 array array_reverse ( array arr [, bool preserve_keys] ):返回一个元素顺序相反的新数组。若preserve_keys为true,则保留原来的键名。 mixed array_shift ( array &arr ):把数组arr的第一个元素移出并作为结果返回,将arr的长度减1并将所有其他元素向前移动一位。所有的数字键名将改为从零开始计数,字符串键名将不变。若arr为空或不是数组,则返回NULL。使用本函数后会重置数组指针。 number array_sum ( array arr ):计算数组arr中所有值的和并以整数或浮点数返回。 array array_unique ( array arr ):接受数组arr作为输入并返回没有重复值的新数组。 int array_unshift ( array &arr, mixed var [, mixed ...] ):将传入的单元插入到数组arr的开头。单元是作为整体被插入的,因此传入的单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的字符串键名保持不变。本函数返回数组arr新的元素数目。 array array_values ( array input ):返回数组input中所有的值并给其建立数字索引。 bool asort ( array &arr [, int sort_flags] ):对数组arr进行排序,数组的索引保持和元素的关联。若成功则返回true,失败则返回false。 int count ( mixed var [, int mode] ):返回var(通常数组)中的元素数目,对任何其他类型都只有一个单元。若把可选参数mode设为1,则将递归地对数组计数,这对计算多维数组的所有元素尤其有用。mode的默认值是0。
  • 52. 52/1803.1 数组第3章目录3.1.4 数组函数 array each ( array &arr ):返回数组arr中当前的键-值对并将数组指针向前移动一步。键值对被返回为4个单元的数组,键名为0、1、key和value,其中元素0和key包含有数组单元的键名,1和value则包含有数据。若内部指针越过了数组末端,则返回false。 mixed end ( array &arr ):将数组arr的内部指针移动到最后一个元素并返回其值。 bool ksort ( array &arr [, int sort_flags] ):对数组名arr排序,并保留键名到数据的关联。本函数主要用于关联数组。若成功则返回true,失败则返回false。 void list ( mixed varname, mixed ... ):通过一步操作给一组变量进行赋值。list()仅能用于数字索引的数组并假定数字索引从0开始。像array()一样,list()不是真正的函数,而是语言结构。 mixed next ( array &arr ):返回数组arr的内部指针指向的下一个元素的值,或当没有更多元素时返回false。 mixed prev ( array &arr ):返回数组arr的内部指针指向的前一个元素的值,或当没有更多元素时返回false。 array range ( mixed low, mixed high [, number step] ):返回数组中从low到high的元素(包括它们本身)所构成的数组。若low > high,则序列将从high到low。若给出了可选参数step的值,则把它作为元素之间的步进值。step应为正值。若未指定step,则默认为1。 mixed reset ( array &arr ):把数组arr的内部指针倒回到第一个元素并返回该元素的值,若数组为空,则返回false。 bool rsort ( array &arr [, int sort_flags] ):对数组arr进行逆向排序(最高到最低),并为该数组中的元素赋予新的键名。若成功则返回true,失败则返回false。 bool shuffle ( array &arr ):打乱数组arr,进行随机排序,并为数组arr中的元素赋予新的键名。若成功则返回true,失败则返回false。 bool sort ( array &arr [, int sort_flags] ):对数组arr进行排序(最低到最高),并为该数组中的元素赋予新的键名。若成功则返回true,失败则返回false。
  • 53. 53/1803.2 函数第3章目录函数概念 函数是拥有名称的一组语句,调用函数时可以向它传递一些参数,当函数执行 完毕后可以向调用代码返回一个值。在应用开发中可将多次执行的程序代码定义成 一个函数,以便反复调用,提高工作效率。 3.2.1 自定义函数 function function_name ( $arg1, $arg2, …, $argN ) { statements return expr ; } 其中function_name是要创建函数的名称。命名函数时,应遵循与变量命名相同 的规则,但函数名不能以美元符号($)开头。函数名不区分大小写。$arg1~$argN 是函数的参数,通过这些参数可以向函数传递信息。一个函数可以有多个参数,它 们之间用逗号分隔。函数的参数是可选的。参数可以是各种数据类型,例如整型、 浮点型、字符串以及数组等。 statements表示在函数中执行的一组语句。return语句用于立即结束此函数的执 行并将它的参数作为函数的值返回,也用于终止脚本文件的执行。return()是语言结 构而不是函数,仅在参数包含表达式时才需要用括号将其括起来。
  • 54. 54/1803.2 函数第3章目录3.2.2 函数的参数 1. 通过引用传递参数 在默认情况下,函数参数通过值传递,这意味着即使在函数内部改变参数的值, 并不会改变函数外部的值。如果希望允许函数修改它的参数值,则必须通过引用传 递参数。若要函数的一个参数通过引用传递,则可以在函数定义中该参数的前面预 先加上引用符号“&”。 2. 设置参数的默认值 定义函数时,还可以为函数的参数设置默认值。默认值既可以是标量类型,也 可以是数组和特殊类型,例如数组和NULL。但默认值必须是常量表达式,而不能 是变量、类成员或函数调用。当使用默认参数时,任何默认参数必须放在任何非默 认参数的右侧;否则,也许函数将不会按照预期的情况工作。自PHP 5起,默认值 可以通过引用传递。 3. 使用可变长度参数列表 在用户自定义函数中可以使用可变长度参数列表。定义可变长度参数列表时, 可以使用以下函数获取参数的信息。 func_num_args()函数返回传递给函数的参数数目。 func_get_arg()函数从参数列表中获取一个参数。 func_get_args()函数返回一个由函数参数列表组成的数组。
  • 55. 55/1803.2 函数第3章目录3.2.3 函数的返回值 函数的返回值通过使用可选的return语句返回。返回值可以是任 何类型,其中包括列表和对象。执行return语句时,函数立即结束 运行并将控制权传递回它被调用的行。如果在一个函数中调用 return语句,将立即结束此函数的执行并将它的参数作为函数的值 返回。 3.2.4 变量函数 在PHP语言中,如果一个变量名后有圆括号,则将寻找与变量 的值同名的函数,并且将尝试执行它。这就是变量函数的概念。变 量函数不能用于语言结构,如echo()、print()、unset()、isset()、 empty()、include()、require()以及类似的语句。
  • 56. 56/1803.2 函数第3章目录3.2.5 变量作用域 变量的作用域与包含文件。大多数PHP变量不仅在当前PHP文件中生效,其作用域也将包含include和require引入的文件。 局部变量。在用户自定义函数中,一个局部函数范围将被引入。在默认情况下,任何用于函数内部的变量将被限制在局部函数范围内,这种变量称为局部变量。 全局变量。在任何函数外部定义的变量是全局变量。若要在函数内部使用全局变量,可以先用global关键字来声明全局变量,然后对全局变量进行访问。在函数内部,也可以直接通过预定义数组$GLOBALS来访问全局变量。在$GLOBALS数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS之所以在全局范围内存在,是因为$GLOBALS是一个超全局变量。 静态变量。静态变量使用关键字来static来声明,它仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
  • 57. 57/1803.2 函数第3章目录3.2.6 内部函数 1. 检查函数是否存在 bool function_exists ( string function_name ) 其中参数function_name指定要检查的函数名。通过调用 function_exists函数可以检查已定义函数的列表,其中包含内部函 数和用户自定义函数。若指定的函数存在,则返回true,否则返回 false。 2.检查模块中包含的函数 array get_extension_funcs ( string module_name ) 其中参数module_name指定模块名,必须用小写形式表示。 3.检查所有已定义函数 array get_defined_functions ( void ) 本函数返回一个多维数组,其中包含所有已定义函数,包括内 部函数和用户自定义函数。内部函数可以通过$arr[“internal”]访问, 用户自定义函数可以通过$arr["user"]访问。
  • 58. 58/1803.2 函数第3章目录3.2.7 日期和时间处理函数 1. 设置默认时区 在php.ini中设置date.timezone选项: date.timezone = PRC 通过内部函数date_default_timezone_set()来设置用于一个脚本中所有日期时间函数的默认时区: bool date_default_timezone_set ( string timezone_identifier ) 要使用中国标准时间,参数timezone_identifier使用时 区标识符Asia/Shanghai、Asia/Chongqing或Asia/Urumqi。
  • 59. 59/1803.2 函数第3章目录3.2.7 日期和时间处理函数 2. 获取日期和时间 array getdate ( [int timestamp] ) 3. 格式化日期和时间 string date ( string format [, int timestamp] )
  • 60. 60/1803.3 面向对象编程初步第2章目录3.3.1 类与对象 1. 创建类 class class_name { var $property_name // 类的属性 function method_name( ) { // 类的方法 // 方法代码 } } 2. 创建对象 $object = new class (); 其中class表示类名。该赋值语句创建类的一个对象实例,并将该对象的一个引 用赋给变量$object。 创建对象后,即可在程序中引用对象的属性,语法如下: $object->property 也可以在程序中调用对象的方法,语法如下: $object->method()
  • 61. 61/1803.3 面向对象编程初步第2章目录3.3.2 构造方法 构造方法是类中的一个特殊函数,当使用new操作符创建一个类 的实例时,构造方法将会自动调用。具有构造方法的类会在每次创 建对象时先调用此方法,所以非常适合在使用对象之前做一些初始 化工作。 在PHP 4和PHP 5中,对构造方法的处理有所不同。在PHP 4中, 如果一个函数与类同名时,则这个函数将成为构造方法。如果一个 类没有构造方法,则调用基类的构造方法,如果有的话。在PHP 5 中,可以在一个类中定义一个方法作为构造方法,而且构造方法的 名称统一为__construct。构造方法没有返回值。 为了实现向后兼容性,如果PHP 5在类中找不到__construct()函 数,它就会尝试寻找旧式的构造方法,也就是和类同名的函数。因 此将会产生一个兼容性问题:在类中已有一个名为__construct()的 方法,但它却又不是构造方法。
  • 62. 62/180第4章 字符串与正则表达式 4.1 字符串处理 4.2 正则表达式应用
  • 63. 63/1804.1 字符串处理4.1.1 字符串的输出 print()函数输出一个字符串: int print ( string arg ) sprintf()函数返回一个格式化的字符串: string sprintf ( string format [, mixed args [, mixed ...]] ) 4.1.2 大小写转换 strtolower()函数把一个字符串中的所有字母都转换为小写形式: string strtolower ( string str ) strtoupper()函数把一个字符串中的所有字母都转换为大写形式: string strtoupper ( string str ) ucfirst()函数把一个字符串中的首字母转换为大写形式: string ucfirst ( string str ) ucword()函数把一个字符串中所有单词的首字母都转换为大写形式: string ucwords ( string str )第4章目录
  • 64. 64/1804.1 字符串处理4.1.3 从字符串中删除空格 trim()函数去除字符串开始位置和结束位置的空格或其他字符: string trim ( string str [, string charlist] ) ltrim()函数去除字符串左边的空格或其他字符并返回处理后的字符串: string ltrim ( string str [, string charlist] ) rtrim()函数去除字符串右边的空格或其他字符并返回处理后的字符串: string rtrim ( string str [, string charlist] ) 第4章目录
  • 65. 65/1804.1 字符串处理4.1.4 HTML文本格式化 nl2br()函数把字符串中的所有换行符(“\n”)转换为HTML换行标记并返回经过处理的字符串: string nl2br ( string str ) htmlspecialchars()函数把字符串中的一些特殊字符替换为HTML文本实体并返回经过处理的字符串: string htmlspecialchars ( string str [, int quote_style [, string charset]] ) htmlentities()函数把字符串中的一些HTML标签转换为HTML实体并返回经过处理的字符串: string htmlentities ( string str [, int quote_style [, string charset]] ) strip_tags()函数从字符串中去除所有PHP和HTML标记并返回经过处理的字符串: string strip_tags ( string str [, string allowable_tags] )第4章目录
  • 66. 66/1804.1 字符串处理4.1.5 添加或去除反斜线 addslashes()函数使用反斜线引用字符串: string addslashes ( string str ) stripslashes()函数去除字符串中的反斜线: string stripslashes ( string str ) 4.1.6 字符串的连接与分割 implode()函数将数组元素连接成一个字符串并返回该字符串: string implode ( string glue, array pieces ) explode()函数使用一个字符串分割另一个字符串: array explode ( string separator, string str [, int limit] ) strtok()函数把一个字符串按照另一个字符串的值分割成若干个字符串: string strtok ( string str, string token ) 第4章目录
  • 67. 67/1804.1 字符串处理4.1.7 查找字符串 strpos() 函数从一个字符串中查找另一个字符串首次出现的位置: int strpos ( string haystack, mixed needle [, int offset] ) stripos()函数与strpos()功能基本相同,只是不区分大小写: int stripos ( string haystack, mixed needle [, int offset] ) strrpos() 函数在一个字符串中查找另一个字符串的最后一次出现: int strrpos ( string haystack, mixed needle [, int offset] ) 4.1.8 替换字符串 str_replace()函数在一个字符串中查找一个子串的所有出现并使用新字符串替换该子串: mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] ) str_irepalce()函数与str_replace()函数的功能基本相同,只是不区分大小写: mixed str_ireplace ( mixed search, mixed replace, mixed subject [, int &count] ) substr_replace()函数替换子串的文本内容并返回替换后的字符串: mixed substr_replace ( mixed str, string replacement, int start [, int length] )第4章目录
  • 68. 68/1804.1 字符串处理4.1.9 获取子串 substr()函数从指定字符串中返回一个子串: string substr ( string str, int start [, int length] ) strstr()函数在一个字符串中查找一个子串的首次出现: string strstr ( string haystack, string needle ) stristr()函数与strstr()函数功能基本相同,只是不区分大小写: string strstr ( string haystack, string needle ) strrchr()函数在一个字符串中查找一个字符的最后一次出现: string strrchr ( string haystack, string needle ) 第4章目录
  • 69. 69/1804.2 正则表达式应用4.2.1 正则表达式概述 正则表达式是从左向右去匹配目标字符串的一组模式,它由两种基本的字符类型组成:普通字符和元字符。普通字符也称为原义字符,这些字符在模式中表示它们自身并匹配目标中相应的字符。如果使用一个不包含任何元字符的正则表达式,则只能执行纯文本搜索。正是元字符才使正则表达式具有强大的字符串处理能力。 在PHP语言中,有两种类型的正则表达式,即Perl兼容正则表达式和POSIX扩展正则表达式,它们的基本结构相同,但语法格式稍微有些区别。Perl兼容正则表达式中所使用的模式与Perl类似,表达式应被包含在定界符中,通常使用正斜线(/)作为定界符。任何不是字母、数字或反斜线(\)的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。POSIX扩展正则表达式则不需要定界符。第4章目录
  • 70. 70/1804.2 正则表达式应用4.2.2 编写正则表达式 反斜线(\):这是一个通用转义符 音调符号(^)有以下两种使用方法: 若用在方括号之外,则表示匹配目标字符串的开头。 若用在方括号之内,则表示不接受该字符集合。 美元符号($)。表示匹配目标字符串的结尾。 句点(.)。在默认情况下,匹配除了换行符(\n)以外的任意一个字符。 竖线(|)表示多中选一。 圆括号(())用于定义一个子模式。"red"以及"king",并被计为1、2和3。 花括号({})。用于定义一个数量限定符。 问号(?)表示匹配前面的子模式0次或1次,等价于{0,1}。 星号(*)表示匹配前面的子模式0次或多次,等价于“{0,}”。 加号(+)表示匹配1个或多个数量限定符,等价于{1,}。 方括号([])。用于定义一个字符类。 连字符(-)用在字符类中,指出字符的范围。第4章目录
  • 71. 71/1804.2 正则表达式应用4.2.3 正则表达式搜索 preg_match()函数执行正则表达式搜索: int preg_match ( string pattern, string subject [, array matches [, int flags]] ) preg_match_all()函数执行全局正则表达式搜索: int preg_match_all ( string pattern, string subject, array matches [, int flags] ) ereg()函数执行正则表达式搜索: bool ereg ( string pattern, string string [, array regs] ) eregi()函数以不区分大小写方式执行正则表达式搜索: bool eregi ( string pattern, string string [, array regs] ) 第4章目录
  • 72. 72/1804.2 正则表达式应用4.2.4 正则表达式替换 preg_replace()函数执行正则表达式的搜索和替换: mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] ) ereg_replace()函数用于替换正则表达式: string ereg_replace ( string pattern, string replacement, string str ) 4.2.5 用正则表达式分割字符串 preg_split()函数。函数用正则表达式分割字符串: array preg_split ( string pattern, string subject [, int limit [, int flags]] ) split()函数用正则表达式把字符串分割到数组中: array split ( string pattern, string str [, int limit] ) 第4章目录
  • 73. 73/180第5章 构建PHP互动网页 5.1 获取表单变量 5.2 表单验证 5.3 获取URL参数 5.4 页面跳转 5.5 会话管理 5.6 Cookie应用
  • 74. 74/1805.1 获取表单变量5.1.1 创建表单 1. 使用
    标记创建表单 在这里放置各种表单控件
    2. 在Dreamweaver中创建表单 在文档中将插入点放在希望表单出现的位置。 选择【插入】→【表单】→【表单】命令。 单击该表单的轮廓,或者在标记选择器中单击
    标记,以选择该表单。 在属性检查器的【表单名称】文本框中,输入一个唯一的名称(name)以标识该表单。 在【动作】文本框中,指定用于处理该表单的动态网页的路径(action)。若使该框留空,则会把表单提交到当前页面。 从【方法】列表框中选择将表单变量传输到服务器的方法(method)。 第5章目录
  • 75. 75/1805.1 获取表单变量5.1.2 使用按钮 1. 使用标记创建按钮 其中name和id属性指定按钮的名称,在脚本程序中可以通过该名称 引用该按钮。 value属性指定显示在按钮上的文本标题。 type属性指定按钮的类型,其取值可以是“submit”、“reset”或“button”。 2. 利用Dreamweaver插入按钮 在文档中,将插入点放在表单轮廓内。 选择【插入】→【表单】→【按钮】命令。 选择该按钮,然后在属性检查器中对按钮的以下属性进行设置。 在【按钮名称】框中,为该按钮指定一个名称(name)。 在【值】框中,输入希望在该按钮上显示的文本(value)。 对于【动作】选项(type),选择【提交表单】(submit)、【重设表单】(reset)或【无】(button)。 若要将CSS类样式用于按钮,可从【类】列表框中选择所需样式。第5章目录
  • 76. 76/1805.1 获取表单变量5.1.3 获取表单变量 1. 通过全局变量获取表单变量 在PHP动态网页中接收表单变量时,将为表单控件自动分配全局变量。这些变量的名称与HTML表单控件的name名称值相同。 2. 通过预定义变量获取表单变量 使用POST方法提交表单时: $HTTP_POST_VARS["表单控件名称"] 使用GET方法提交表单时: $HTTP_GET_VARS["表单控件名称"] 3. 通过预定义数组获取表单变量 使用GET方法提交表单时: $_GET["表单控件名称"] 使用POST方法提交表单时: $_POST["表单控件名称"] 4. 在Dreamweaver中添加表单变量 在Dreamweaver中,可以通过【绑定】面板为PHP动态网页创建表单变量并向页面中添加该变量。 第5章目录
  • 77. 77/1805.1 获取表单变量5.1.4 使用文本框 1. 使用标记创建单行文本框 2. 使用 3. 利用Dreamweaver插入文本框 在文档窗口中,将插入点放在表单轮廓内。 选择选择【插入】→【表单】→【文本域】命令。第5章目录
  • 78. 78/1805.1 获取表单变量5.1.5 使用单选按钮 1. 使用标记创建单选按钮 2. 在Dreamweaver中插入单选按钮 在文档中,将插入点放在表单轮廓内。 选择【插入】→【表单】→【单选按钮】命令。 在插入的单选按钮旁边输入提示文本。 选择一个单选按钮,然后在属性检查器中对其属性进行设置。 第5章目录
  • 79. 79/1805.1 获取表单变量5.1.6 使用复选框 1. 使用标记创建复选框 其中name属性指定该复选框的名称,在脚本中可以通过该名 称引用该复选框。由于PHP会将名称相同的表单控件提交的值保存 到一个数组中,因此也可以将一组复选框设置为相同的名称并在 后面添加方括号“[]”,以快速获取一组复选框的值。 value属性指定向服务器提交的该复选框的值。 若设置checked属性,则当首次打开表单时该复选框处于选中状态。 2. 利用Dreamweaver插入复选框 在文档中,将插入点放在表单轮廓内。 选择【插入】→【表单】→【复选框】命令。 在属性检查器中对其属性进行设置。第5章目录
  • 80. 80/1805.1 获取表单变量5.1.7 使用列表框 1. 使用 …… 2. 在Dreamweaver中插入列表框 将插入点放在表单轮廓内。 选择【插入】→【表单】→【列表/菜单】命令。 利用属性检查器对其属性进行设置。第5章目录
  • 81. 81/1805.2 表单验证5.2.1 添加Spry构件 在文档窗口中,把插入点放在表单轮廓内。 在插入栏上选择【表单】类别,然后单击表示相应构件的图标。 用属性检查器对构件的相关属性进行设置。 5.2.2 Spry验证文本域 Spry验证文本域构件呈现为一个文本框,当站点访问者输入文本时它可以显示有效或无效状态。 Spry验证文本域构件的状态。 初始状态:当在浏览器中加载页面或用户重置表单时。 得到焦点状态:当用户把插入点放在该构件中时。 有效状态:当用户输入了正确的信息并且可以提交表单时。 无效状态:当用户以无效格式输入文本(例如对2006年输入06)时。 必填状态:当用户未在文本框中输入所需要的文本时。 最小字符数状态:当用户输入的字符数少于所需的最小字符数时。 最大字符数状态:当用户输入的字符数大于该文本框所允许的最大字符数时。 最小值状态:当用户输入的值小于该文本框所要求的最小值时。 最大值状态:当用户输入的值大于该文本框所允许的最大值时。 运行时,只要一验证文本域构件通过与用户交互进入上述状态之一,Spry框架逻辑就会把一个特定的CSS类应用于该构件的HTML容器(标记)。第5章目录
  • 82. 82/1805.2 表单验证5.2.3 Spry验证文本区域 一个Spry验证文本区域构件就是一个文本区域,当用户输入少量文本内容时它呈现为有效或无效状态。如果文本区域是必选字段而用户未输入任何文本,则该构件返回一个消息,表明需要提供内容。 与Spry验证文本域类似,该构件也包括有效、无效、必需等状态。根据所需要的验证结果,可以使用属性检查器来更改这些状态。一个验证文本区域构件可以在不同阶段进行验证,例如,当用户单击构件外部时、当用户输入时或者当用户试图提交表单时。对于Spry验证文本区域,可以把它设置为必填字段,还可以设置可在文本区域中输入的最小字符数和最大字符数。不过,与Spry验证文本域不同的是,对验证文本区域不能设置要验证的类型和格式。 Spry验证文本区域还有一个计数功能,就是可以为它添加一个字符计数器,以便让用户知道已经输入了多少字符,或者在文本区域中输入时还剩下多少字符。第5章目录
  • 83. 83/1805.2 表单验证5.2.4 Spry验证复选框 Spry验证复选框构件呈现为一个复选框或一组复选框,当用户选取一个复选框或取消选择时,该构件呈现为有效状态或无效状态。 验证复选框构件包括一些状态,如有效、无效以及需要值等。根据要验证的结果,可用属性检查器来更改这些状态的属性。一个验证复选框构件可以在不同时间点上进行验证。 验证复选框构件有以下几种状态。 初始状态:当在浏览器中加载页面时,或重置表单时。 有效状态:当用户做出一个选择时,或选择多项并且可以提交表单时。 必需状态:当用户忘记做出一个必需的选择时。 最小选择数状态:当用户所做的选择少于需要选择的复选框的最小数时。 最大选择数状态:当用户所做的选择大于允许选择的复选框的最大数时。第5章目录
  • 84. 84/1805.2 表单验证5.2.5 Spry验证选择框 Spry验证选择框构件在网页中呈现为一个下拉式列表框,当用户从中选择一项时它会呈现为不同的状态,例如有效、无效以及需要值等。根据要验证的结果,可以使用属性检查器来修改这些状态的属性。一个验证选择框构件可以在不同阶段进行验证,例如当前用户单击该构件外部、从列表框选择一个项或者试图提交表单时。 验证选择框构件有以下几种状态。 初始状态:当在浏览器中加载该页,或者用户重置表单时。 获得焦点状态:当用户单击该构件时。 有效状态:当用户选择一个有效的项并且可以提交表单时。 无效状态:当用户选择了一个无效的项时。 必需状态:当用户未选择一个有效的项时。 运行时,只要验证选择框构件通过与用户交互进入上述状态之一,Spry框架逻辑就会把一个特定的CSS类应用于该部件的HTML容器。例如,如果一个用户试图提交一个表单,但未从下拉式列表中选择一个项目,则Spry就会把一个CSS类应用于该构件,因此该构件将显示错误信息“请选择一个项目。”。第5章目录
  • 85. 85/1805.3 获取URL参数5.3.1 生成URL参数 创建使用GET方法提交数据的表单。 创建超文本链接,并在网址中附加URL参数。 客户端脚本编程。 服务器端脚本编程。 5.3.2 检索URL参数 1. 在PHP中检索URL参数 使用全局变量。 使用预定义数组变量$HTTP_GET_VARS。 使用预定义数组变量$_GET。 2. 在Dreamweaver中定义URL参数 在【绑定】面板中单击加号按钮 ,选择【URL变量】。 在【URL变量】对话框中,输入URL参数的名称并单击【确定】按钮。第5章目录
  • 86. 86/1805.4 页面跳转5.4.1 使用header()函数 使用header()函数可以向浏览器发送一个原始HTTP标头: void header ( string string [, bool replace [, int http_response_code]] ) 使用函数header()执行页面跳转的例子。 header ( "Location: http://www.example.com/" );// 重定向浏览器 exit; // 确保重定向后下面的代码不会被执行 5.4.2 使用客户端脚本 在JavaScript客户端脚本代码中,通过把document对象的 location属性或location对象的href属性设置为要转到的目标页面的 URL,都可以实现不同页面之间的跳转。把PHP服务器端脚本与 JavaScript客户端脚本结合起来,可以使用PHP变量动态地设置目 标页面的URL,从而可以根据条件跳转到不同的页面。若要向目 标页面传递参数,则可以把名称-对附加在URL后面。若需要定时 跳转功能,则可以利用window对象的setTimeout方法来实现。第5章目录
  • 87. 87/1805.4 页面跳转5.4.3 使用HTML标记 在文件头部分添加一个meta标签可以实现当前页面的刷新或 跳转到另一页面: 其中参数n指定当前页面停留的秒数,参数url指定要跳转的页 面,若省略url参数,则设置每经过指定的时间间隔自动刷新当前 页面。在PHP代码中,可以利用变量设置url参数的值,从而可以根 据不同的条件跳转到不同的页面。 第5章目录
  • 88. 88/1805.5 会话管理5.5.1 会话变量概述 会话变量存储着用户的会话生命周期的信息。当用户第一次打开应用程序中的某一页时,用户会话就此开始。当用户一段时间内不再打开该应用程序中的其他页时,或者用户明确终止该会话时(通常是通过单击“注销”链接),会话即告结束。在会话存在期间,会话特定于单个用户,每个用户都有单独的会话。 会话变量用于存储Web应用程序中每页都能访问的信息。信息可以是多种多样的,例如用户名、首选字体大小,或者是指示用户是否成功登录的标记及访问权限等。会话变量的另一个常见用途是保存连续分数。例如,在网上测验中到目前为止用户答对的题数,或者到目前为止用户从电子商务网站目录中选择的商品。 会话变量还可以提供一种超时形式的安全机制,这种机制在用户账户长时间不活动的情况下,将终止该用户的会话。如果用户忘记从Web站点注销,这种机制还会释放服务器内存和处理资源。 会话变量只有在用户的浏览器配置成接受Cookie后才起作用。当首次初始化会话时,服务器创建一个唯一标识该用户的会话ID号,然后将包含该ID号的Cookie发送到用户的浏览器。第5章目录
  • 89. 89/1805.5 会话管理5.5.2 创建会话变量 1. 启动会话 bool session_start ( void ) 2. 用会话变量存储信息 例如: $_SESSION["username"] = $_POST["txtUserName"] ; 3. 检查会话变量是否存在 bool session_is_registered ( string name ) 4. 从会话变量中检索数据 例如: $username = $_SESSION["username"] ; 5. 在Dreamweaver中定义会话变量 在PHP源代码中创建一个会话变量并为其指定值。 在【绑定】面板上单击加号按钮 并选择【阶段变量】命令。 在【阶段变量】对话框中,输入会话变量的名称。 第5章目录
  • 90. 90/1805.5 会话管理5.5.3 注销会话变量 使用session_unregister()函数可以从当前会话中注销一个会话变量: bool session_unregister ( string name ) 使用session_unset()函数可以从当前会话中注销所有会话变量: void session_unset ( void ) 使用session_destroy()函数可以清除当前会话的会话ID: bool session_destroy ( void ) 第5章目录
  • 91. 91/1805.6 Cookie应用5.6.1 Cookie概述 Cookie是一小段文本信息,随着用户请求和页面一起在Web服务器与浏览器之间传递。Cookie包含每次用户访问网站时Web应用程序都可以读取的信息。如果在用户请求网站中的页面时应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的Cookie,用户的浏览器在获得页面的同时还获得了该Cookie,并将它存储在用户硬盘上的某个文件夹中。如果该用户以后再次请求站点中的页面,当该用户输入URL时,浏览器便会在本地硬盘上查找与该URL关联的Cookie。如果该Cookie存在,浏览器便将该Cookie与页面请求一起发送到网站。 第5章目录
  • 92. 92/1805.6 Cookie应用5.6.2 在PHP中应用Cookie 1. 发送Cookie信息 使用setcookie()函数可以向客户端发送一个Cookie信息: bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] ) 2. 读取Cookie信息 当设置Cookie后,便可以在其他页面通过$_COOKIE或 $HTTP_COOKIE_VARS数组取得其值,其中$_COOKIE形式适用 于PHP 4.1.0或更高版本。而$HTTP_COOKIE_VARS则从PHP 3起 就可以使用。Cookie的值也会被保存到$_REQUEST数组中。 3. 在Dreamweaver中定义Cookie变量 在PHP源代码中,设置并发送Cookie信息。 在【绑定】面板上单击加号按钮 并选择【Cookie变量】。 在【Cookie变量】对话框中输入Cookie变量名称。 第5章目录
  • 93. 93/180第6章 PHP文件编程 6.1 文件操作 6.2 目录操作 6.3 上传文件
  • 94. 94/1806.1 文件操作6.1.1 检查文件是否存在 函数file_exists()检查一个文件或目录是否存在: bool file_exists ( string filename ) 6.1.2 打开和关闭文件 1. 打开文件 用函数fopen()打开一个文件或URL: resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ) 2. 关闭文件 使用fclose()函数关闭文件: bool fclose ( resource handle ) 6.1.3 写入文件 用fwrite()函数向文件写入数据: int fwrite ( resource handle, string str [, int length] )第6章目录
  • 95. 95/1806.1 文件操作6.1.4 读取文件 1. 读取单个字符 string fgetc ( resource handle ) 2. 逐行读取数据 fgets()函数从文件中读取一行: string fgets ( int handle [, int length] ) fgetss()函数从文件中读取一行并过滤掉HTML标记: string fgetss ( resource handle [, int length [, string allowable_tags]] ) fgetcsv()函数从文件指针中读入一行并解析CSV字段: array fgetcsv ( int handle [, int length [, string delimiter [, string enclosure]]] )第6章目录
  • 96. 96/1806.1 文件操作6.1.4 读取文件 3. 读取指定长度数据 用fread()函数可以从文件读取指定长度的数据: string fread ( int handle, int length ) 4. 读取整个文件 readfile()函数读取并输出一个文件的内容: int readfile ( string filename [, bool use_include_path [, resource context]] ) fpassthru()函数输出文件指针处所有的剩余数据: int fpassthru ( resource handle ) file()函数将整个文件读入一个数组中: array file ( string filename [, int use_include_path [, resource context]] ) file_get_contents()函数将整个文件读入一个字符串: string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )第6章目录
  • 97. 97/1806.1 文件操作6.1.5 文件定位 fseek()函数在文件中定位文件指针: int fseek ( resource handle, int offset [, int whence] ) rewind()函数将文件指针设置到文件开头: bool rewind ( resource handle ) ftell()函数返回文件指针读/写的位置: int ftell ( resource handle ) feof()函数测试文件指针是否到了文件结束的位置: bool feof ( resource handle ) 第6章目录
  • 98. 98/1806.1 文件操作6.1.6 检查文件属性 fileatime()函数取得文件的上次访问时间: int fileatime ( string filename ) filectime()函数取得文件的创建时间: int filectime ( string filename ) filemtime()函数取得文件的修改时间: int filemtime ( string filename ) filesize()函数取得文件的大小: int filesize ( string filename ) filetype()函数取得文件的类型: string filetype ( string filename ) 第6章目录
  • 99. 99/1806.1 文件操作6.1.7 重命名文件 用rename()函数对一个文件或目录进行重命名: bool rename ( string oldname, string newname [, resource context] ) 6.1.8 复制文件 用copy()函数可以实现文件复制功能: bool copy ( string source, string dest ) 6.1.9 删除文件 用unlink()函数可以删除指定的文件: bool unlink ( string filename ) 第6章目录
  • 100. 100/1806.2 目录操作6.2.1 创建目录 用mkdir()函数可以创建一个目录: bool mkdir ( string pathname [, int mode] ) 6.2.2 获取和更改当前目录 用getcwd()函数可以取得当前工作目录: string getcwd ( void ) 用chdir()函数可以改变当前目录: bool chdir ( string directory ) 6.2.3 读取目录 调用readdir()函数从一个目录中读取条目: string readdir ( resource dir_handle ) 用scandir()函数列出指定路径中的文件和目录: array scandir ( string directory [, int sorting_order [, resource context]] ) 第6章目录
  • 101. 101/1806.2 目录操作6.2.4 删除目录 用rmdir()函数删除指定的目录: bool rmdir ( string dirname ) 6.2.5 解析路径信息 用pathinfo()函数可以返回文件路径的信息: array pathinfo ( string path [, int options] ) 6.2.6 检查磁盘空间 disk_total_space()函数返回一个目录的磁盘总大小: float disk_total_space ( string directory ) disk_free_space()函数返回目录中的可用空间: float disk_free_space ( string directory ) 第6章目录
  • 102. 102/1806.3 文件上传6.3.1 创建文件域 用input标记创建一个文件域: 在Dreamweaver中创建文件上传表单: 在文档中添加一个表单,在属性检查器中将【方法】设置为POST,从【MIME类型】列表框中选择“multipart/form-data”(enctype属性)。 在表单内插入一个隐藏域并命名为MAX_FILE_SIZE,将其值设置为PHP处理的上传文件的上限(以字节为单位)。 选择【插入】→【表单】→【文件域】命令,将一个文件域添加到表单。 利用属性检查器对其属性进行设置。第6章目录
  • 103. 103/1806.3 文件上传6.3.2 上传单个文件 1. 修改PHP配置文件 设置存储上传文件的临时目录: upload_tmp_dir = F:\php\tmp 设置PHP处理的上传文件的上限: upload_max_filesize = 5M 2. 预定义数组$_FILES $_FILES["userfile"]["name"]:客户端机器文件的原名称。 $_FILES["userfile"]["type"]:文件的MIME类型。 $_FILES["userfile"]["size"]:已上传文件的大小,单位为字节。 $_FILES["userfile"]["tmp_name"]:文件被上传后在服务端储存的临时文件名。 $_FILES["userfile"]["error"]:与该文件上传相关的错误代码。第6章目录
  • 104. 104/1806.3 文件上传6.3.2 上传单个文件 3. 用PHP函数处理上传文件 用move_uploaded_file()将上传的文件移动到新位置: bool move_uploaded_file ( string filename, string destination ) 用is_uploaded_file()函数可以判断文件是不是通过HTTP POST上传的: bool is_uploaded_file ( string filename ) 第6章目录
  • 105. 105/1806.3 文件上传6.3.3 上传多个文件 PHP支持同时上传多个文件并将它们的信息自动以数组的形式组织。要完成这项功能,需要在HTML表单中对文件上传域使用和多选框与复选框相同的数组方式提交语法,也就是说命名文件域时应采用“userfile[]”之类的形式。 当用户提交表单后,数组$_FILES["userfile"]、$_FILES["userfile"] ["name"]及$_FILES["userfile"]["size"]都将被初始化。如果register_globals项设置为on,则与文件上传相关的全局变量也将被初始化。所有这些提交的信息都将被储存到以数字为索引的数组中。 例如,假设有两个文件review.swf和xwp.gif被提交,则$_FILES["userfile"]["name"][0]的值将是文件名review.swf,而$_FILES["userfile"]["name"][1]的值将是文件名xwp.gif。类似地,$_FILES["userfile"]["size"][0]将包含文件review.swf的大小,依此类推。 此外也同时设置了$_FILES["userfile"]["name"][0]、$_FILES["userfile"]["tmp_name"][0]、$_FILES["userfile"]["size"][0]及$_FILES["userfile"]["type"][0]。第6章目录
  • 106. 106/180第7章 PHP图像处理 7.1 配置GD库 7.2 图像基本操作 7.3 画基本图形 7.4 向图像中写入文本
  • 107. 107/1807.1 配置GD库7.1.1 加载GD库 若要通过PHP调用GD 2库中的图像处理函数,必须确保PHP以 模块方式运行,还要对配置文件php.ini进行修改: 在该文件中查找“extension=php_gd2.dll”,找到后去掉前面的分号。保存php.ini,重启Apache服务器。 7.1.2 获取GD库信息 用gd_info()函数来取得当前安装的GD库的相关信息: array gd_info ( void ) 第8章目录
  • 108. 108/1807.2 图像基本操作7.2.1 创建图像 1.创建空白图像 imagecreate()函数新建一个基于调色板的图像: resource imagecreate ( int x_size, int y_size ) imagecreatetruecolor()函数新建一个真彩色图像: resource imagecreatetruecolor ( int x_size, int y_size ) 用imagedestroy()函数来销毁图像: bool imagedestroy ( resource image ) 2.基于文件创建图像 用imagecreatefromgif()函数从一个GIF文件或URL新建一个图像: resource imagecreatefromgif ( string filename ) 用imagecreatefromjpeg()函数从一个JPEG文件或URL新建一个图像: resource imagecreatefromjpeg ( string filename ) 用imagecreatefrompng函数从PNG文件或URL新建一个图像: resource imagecreatefrompng ( string filename )第8章目录
  • 109. 109/1807.2 图像基本操作7.2.2 输出图像 用header()函数来设置输出文件的MIME类型: header ( "Content-type: image/gif" ) ; header ( "Content-type: image/jpeg" ) ; header ( "Content-type: image/png" ) ; 用imagegif()函数通过GIF格式将图像输出到浏览器或文件: bool imagegif ( resource image [, string filename] ) 用imagejpeg()函数通过JPEG格式将图像输出到浏览器或文件: bool imagejpeg ( resource image [, string filename [, int quality]] ) 用imagepng()函数通过PNG格式将图像输出到浏览器或文件: bool imagepng ( resource image [, string filename] ) 第8章目录
  • 110. 110/1807.2 图像基本操作7.2.3 分配颜色 用函数imagecolorallocate()为一幅图像分配颜色: int imagecolorallocate ( resource image, int red, int green, int blue ) 其中image参数表示图像标识符,是图像创建函数的返回值; red、green和blue三个参数分别表示所需要的颜色的红、绿、蓝成 分,这些参数的取值范围是0~255,在十六进制中为0x00~0xFF。 imagecolorallocate()函数返回一个标识符,表示由给定的RGB 成分组成的颜色。如果分配失败,则返回−1。必须通过调用该函 数来创建用在image所代表的图像中的每一种颜色。 对于由imagecreate()函数创建的图像,第一次调用 imagecolorallocate()函数时会用当前设置的颜色填充背景,对于由 imagecreatetruecolor()函数创建的图像则不会填充。 第8章目录
  • 111. 111/1807.3 画基本图形7.3.1 画像素 用imagesetpixel()函数来画单一像素: bool imagesetpixel ( resource image, int x, int y, int color ) 7.3.2 画轮廓图形 用imageline()函数在图像中画一条线段: bool imageline ( resource image, int x1, int y1, int x2, int y2, int color ) 用imagedashedline()函数在图像中画一条虚线: bool imagedashedline ( resource image, int x1, int y1, int x2, int y2, int color ) 用imagerectangle()函数在图像中画一个矩形: bool imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color ) 用imagepolygon()函数在图像中画一个多边形: bool imagepolygon ( resource image, array points, int num_points, int color ) 用imageellipse()函数在图像中画一个椭圆: bool imageellipse ( resource image, int cx, int cy, int w, int h, int color ) 用imagearc()函数在图像中画一段椭圆弧: bool imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color ) 用imagesetthickness()函数设定画线的宽度: bool imagesetthickness ( resource image, int thickness )第8章目录
  • 112. 112/1807.3 画基本图形7.3.3 画填充图形 用imagefilledrectangle()函数在指定图像中画一个矩形并填充: bool imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int color ) 用imagefilledpolygon()函数在图像中画一个多边形并加以填充: bool imagefilledpolygon ( resource image, array points, int num_points, int color ) 用imagefilledellipse()函数可以在指定图像中画一个椭圆并加以填充: bool imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color ) 用imagefilledarc()函数可以在图像中画一个椭圆弧并且加以填充: bool imagefilledarc ( resource image, int cx, int cy, int w, int h, int s, int e, int color, int style ) 第8章目录
  • 113. 113/1807.4 向图像写入文本7.4.1 写入单个字符 用imagechar()函数沿水平方向向图像中写一个字符: bool imagechar ( resource image, int font, int x, int y, string c, int color ) 用imagecharup函数沿垂直方向写一个字符: bool imagecharup ( resource image, int font, int x, int y, string c, int color ) 7.4.2 写入字符串 用imagestring()函数沿水平方向在图像中画一行字符串: bool imagestring ( resource image, int font, int x, int y, string s, int color ) 用imagestringup()函数在沿垂直方向在图像中画一行字符串: bool imagestringup ( resource image, int font, int x, int y, string s, int color )第8章目录
  • 114. 114/1807.4 向图像写入文本7.4.3 写入中文文本 1. 字符集转换 用iconv()函数把一个字符串转换为所需要的字符编码格式: string iconv ( string in_charset, string out_charset, string str ) 用mb_convert_encoding()对字符串的编码方式进行转: string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] ) 2. 用TrueType字体写入文本 用imagettftext()函数来实现用TrueType字体向图像写入文本: array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text ) 第8章目录
  • 115. 115/180第8章 MySQL数据库管理 8.1 MySQL应用基础 8.2 数据库创建与维护 8.3 数据查询与操作 8.4 其他数据库对象 8.5 安全性管理
  • 116. 116/1808.1 MySQL应用基础8.1.1 MySQL服务器管理 1. 从Windows命令行启动和停止MySQL服务器 安装MySQl服务器: mysqld-nt --install 启动MySQL服务器: net start mysql 停止MySQL服务器: net stop mysql 卸载MySQl服务器: mysqld-nt --remove 2. 用Windows服务工具启动和停止MySQL服务器 第8章目录
  • 117. 117/1808.1 MySQL应用基础8.1.2 客户端程序和实用工具介绍 myisampack:压缩MyISAM表以产生更小的只读表的一个工具 mysql:MySQL命令行工具,通过交互方式输入SQL语句或从文件以批处理模式执行SQL语句。 mysqlaccess:检查访问权限的主机名、用户名和数据库组合的客户端工具。 mysqladmin:执行管理操作的客户端程序,用于创建或删除数据库、重载授权表、将表刷新到硬盘上及重新打开日志文件 mysqlbinlog:从二进制日志读取语句的工具。 mysqlcheck:表维护程序,用于检查、修复、分析及优化表。 mysqldump:将MySQL数据库转储到一个文件(如SQL语句或tab分隔符文本文件)。 mysqlhotcopy:数据库备份程序,可在MySQL服务器运行时快速备份MyISAM或ISAM表。 mysqlimport:数据导入程序,使用LOAD DATA INFILE将文本文件导入MySQL数据库的相关表中。 mysqlshow:显示数据库、表、列及索引相关信息的客户端程序。 perror:显示系统或MySQL错误代码含义的工具。 replace:更改文件中或标准输入中字符串的实用工具。第8章目录
  • 118. 118/1808.1 MySQL应用基础8.1.3 mysql命令行工具 1. 调用mysql 命令提示符下调用mysql: mysql -hhostname -uusername -ppassword 其中hostname指定要连接的MySQL服务器的主机名,若要连接本机上 的MySQL服务器,主机名可用localhost表示;username指定用户名,如 root;password表示登录密码,如123456。若使用了-p选项而未指定密码, 则会显示“Enter Password:”,提示输入密码。 第8章目录
  • 119. 119/1808.1 MySQL应用基础8.1.3 mysql命令行工具 1. 调用mysql 常用mysql选项 第8章目录
  • 120. 120/1808.1 MySQL应用基础8.1.3 mysql命令行工具 2. 常用MySQL命令第8章目录
  • 121. 121/1808.1 MySQL应用基础8.1.3 mysql命令行工具 3. 从文本文件执行SQL语句 通过mysql从该文件读取输入: mysql db_name < text_file 若在文本文件中包含一个use db_name语句,则不需要在命令行中指定数据库名: mysql < text_file 如果正在运行mysql,可以使用source或\.命令来执行SQL脚本文件: mysql> source filename; mysql> \. filename; 第8章目录
  • 122. 122/1808.2 数据库创建与维护8.2.1 创建、显示和删除数据库 1. 创建数据库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name 2. 显示数据库列表 SHOW DATABASES [LIKE 'pattern'] 3. 删除数据库 DROP {DATABASE | SCHEMA} [IF EXISTS] db_name 第8章目录
  • 123. 123/1808.2 数据库创建与维护8.2.2 数据类型 1. 数值类型 整型数据类型 TINYINT[(M)][UNSIGNED][ZEROFILL]:1个字节,取值范围为−128~127或0~255。 BIT[(M)]:位字段类型。M表示每个值的位数,范围为1~64。若省略M,默认为1。 TINYINT[(M)] [UNSIGNED] [ZEROFILL]:很小的整数。带符号的范围是−128~127,无符号的范围是0~255。 BOOL,BOOLEAN:是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。 SMALLINT[(M)] [UNSIGNED] [ZEROFILL]:小的整数。带符号的范围是−32768~32767,无符号的范围是0~65535。 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]:中等大小的整数。带符号的范围是−8388608~8388607,无符号的范围是0~16777215。 INT[(M)] [UNSIGNED] [ZEROFILL]:普通大小的整数。带符号的范围是−214748364 8~2147483647,无符号的范围是0~4294967295。 BIGINT[(M)] [UNSIGNED] [ZEROFILL]:大整数。带符号的范围是−92233720368547 75808~9223372036854775807,无符号的范围是0到18446744073709551615。 第8章目录
  • 124. 124/1808.2 数据库创建与维护8.2.2 数据类型 1. 数值类型 浮点型数据类型 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]:单精度浮点数。允许的值是−3.402823466 E+38到−1.175494351E−38、0和1.175494351E−38到3.402823466E+38。 DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]:双精度浮点数。允许的值是−1.79769313 48623157E+308到−2.2250738585072014E−308、0和2.2250738585072014E−308到1.7976931348623157E+308。 FLOAT(p) [UNSIGNED] [ZEROFILL]:浮点数。p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类型为FLOAT或DOUBLE。如果p为从0到24,数据类型变为没有M或D值的FLOAT。如果p为从25到53,数据类型变为没有M或D值的DOUBLE。 DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]:定点数。小数点和负号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL的整数最大位数(M)为65。最大位数(D)是30。若省略M和D,默认都是0。第8章目录
  • 125. 125/1808.2 数据库创建与维护8.2.2 数据类型 2. 日期和时间类型 DATE:日期。支持的范围为'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示DATE值,但允许使用字符串或数字为DATE列分配值。 DATETIME:日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。 TIMESTAMP[(M)]:时间戳。范围是'1970-01-01 00:00:00'到2037年。 TIME:时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式显示TIME值,但允许使用字符串或数字为TIME列分配值。 YEAR[(2|4)]:两位或4位格式的年。默认是4位格式。在4位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY格式显示YEAR值,但允许使用字符串或数字为YEAR列分配值。 第8章目录
  • 126. 126/1808.2 数据库创建与维护8.2.2 数据类型 3. 字符串类型 [NATIONAL] CHAR(M)[BINARY| ASCII | UNICODE]:固定长度字符串。 CHAR:CHAR(1)的同义词。 NATIONAL] VARCHAR(M) [BINARY]:变长字符串。M表示最大列长度,M的范围是0到65 535。 BINARY(M):类似于CHAR类型,用于保存二进制字节字符串。 VARBINARY(M):类似于VARCHAR类型,用于保存二进制字节字符串。 BLOB:二进制大对象,可以容纳可变数量的数据。BLOB类型包括TINYBLOB、BLOB[(M)]、MEDIUMBLOB和LONGBLOB,它们可容纳值的最大长度不同。 TEXT:包括TINYTEXT、TEXT[(M)]、MEDIUMTEXT和LONGTEXT,分别对于4种BLOB类型,有相同的最大长度和存储需求。 ENUM('value1','value2',...):枚举类型。只能有一个值的字符串,从值列'value1'、'value2'、...、NULL中或特殊错误值中选出,最多可有65 535个截然不同的值。ENUM值在内部用整数表示。 SET('value1','value2',...):一个设置。字符串对象可以有零个或多个值,每个值必须来自列值'value1','value2',...,SET列最多可有64个成员。SET值在内部用整数表示。第8章目录
  • 127. 127/1808.2 数据库创建与维护8.2.3 表的创建与维护 1. 表的创建 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name ( column_definition, ... ) [CHARACTER SET charset_name] [COLLATE collation_name] [COMMENT 'string'] 2. 查看表信息 SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern'] 3. 查看列信息 SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern'] 第8章目录
  • 128. 128/1808.2 数据库创建与维护4. 表的修改 ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ... alter_specification: ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition , ...) | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | RENAME [TO] new_tbl_name 5. 表的重命名 RENAME TABLE tbl_name TO new_tbl_name [ , tbl_name2 TO new_tbl_name2] ... 6. 表的删除 DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [ , tbl_name] ...第8章目录
  • 129. 129/1808.3 数据查询与操作8.3.1 插入记录 1. 使用指定值插入记录 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name , ...)] VALUES ( { expr | DEFAULT },... ) , ( ... ) , ... [ ON DUPLICATE KEY UPDATE col_name=expr , ... ] 2. 从一个表向另一个表插入记录 INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] 第8章目录
  • 130. 130/1808.3 数据查询与操作8.3.2 查询记录 SELECT select_expr, ... [ INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name'] [ FROM table_references ] [ WHERE where_definition ] [ GROUP BY {col_name | expr | position} [ASC | DESC] , ... ] [ HAVING where_definition ] [ ORDER BY {col_name | expr | position} [ASC | DESC] , ... ] [ LIMIT {[offset , ] row_count | row_count OFFSET offset} ] 1. 检索未引用任何表的计算列 2. 检索所有行和列 从一个表中检索所有行和列是SELECT语句最简单的应用。在 这种情况下,在SELECT子句使用星号(*)表示所有列,并通过 FROM子句指定要检索的表。第8章目录
  • 131. 131/1808.3 数据查询与操作8.3.2 查询记录 3. 检索指定列 一个数据库表可能包含很多列,但在某些情况下或许只需要检 索表中的一部分列。在这种情况下,在SELECT子句中指定要检索 的列清单,列名之间用逗号(,)分隔,并通过FROM子句指定要 检索的表。 4. 为列指定别名 col_name [AS] alias_name 5. 检索符合指定条件的行 如果只需要从表中检索符合某种条件的行,则可以通过 WHERE子句来设置查询条件。 第8章目录
  • 132. 132/1808.3 数据查询与操作8.3.2 查询记录 6. 从多表中检索数据 在实际应用中,往往需要从多个表中检索数据,对于按规范方法设计的数据库尤其如此。执行多表查询时,需要在FROM子句中使用各种连接(JOIN)运算来组合不同表中的列,同时使用ON子句来设置表之间的关联条件。在FROM子句中可以用“表名 [AS] 别名”形式为表设置别名,该别名可以用在SELECT列清单和ON子句中。如果不同表拥有相同名称的列,则应在这些列前面冠以表的名称或表的别名。 7. 对查询结果排序 ORDER BY {col_name | expr | position} [ASC | DESC] , ...] 第8章目录
  • 133. 133/1808.3 数据查询与操作8.3.2 查询记录 8. 常用统计函数 AVG([DISTINCT] expr):返回expr 的平均值。 COUNT([DISTINCT] expr | *):返回SELECT语句检索到的行中非NULL值的数目。 MIN(expr):返回expr的最小值。 MAX(expr):返回expr的最大值。 SUM(expr):返回expr的总和。 9. 对查询结果分组 使用GROUP BY子句可以将结果集中的行分成若干个组来输出,每个组中的行在指定的列中具有相同的值。当使用GROUP BY子句时,如果在SELECT子句的选择列表中包含有统计函数,则针对每个组计算出一个汇总值,从而实现对查询结果的分组统计。 第8章目录
  • 134. 134/1808.3 数据查询与操作8.3.2 查询记录 10. 设置要返回的行数 使用LIMIT子句可以限制通过SELECT语句返回的行数。LIMIT取一个或两个数字自变量,自变量必须是非负的整数常数(当使用已预备的语句时除外)。 11. 使用子查询 如果一个SELECT语句能够返回一个单值或一列值,并嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询,而包含一个子查询的语句则称为主查询或外层查询。 第8章目录
  • 135. 135/1808.3 数据查询与操作8.3.3 更改记录 单表语法: UPDATE [ LOW_PRIORITY ] [ IGNORE ] tbl_name SET col_name1=expr1 [ , col_name2=expr2 ... ] [ WHERE where_definition ] [ ORDER BY ... ] [ LIMIT row_count ] 多表语法: UPDATE [ LOW_PRIORITY ] [ IGNORE ] tbl_name [ , tbl_name ] SET col_name1=expr1 [ , col_name2=expr2 ... ] [ WHERE where_definition ] 第8章目录
  • 136. 136/1808.3 数据查询与操作8.3.4 删除记录 单表语法: DELETE [ LOW_PRIORITY ] [ QUICK ] [ IGNORE ] FROM tbl_name [ WHERE where_definition ] [ ORDER BY ... ] [ LIMIT row_count ] 多表语法: DELETE [ LOW_PRIORITY ] [ QUICK] [IGNORE ] tbl_name [.*] [ , tbl_name[.*] ... ] FROM table_references [ WHERE where_definition ] 或者: DELETE [ LOW_PRIORITY ] [ QUICK] [ IGNORE ] FROM tbl_name[.* ] [ , tbl_name[.* ] ... ] USING table_references [ WHERE where_definition ] 第8章目录
  • 137. 137/1808.4 其他数据库对象8.4.1 索引 1. 创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name [ USING { BTREE | HASH }] ON tbl_name ( index_col_name , ... ) index_col_name: col_name [ ( length ) ] [ ASC | DESC ] 2. 查看索引 SHOW INDEX FROM tbl_name [FROM db_name] 3. 删除索引 DROP INDEX index_name ON tbl_name 第8章目录
  • 138. 138/1808.4 其他数据库对象8.4.2 视图 1. 创建视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [ ( column_list ) ] AS select_statement [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] 2. 修改视图 ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] 3. 删除视图 DROP VIEW [ IF EXISTS ] view_name [ , view_name ] ...第8章目录
  • 139. 139/1808.4 其他数据库对象8.4.3 存储过程 1. 创建存储过程 CREATE PROCEDURE sp_name ( [ proc_parameter[ , ... ] ] ) [ characteristic ... ] routine_body 2. 调用存储过程 CALL sp_name( [ parameter [, ...] ] ) 3. 常用语句介绍 DECLARE语句用来声明局部变量: DECLARE var_name[,...] type [DEFAULT value] 用SET语句对变量赋值: SET var_name = expr [, var_name = expr] ... 将列值存储到局部变量: SELECT col_name [, ... ] INTO var_name [, ... ] FROM tbl_name 第8章目录
  • 140. 140/1808.4 其他数据库对象8.4.3 存储过程 3. 常用语句介绍 用IF语句可以实现一个基本的条件结构: IF search_condition THEN statement_list [ ELSEIF search_condition THEN statement_list ] ... [ ELSE statement_list ] END IF 用CASE语句可以实现一个复杂的条件结构: 第一种语法: CASE case_value WHEN when_value THEN statement_list [ WHEN when_value THEN statement_list ] ... [ ELSE statement_list ] END CASE 第二种语法: CASE WHEN search_condition THEN statement_list [ WHEN search_condition THEN statement_list ] ... [ ELSE statement_list ] END CASE第8章目录
  • 141. 141/1808.4 其他数据库对象8.4.3 存储过程 3. 常用语句介绍 用WHILE语句也可以实现一个循环结构: [ begin_label: ] WHILE search_condition DO statement_list END WHILE [ end_label ] 4. 删除存储过程 DROP PROCEDURE [IF EXISTS] sp_name 第8章目录
  • 142. 142/1808.4 其他数据库对象8.4.4 存储函数 1. 创建函数 CREATE FUNCTION func_name ( [param_name type [, ... ] ] ) RETURNS type [characteristic ...] routine_body 2.调用函数 存储函数具有返回值,可以用在任何使用表达式的位置。存储函数不能通过CALL语句来调用,这一点不同于与存储过程。 3. 删除函数 DROP FUNCTION [IF EXISTS] func_name 第8章目录
  • 143. 143/1808.4 其他数据库对象8.4.5 触发程序 1. 创建触发程序 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 2. 删除触发程序 DROP TRIGGER [schema_name.]trigger_name 第8章目录
  • 144. 144/1808.5 安全性管理8.5.1 用户管理 1. 创建用户 CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [ , user [IDENTIFIED BY [PASSWORD] 'password']] ... 2. 删除用户 DROP USER user [, user] ... 3. 重命名用户 RENAME USER old_user TO new_user [, old_user TO new_user] ... 4. 设置密码 为当前用户设置密码: SET PASSWORD = PASSWORD ( 'some password' ) ; 为当前服务器主机上的一个特定账户设置密码: SET PASSWORD FOR user = PASSWORD ( 'some password' ) ; 第8章目录
  • 145. 145/1808.5 安全性管理8.5.2 权限管理 1. 设置权限 GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [TABLE | FUNCTION | PROCEDURE] {tbl_name | * | *.* | db_name.*} TO user [ IDENTIFIED BY [PASSWORD] 'password' ] [ , user [IDENTIFIED BY [PASSWORD] 'password'] ] ... [ REQUIRE NONE | [{SSL| X509}] [CIPHER 'cipher' [AND] ] [ ISSUER 'issuer' [AND] ] [ SUBJECT 'subject'] ] [ WITH GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count ] 2. 撤销权限 第一种语法: REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [TABLE | FUNCTION | PROCEDURE] {tbl_name | * | *.* | db_name.*} FROM user [, user] ... 第二种语法: REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...第8章目录
  • 146. 146/180第9章 PHP数据库编程 9.1 创建数据库连接 9.2 查询记录 9.3 添加记录 9.4 修改记录 9.5 删除记录
  • 147. 147/1809.1 创建数据库连接9.1.1 编程实现MySQL数据库连接 1. 创建非持久连接 resource mysql_connect ( [string server [ , string username [ , string password [ , bool new_link [ , int client_flags ] ] ] ] ] ) 2. 创建持久连接 resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]] ) 3. 选择数据库 bool mysql_select_db ( string database_name [, resource link_identifier] ) 4. 关闭MySQL连接 bool mysql_close ( [ resource link_identifier ] ) 第9章目录
  • 148. 148/1809.1 创建数据库连接9.1.2 在Dreamweaver中创建MySQL连接 在【数据库】面板上单击加号按钮,选择【MySQL连接】。 在【MySQL连接】对话框中,通过设置各个选项为当前PHP动态网站创建数据库连接。 输入新连接的名称。 在【MySQL服务器】框中,指定承载MySQL的计算机,可以输入IP地址或服务器名称。若MySQL与PHP运行在同一台计算机上,则可输入localhost。 输入MySQL用户名和密码。 在【数据库】框中输入要连接的数据库名称。 第9章目录
  • 149. 149/1809.1 创建数据库连接9.1.2 在Dreamweaver中创建MySQL连接 为了避免访问MySQL数据库时出现乱码现象,对数据库连接文件进行修改,即在PHP代码块末尾添加以下语句: mysql_query ( "SET NAMES gb2312" ) ; 还应当把PHP页的字符集设置为简体中文,这可以通过设置文件首部的标记来实现,代码如下: 若要把新建网页的字符集自动设置为gb2312,则要在Dreamweaver的首选参数中对默认编码进行设置。具体设置方法是:选择【编辑】→【首选参数】命令,当出现【首选参数】对话框时,从【分类】列表中选择【新建文档】,然后从【默认编码】列表框中选择“简体中文(GB2312)”。 第9章目录
  • 150. 150/1809.2 查询记录9.2.1 通过编程实现查询记录 1. 执行MySQL查询 resource mysql_query ( string query [, resource link_identifier] ) 2. 从记录集中获取行作为数组 array mysql_fetch_array ( resource result [, int result_type] ) 还可以使用mysql_fetch_row()函数或mysql_fetch_assoc()函数。 3. 获取记录集的行数和列数 用mysql_num_rows()函数可以取得记录集中包含的行数: int mysql_num_rows ( resource result ) 用mysql_num_fields()函数可以取得记录集中包含的字段数目: int mysql_num_fields ( resource result ) 3. 获取列信息 object mysql_fetch_field ( resource result [, int field_offset] ) 第9章目录
  • 151. 151/1809.2 查询记录9.2.2 在Dreamweaver中创建记录集 1.用简单记录集对话框创建记录集 第9章目录
  • 152. 152/1809.2 查询记录9.2.2 在Dreamweaver中创建记录集 2. 用高级记录集对话框创建记录集 第9章目录
  • 153. 153/1809.2 查询记录9.2.3 分页显示记录集 1. 通过编程实现分页显示 对于MySQL数据库,分页显示记录集可以通过在SELECT语句中添加LIMIT子句指定要显示的起始记录和终止记录来实现,在一个页面中显示的记录构成一个记录组。通过添加记录集导航条可以在不同记录组之间移动,也可以通过记录计数器来显示总页数、当前页号及记录总数等信息。 第9章目录
  • 154. 154/1809.2 查询记录9.2.3 分页显示记录集 2. 在Dreamweaver中快速实现记录集分页显示 Dreamweaver提供了一些服务器行为,用于快速实现各种标准的数据库操作。要实现记录集分页显示,主要用到以下几种服务器行为:使用“重复区域”服务器行为或“动态表格”服务器行为创建一个动态表格,用于显示记录集内的多条记录;使用“记录集导航条”服务器行为创建文本或图像形式的导航链接,以便在不同记录组之间切换;使用“记录集导航状态”服务器行为创建记录集计数器,以显示总记录数目和当前页显示的记录号范围。 第9章目录
  • 155. 155/1809.2 查询记录9.2.4 创建搜索/结果页 为了给动态网站添加搜索功能,通常需要创建一个搜索页和一 个结果页。在搜索页中,访问者通过HTML表单输入搜索参数并将 这些参数传递给服务器上的结果页,由结果页获取搜索参数,连 接到数据库并根据搜索参数对数据库进行查询,创建记录集并显 示其内容。在某些情况下,也可以把搜索页和结果页合并在一起。 1. 通过编程实现搜索/结果页 2. 在Dreamweaver中快速生成搜索/结果页 在Dreamweaver中创建显示搜索结果的PHP动态网页时,需要 获取搜索参数的值并根据其值来构建筛选条件,以生成包含搜索 结果的记录集。根据搜索参数的数目,分为以下两种情况来处理。 若只传递了一个搜索参数,则可以用简单记录对话框来创建带有筛选条件的记录集。 若传递了两个或更多搜索参数,则必须使用高级记录集来创建记录集,而且还需要设置一些变量,变量的数目与搜索参数的数目相等。第9章目录
  • 156. 156/1809.2 查询记录9.2.5 创建主/详细页 主/详细页是一种比较常用的页面集合,它由主页和详细页所 组成,通过两个明细级别来显示从数据库中检索的信息。在主页 上显示出通过查询返回的所有记录部分信息的列表,而且每条记 录都包含一个超级链接,当单击主页上的超级链接时打开详细页 并传递一个或多个URL参数,在详细页中读取URL参数并根据这 些参数的值执行数据库查询,以检索所选记录的更多详细信息并 显示出来。 1. 通过编程实现主/详细页 2. 在Dreamweaver中快速生成主/详细页 在Dreamweaver中,可以通过添加相关的服务器行为来快速成 生/详细页,主要包括以下步骤:创建主页并创建到详细页的链接; 为该链接创建URL参数;创建详细页并根据获取的参数查找请求 的记录;在详细页上显示检索到的记录。 第9章目录
  • 157. 157/1809.3 添加记录9.3.1 通过编程实现添加记录 连接到MySQL服务器并选择要访问的数据库。 向MySQL服务器发送一个SET NAMES gb2312语句,保证中文字符得到正确处理。 通过预定义数组$_POST获取用户通过表单提交的数据,并将这些表单数据应用于INSERT INTO语句中。 向MySQL服务器发送一条INSERT INTO语句,从而实现新记录的添加。 添加新记录后,可通过调用mysql_affected()函数获取被插入的记录行数: int mysql_affected_rows ( [resource link_identifier] ) 第9章目录
  • 158. 158/1809.3 添加记录9.3.2 快速生成记录添加页 1. 使用向导生成记录添加页面 第9章目录
  • 159. 159/1809.3 添加记录9.3.2 快速生成记录添加页 2. 逐块生成记录添加页面 可以使用表单工具和服务器行为面板分别创建记录添加页面的 基本构造块。这个过程包括两个步骤:首先将表单添加到页面以 允许用户输入数据,然后添加“插入记录”服务器行为以便在数据库 表中插入记录。 第9章目录
  • 160. 160/1809.4 更新记录9.4.1 通过编程实现记录更新 通过主/详细页集合实现记录的选择和更新,在主页中通过链接选择要更新的记录,通过URL参数向详细页传递要更新记录的标识(如学号),在详细页中获取该记录标识并据此来检索要更新的记录集,将各个表单控件绑定到相关的记录字段上。有时也将主页和详细页合并在一起。 当提交表单时,用预定义数组变量$_POST获取表单变量的值,把这些值作为字段的新值用于UPDATE语句。 创建数据库连接,设置字符集,并通过调用mysql_query()函数来执行UPDATE语句以实现记录更新。 执行UPDATE语句后,通过调用mysql_affected_rows()来获取被更新的记录行数。这里需要特别指出的是,如果一行记录中的所有字段值都没有发生改变,则MySQL不会执行更新操作。 第9章目录
  • 161. 161/1809.4 更新记录9.4.2 快速生成记录更新页 在Dreamweaver中,可以通过可视化操作快速生成一个记录更新页,不用编写代码或编写少量代码。一个记录更新页包括以下三个构造模块:用于从数据库表中检索记录的过滤记录集;允许用户修改记录数据的HTML表单;用于更新数据库表的“更新记录”服务器行为。 既可以使用表单工具和【服务器行为】面板分别添加HTML表单和“更新记录”服务器行为,也可以使用“更新记录表单向导”通过单个操作将这些模块添加到页面中。 第9章目录
  • 162. 162/1809.5 删除记录9.5.1 通过编程实现记录删除 连接到MySQL服务器并选择要访问的数据库。 编写一个DELETE语句,并通过WHERE子句来指定要删除哪些记录;通常是列出一个记录列表,让用户通过超链接来选择要删除的记录。 若要删除多条记录,则可以在记录列表为每行记录添加一个复选框。 当用户单击提交按钮时,通过调用mysql_query()函数向MySQL服务器发送一个DELETE语句,以完成记录删除操作。 如果需要,可以对提交按钮编写客户端脚本,以便让用户对删除操作进行确认。 通过调用mysql_affetced_rows()函数获取被删除记录的行数。 第9章目录
  • 163. 163/1809.5 删除记录9.5.2 快速生成记录删除页 在Dreamweaver中,可以利用“删除记录”服务器行为快速生成记录删除页面。记录删除页面通常用作主/详细页集合中的详细页。在主页中通过单击链接选择要删除的记录,在记录删除页中从数据库表中检索待删除的记录,以只读方式显示待删除记录。当单击提交按钮时,将将删除语句发送给服务器。 第9章目录
  • 164. 164/180第10章 会员管理系统设计 10.1 系统总体设计 10.2 系统功能实现
  • 165. 165/18010.1 系统总体设计10.1.1 系统功能分析 新会员注册。任何用户都可以通过注册页填写个人资料并保存到后台数据库中。注册时,必须保证会员名是惟一的。如果提交的会员名已被占用,则会通过Ajax表单验证在注册页上显示相关提示信息。如果注册成功,则自动登录到系统首页。 查看会员资料。会员登录后,若要查看某个会员的详细信息,可在会员列表中单击查看详细信息链接。 修改个人资料。会员登录后,可以对自己在注册时填写的个人资料进行修改,但不能修改用户名和登录密码。 上传个人照片。会员登录后,可以将自己的照片上传到服务器上,与此同时相应图片文件的路径将被填写到后台数据库中。 查询密码。如果会员忘记了自己的密码,则可以通过输入用户名并回答注册设置的安全问题找回密码。在本系统中,提供了以下两种方式来找回密码:在网页上查看密码;通过电子邮件收取密码。 管理员专区。在会员管理系统中,会员分为管理员和普通会员。系统管理员不仅拥有普通会员的所有权限,还拥有删除普通会员的特权。第10章目录
  • 166. 166/18010.1 系统总体设计10.1.2 数据库设计与实现第10章目录
  • 167. 167/18010.1 系统总体设计10.1.3 构建PHP动态站点第10章目录
  • 168. 168/18010.1 系统总体设计10.1.4 站点文件组成第10章目录
  • 169. 169/18010.2 系统功能实现10.2.1 创建CSS样式表第10章目录
  • 170. 170/18010.2 系统功能实现10.2.2 创建网站导航条 网站导航条包含一些导航链接,对于当前打开的页面,不再显示超链接,而是以反显形式给出提示文字,此外还在导航条右侧显示当前日期。如果用户已经登录,则会在导航条左侧显示出对该用户的欢迎信息。 第10章目录
  • 171. 171/18010.2 系统功能实现10.2.3 会员注册 在网站导航条上单击【会员注册】链接,即可进入新会员注册页register.php。当在文本框输入用户名并使光标离开此文本框时,会利用Ajax异步请求技术立即提示所输入的用户名是否可用。当用户在该页上输入个人信息并单击【注册】按钮时,如果提交的用户名尚未被他人注册,并且其他字段也符合要求(如两次输入的密码相同、日期和Email地址格式正确),则这些信息会保存在后台数据库中,然后将用户名和角色值保存会话变量中并提示注册成功,停留5秒钟后将自动登录到系统首页。如果所提交的会员名已他人被注册,则进入系统登录页login.php并显示出错信息。第10章目录
  • 172. 172/18010.2 系统功能实现10.2.4 检查用户名 创建会员注册页时,为了保证提供的用户名是惟一的,在该页中插入了“检查新用户名”服务器行为。这样,当单击【提交】按钮时将在服务器端查询数据库,如果所提供的用户名已存在,则会重新加载注册页并传递一个registered参数,然后注册表单上方显示用户名已被注册的提示信息。 除了提交表单时进行服务器端检查之外,当光标离开【用户名】文本框时,还通过异步请求方式对用户名进行Ajax验证,在这个请求过程中将调用服务器端的check_username.php,并发送一个名为username的URL参数。执行check_username.php文件时,也将对数据库进行查询并生成一个XML数据。下面介绍check_username.php的创建过程。 第10章目录
  • 173. 173/18010.2 系统功能实现10.2.5 会员登录 当在系统导航条上单击【会员登录】链接时,将会打开登录页。登录页用于对用户的会员身份进行验证,当输入用户名和密码并单击【登录】按钮时,如果提供的用户名和密码与存储在数据库中的记录匹配,则进入系统首页,否则仍然停留在登录页并显示登录失败的提示信息。此外,如果用户在未经登录的情况下直接访问会员专属区,将会被重定向到登录页,并通过URL参数传递一个错误代码: 1表示用户名或密码错误; 2表示匿名用户不能访问会员专属区; 3表示普通用户不能访问管理员专属区。 第10章目录
  • 174. 174/18010.2 系统功能实现10.2.6 系统首页 登录成功后将打开系统首页index.php,它以分页形式列出当前注册的所有会员。若单击【电子邮件】列的链接,可给选定会员发邮件;若单击【详细信息】链接,则可查看选定会员的详细信息;若单击【注销】链接,则可结束本次会话并转到登录页。 1. 系统首页设计 系统首页index.php仅限登录后的会员访问,若用户未经登录而试图直接访问该页,则会被重定向到登录页。系统首页用于列出会员的简明信息并包含到个人详细信息页的链接。 2. 个人详细信息页设计 当在系统首页上单击【详细信息】链接时,将打开会员个人信息页detail.php。系统首页index.php与会员个人信息页detail.php组成了一个主/详细页集合。 第10章目录
  • 175. 175/18010.2 系统功能实现10.2.7 会员信息更新 用户在注册会员之后,如果希望修改自己在注册页上提交的个人信息,可以在网站导航条上单击【修改资料】链接,此时会打开个人信息更新页modify.php。个人信息更新页仅限登录到系统会员访问,而且在这里只能修改自己的个人信息;个人信息更新页未列出密码,用户名则以只读方式显示,不允许进行修改。假如用户未经登录而直接访问该页,将被重定向到登录页并显示出错信息。 第10章目录
  • 176. 176/18010.2 系统功能实现10.2.8 密码查询 在会员管理系统中,查询密码功能通过username.php、answer.php和getpwd.php三个PHP动态网页来实现,这些PHP页均未加保护,可以由任何用户访问。当用户查询密码时,首先需要输入用户名,如果该用户名存在于后台数据库中,则显示安全问题;如果提交了一个正确的答案,则需要选择获取密码的方式,然后通过网页查看密码或通过邮件收取密码。 1. 输入用户名 2. 回答安全问题 3. 找回密码 第10章目录
  • 177. 177/18010.2 系统功能实现10.2.9 照片上传 会员登录后,在系统导航条上单击【上传照片】链接,可以打开upload.php页。当从本地硬盘上选择要上传的照片并单击【上传】按钮时,若文件上传成功,则在页面上显示照片及相关图像文件信息,并将图像文件路径保存到数据库中。照片上传页仅限会员访问,若用户未经登录而直接访问该页,将被重定向到登录页。 第10章目录
  • 178. 178/18010.2 系统功能实现10.2.10 会员管理 当在网站导航条上单击【会员管理】链接时,将打开会员管理页manage.php。会员管理页以表格形式分页显示当前所有注册会员的基本情况,若在【操作】列单击【删除】链接,则会弹出一个确认框,单击【确定】按钮,即可删除选定的会员。会员管理页仅限系统管理员访问,如果匿名用户或普通会员试图访问本页,则会被重定向到登录页,此时传递的错误代码为3。 第10章目录