资源描述
6.1 PHP与表单与表单u6.1.1 提交表单数据提交表单数据在之前的内容中,已经了解过表单数据的提交方法。表单数据的提交方法主要分为两种:POST方法和GET方法。POST方法是在HTTP请求中嵌入表单数据;GET方法则将表单数据附加到请求该页的URL中。提交表单时要将表单标记的属性method设为post或get,post表示使用POST方法提交,get表示使用GET方法提交。属性action指定数据提交到的URL地址,提交后页面将跳转到这个地址。而用户输入的数据也将提交到该地址。例如:6.1.2 接收表单数据接收表单数据提交表单数据后就可以在目标页面接收用户输入的数据。接收表单可以使用$_POST、$_GET和$_REQUEST来完成。$_POST用于接收POST方法传来的值,$_GET用于接收GET方法传来的值,$_REQUEST可以取得包括POST、GET和Cookie在内的外部变量。表单中可以包含很多的控件,如文本框、单选按钮、复选框、文件域、滚动文本框、按钮等。接收表单数据即指获取表单控件的value属性的值。不同的控件可以设置不同的name属性,在接收数据时根据name属性确定是哪个控件的值。不同的控件设置value属性的方式也不一样。例如,单选按钮可能由多个选项组成,这些选项的name属性值都相同时表示这些选项属于同一个表单控件,每个选项都有一个value值,接收控件的值后可以根据这个value值判断用户选择了哪个选项。又例如,复选框控件可以使用户选择多个选项,复选框中选项的name属性值都设置为相同,并且设置为数组的形式,如“name=XQ”,而每个选项都有一个value值,接收数据时接收到的是一个数组,数组中保存了用户选择的选项,遍历数组的值就可以确定用户选择了哪些选项。6.1.3 常用表单数据的验证方法常用表单数据的验证方法有些表单数据填写时必须要符合一定的条件,例如,填写出生日期时必须要符合日期的格式,填写电话号码时必须要填写正确位数的数字。这时就需要通过验证表单数据来判断用户所填写数据的正确性。表单数据的验证一般可以使用正则表达式(见4.3节)来完成。例如,一个简单的验证日期的正则表达式可以写做“d4-(0?d|1?012)-(0?d|12d|301)$”。验证E-mail格式的正则表达式可以写做“a-zA-Z0-9_-+a-zA-Z0-9-+.a-zA-Z0-9-.+$”。6.1.4 实例实例使用使用PHP处理表单数据处理表单数据【例6.1】制作一个学生信息表单,包含学生学号、姓名、性别、出生日期、所学专业、备注、兴趣爱好等信息。要求学号必须为6位数字,出生日期必须符合日期格式,学号和姓名不允许为空。表单数据以GET方法提交到另一个页面,在另一个页面判断表单数据的正确性并输出。新建EX6_1_Hpage.php文件,输入以下代码。新建EX6_1_Ppage.php文件,输入以下代码。6.1.4 实例实例使用使用PHP处理表单数据处理表单数据运行EX6_1_Hpage.php文件,如图6.1所示。在表单中输入学生信息,然后单击【提交】按钮验证输入的信息。运行结果示例如图6.2所示。图6.1 学生信息表单图6.2 运行结果6.2 获取获取URL参数参数u6.2.1 获取获取URL参数的方法参数的方法URL通常的格式为:“url?参数1=值1&参数2=值2&参数3=值3”。在页面中使用“$_GET参数”即可获得具体参数的值,例如:单击6.2.2 解析解析URL在PHP中可以使用parse_url()函数解析一个URL,并返回包含其相关内容的数组。语法格式如下:array parse_url(string$url)说明:$url为要解析的URL地址字符串。本函数不是用于解析URL的合法性,不完整的URL也可接受。除了对于严重不合格的URL,该函数将返回FALSE并发出警告外,函数将返回一个关联数组,包含URL中出现的各个组成部分。其组成部分为(至少有一个):scheme。如http。host。如。port。端口号。user。用户名。pass。密码。path。路径。query。在问号“?”之后的内容。fragment。在散列符号#之后的内容。6.2.2 解析解析URL例如:http host= user=usernamepass=password path=/index.php query=arg=valuefragment=anchor)*/?6.2.3 URL编码与解码编码与解码在PHP中对URL编码使用urlencode()函数,语法格式如下:string urlencode(string$str)说明:$str为要编码的字符串,该函数返回一个编码后的字符串。例如:URL编码后需要使用urldecode()函数进行解码,语法格式如下:string urldecode(string$str)该函数将对字符串$str中所有以百分号“%”开头后跟2位十六进制数的3位字符串进行解码,并返回解码后的字符串。例如:6.3 页面跳转页面跳转u6.3.1 使用使用header()函数函数在4.4.6节曾介绍过header()函数的作用,其中一个作用就是页面跳转,只要在header()函数的参数中使用“Location:xxx”即可实现该功能。例如:6.3.2 使用使用HTML标记标记最常用的跳转页面的方法是提交表单,将标记的action属性设置为要跳转到的页面,提交表单后就跳转到该页面。例如:使用HTML的超链接标记也能够实现跳转页面的功能,例如:?phpecho 单击超链接;?使用按钮也可以进行页面跳转,只需要在按钮控件的onclick方法中设置执行的代码即可,例如:?phpecho;?6.3.2 使用使用HTML标记标记使用HTML实现页面跳转的另外一种方法是使用标记,实例代码如下:说明:以上代码的作用是5秒之后跳转到index.php页面。content属性中数字5表示5s之后跳转,设置为0则表示立即跳转,url选项可以指定要跳转到的页面。如果要刷新本页面,则可以省略url选项,代码如下:6.3.3 使用客户端脚本使用客户端脚本在PHP中还可以使用客户端脚本实现页面的跳转,例如,在PHP中使用JavaScript跳转到index.php页面的代码如下:?phpecho if(confirm(确认跳转页面?);echo window.location=index.php;/上面一句也可写做echo location.href=index.php;?6.4 会话管理会话管理u6.4.1 会话的工作原理会话的工作原理PHP的会话也称为Session。PHP在操作Session时,在用户登录或访问一些初始页面时服务器会为客户端分配一个SessionID。SessionID是一个加密的随机数字,在Session的生命周期中保存在客户端。它可以保存在用户机器的Cookie中,也可以通过URL在网络中进行传输。用户通过SessionID可以注册一些特殊的变量,称为会话变量,这些变量的数据保存在服务器端。在一次特定的网站连接中,如果客户端可以通过Cookie或URL找到SessionID,那么服务器就可以根据客户端传来的SessionID访问会话保存在服务器端的会话变量。Session的生命周期只在一次特定的网站连接中有效,当关闭浏览器后,Session会自动失效,之前注册的会话变量也不能再使用。6.4.2 实现会话实现会话1.初始化会话初始化会话在实现会话功能之前必须要初始化会话,初始化会话使用session_start()函数,语法格式如下:bool session_start(void)该函数将检查SessionID是否存在,如果不存在则创建一个,并且能够使用预定义数组$_SESSION进行访问。如果启动会话成功则函数返回TRUE,否则返回FALSE。会话启动后就可以载入该会话已经注册的会话变量以便使用。2.注册会话变量注册会话变量自PHP 4.1以后,会话变量保存在预定义数组$_SESSION中,所以可以以直接定义数组单元的方式来定义一个会话变量,格式如下:$_SESSION键名=值;6.4.2 实现会话实现会话定义后该会话变量保存为$_SESSION数组的一个单元,例如:以上代码运行后,定义的会话变量在$_SESSION数组中的键名为“name”,值为“david”。会话变量定义后被记录在服务器中,并对该变量的值进行跟踪,直到会话结束或手动注销该变量。在PHP 4.1以前,还可以使用session_register()函数来注册会话变量,语法格式如下:bool session_register(mixed$name,mixed$.)6.4.2 实现会话实现会话3.访问会话变量访问会话变量要在一个脚本中访问会话变量,首先要使用session_start()函数启动一个会话。之后就可以使用$_SESSION数组访问该变量了。例如:6.4.2 实现会话实现会话4.销毁会话变量销毁会话变量会话变量使用完后,删除已经注册的会话变量以减少对服务器资源的占用。删除会话变量使用unset()函数,语法格式如下:void unset(mixed$var,mixed$var,$.)说明:$var是要销毁的变量,可以销毁一个或多个变量。例如:要一次销毁所有的会话变量,可以使用以下语句:session_unset();6.4.2 实现会话实现会话5.销毁会话销毁会话使用完一个会话后,要注销所有的会话变量,然后再调用session_destroy()函数销毁会话,语法格式如下:bool session_destroy(void)该函数将删除会话的所有数据并清除SessionID,关闭该会话。例如:【例6.2】创建一个用户登录页面,设定的用户名和密码分别为administrator和123456。表单提交到本页面,当用户名和密码输入正确时,启动Session,将用户名和密码值传到用户管理员页面。如果不先登录而访问用户管理员页面则提示无权访问。新建EX6_2_1.php文件,输入以下代码。6.4.2 实现会话实现会话新建EX6_2_2.php文件,输入以下代码:6.4.2 实现会话实现会话运行EX6_2_1.php文件,在页面中输入用户名和密码,如图6.3所示。单击【登录】按钮,结果如图6.4所示。图6.3 用户登录界面 图6.4 管理员界面6.4.3 在在PHP中实现中实现Cookie值得注意的是,Cookie技术有很多局限性,例如:多人共用一台计算机,Cookie数据容易泄露;一个站点存储的Cookie信息有限;有些浏览器不支持Cookie;用户可以通过设置浏览器选项来禁用Cookie。正是由于以上Cookie的一些局限性,所以在进行会话管理时,SessionID通常会选择Cookie和URL两种方式来保存,而不是只保存在Cookie中。6.4.3 在在PHP中实现中实现Cookie1.创建创建Cookie在PHP中创建Cookie使用setcookie()函数,语法格式如下:bool setcookie(string$name,string$value,int$expire,string$path,string$domain,bool$secure,bool$httponly)本函数的参数如下:$name。表示Cookie的名字。$value。表示Cookie的值,该值保存在客户端,所以不要保存比较敏感的数据。$expire。表示Cookie过期的时间,这是一个UNIX时间戳,即从UNIX纪元开始的秒数。对于$expire的设置一般通过当前时间戳加上相应的秒数来决定。例如,time()+1200表示Cookie将在20分钟后失效。如果不设置则Cookie将在浏览器关闭之后失效。$path。表示Cookie在服务器上的有效路径。默认值为设定Cookie的当前目录。$domain。表示Cookie在服务器上的有效域名。例如,要使Cookie能在域名下的所有子域都有效,该参数应设为。6.4.3 在在PHP中实现中实现Cookie$secure。表示Cookie是否仅允许通过安全的HTTPS协议传输。取值为1或0,当设成1时Cookie仅允许通过HTTPS传输,设成0表示允许通过普通HTTP协议传输。默认值为0。例如:6.4.3 在在PHP中实现中实现Cookie2.访问访问Cookie通过setcookie()函数创建的Cookie是作为数组的单元,存放在预定义变量$_COOKIE中的。也就是说,直接对$_COOKIE数组单元进行赋值也可以创建Cookie。但$_COOKIE数组创建的Cookie在会话结束后就会失效。例如:王林 number=081101)?访问Cookie的方法与Session类似,例如:6.4.3 在在PHP中实现中实现Cookie3.删除删除CookieCookie在创建时指定了一个过期时间,如果到了过期时间,Cookie将自动被删除。在PHP中没有专门的删除Cookie的函数。如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,可以使用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。例如:)?【例6.3】制作一个登录表单,将表单的值保存在Cookie中,并可以选择Cookie的有效时间。新建EX6_3_1.php文件,输入以下代码。6.4.3 在在PHP中实现中实现Cookie新建EX6_3_2.php文件,输入以下代码:6.4.3 在在PHP中实现中实现Cookie运行EX6_3_1.php文件,输入用户名administrator,密码123456,Cookie选择保存1天,如图6.5所示。单击【登录】按钮,结果如图6.6所示。图6.5 管理员登录,保存Cookie图6.6 管理员页面6.5 实例实例制作一个制作一个PHP互动网页互动网页【例6.4】制作一个智能问答系统,系统根据存储于文本文件中的用户信息判断用户是否是合法登录。用户登录后可以进行智力问答,回答完后系统会计算其所得分数。在Practice文件夹下新建一个EX6_4_info.txt文本文件,在其中保存用户的信息,有用户名、密码两个信息,中间用“|”隔开,如输入如下几行数据:user1|123456user2|654321user3|1111116.5 实例实例制作一个制作一个PHP互动网页互动网页新建EX6_4_login.php文件(登录页面),输入以下代码:用户名密码新建EX6_4_main.php文件(主页面),输入以下代码。新建EX6_4_QA.php文件(答题页面),输入以下代码。6.5 实例实例制作一个制作一个PHP互动网页互动网页运行EX6_4_login.php文件,输入用户名user1,密码123456,如图6.7所示,单击【登录】按钮,进入主页面,如图6.8所示。图6.7 用户登录界面 图6.8 主页面6.5 实例实例制作一个制作一个PHP互动网页互动网页单击【开始答题】按钮,进入答题页面,如图6.9所示。图6.9 答题页面6.5 实例实例制作一个制作一个PHP互动网页互动网页在答题页面上进行答题,答完后单击【提交】按钮,系统会计算所得分数,如图6.10所示。单击【确定】按钮后会弹出“继续答题”确认对话框,如图6.11所示。单击【确定】按钮则继续答题,单击【取消】按钮则返回主页面,在主页面中会有相应提示,如图6.12所示。图6.11 “继续答题”确认对话框图6.10 计算得分图6.12 返回主页面
展开阅读全文