资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,7,章 构建,PHP,互动网页,7.1 PHP,与表单,7.2 URL,处理,7.3,页 面 跳 转,7.4,会 话 管 理,7.5,实例,制作一个,PHP,互动网页,7.1 PHP,与表单,7.1.1,提交表单数据,表单数据的提交方法主要分为两种:,POST,方法和,GET,方法。,POST,方法是在,HTTP,请求中嵌入表单数据;,GET,方法则将表单数据附加到请求该页的,URL,中。提交表单时要将表单标记,的属性,method,设为,post,或,get,,,post,表示使用,POST,方法提交,,get,表示使用,GET,方法提交。属性,action,指定数据提交到的,URL,地址,提交后页面将跳转到这个地址。而用户输入的数据也将提交到该地址。例如:,7.1.2,接收表单数据,提交表单数据后就可以在目标页面接收用户输入的数据了。接收表单数据可以使用,$_POST,、,$_GET,和,$_REQUEST,来完成。,$_POST,用于接收,POST,方法传来的值,,$_GET,用于接收,GET,方法传来的值,,$_REQUEST,可以取得包括,POST,、,GET,和,Cookie,在内的外部变量。,表单中可以包含很多的控件,如文本框、单选按钮、复选框、文件域、滚动文本框、按钮等。接收表单数据即指获取表单控件的,value,属性的值。不同的控件可以设置不同的,name,属性,在接收数据时根据,name,属性确定是哪个控件的值。不同的控件设置,value,属性的方式也不一样。例如,单选按钮可能由多个选项组成,这些选项的,name,属性值都相同时表示这些选项属于同一个表单控件,每个选项都有一个,value,值,接收控件的值后可以根据这个,value,值判断用户选择了哪个选项。,7.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-.+$,”。,7.1.4,实例,使用,PHP,处理表单数据,【,例,7.1】,制作一个学生信息表单,包含学生学号、姓名、性别、出生日期、所学专业、备注、兴趣爱好等信息。要求学号必须为,6,位数字,出生日期必须符合日期格式,学号和姓名不允许为空。表单数据以,GET,方法提交到另一个页面,在另一个页面判断表单数据的正确性并输出。,新建,EX7_1_Hpage.php,文件,,输入代码。,再新建,EX7_1_Ppage.php,文件,,输入代码。,7.1.4,实例,使用,PHP,处理表单数据,运行,EX7_1_Hpage.php,文件,如图,7.1,所示。,7.1.4,实例,使用,PHP,处理表单数据,在表单中输入学生信息,然后单击,【,提交,】,按钮验证输入的信息。运行结果示例如图,7.2,所示。,7.2 URL,处理,7.2.1,获取,URL,参数,URL,通常的格式为:“,url?,参数,1=,值,1&,参数,2=,值,2&,参数,3=,值,3,”。,在页面中使用“,$_GET,参数,”即可获得具体参数的值,例如:,单击,7.2.2,解析,URL,在,PHP,中可以使用,parse_url(),函数解析一个,URL,,语法格式如下:,mixed parse_url(string$url,int$component=-1 ),说明:,$url,为要解析的,URL,地址字符串。本函数不是用于解析,URL,的合法性,不完整的,URL,也可接受。除了对于严重不合格的,URL,,该函数将返回,FALSE,并发出警告外,如果省略了,component,参数,函数将返回一个关联数组,包含,URL,中出现的各个组成部分。其组成部分为(至少有一个):,scheme,。如,http,。,host,。如,。,port,。端口号。,user,。用户名。,pass,。密码。,path,。路径。,query,。在问号“,?,”之后的内容。,fragment,。在散列符号,#,之后的内容。,7.2.2,解析,URL,例如:,http host=user=username,pass=password path=/index.php query=arg=value,fragment=anchor),*/,?,7.2.2,解析,URL,PHP 5.1.2,增加了参数,component,,它指定,PHP_URL_SCHEME,、,PHP_URL_HOST,、,PHP_URL_PORT,、,PHP_URL_USER,、,PHP_URL_PASS,、,PHP_URL_PATH,、,PHP_URL_QUERY,或,PHP_URL_FRAGMENT,的其中一个来获取,URL,中指定部分的,string,(除了指定为,PHP_URL_PORT,后,将返回一个,integer,的值)。例如:,输出结果:,/path,。,7.2.3 URL,编解码,在,PHP,中对,URL,编码使用,urlencode(),函数,语法格式如下:,string urlencode(string$str),说明:,$str,为要编码的字符串,该函数返回一个编码后的字符串。例如:,URL,编码后需要使用,urldecode(),函数进行解码,语法格式如下:,string urldecode(string$str),该函数将对字符串,$str,中所有以百分号“,%,”开头后跟,2,位十六进制数的,3,位字符串进行解码,并返回解码后的字符串。例如:,7.3,页 面 跳 转,7.3.1,使用,header(),函数,在,5.1.5,节曾介绍过,header(),函数的作用,其中一个作用就是页面跳转,只要在,header(),函数的参数中使用“,Location:xxx,”即可实现该功能。例如:,7.3.2,使用,HTML,标记,最常用的跳转页面的方法是提交表单,将,标记的,action,属性设置为要跳转到的页面,提交表单后就跳转到该页面。例如:,使用,HTML,的超链接标记,也能够实现跳转页面的功能,例如:,7.3.2,使用,HTML,标记,使用按钮也可以进行页面跳转,只需要在按钮控件的,onclick,方法中设置执行的代码即可,例如:,?php,echo;,?,使用,HTML,实现页面跳转的另外一种方法是使用,标记,实例代码如下:,说明:,以上代码的作用是,5s,之后跳转到,index.php,页面。,content,属性中数字,5,表示,5s,之后跳转,设置为,0,则表示立即跳转,,url,选项可以指定要跳转到的页面。如果要刷新本页面,则可以省略,url,选项,代码如下:,7.3.3,使用客户端脚本,在,PHP,中还可以使用客户端脚本实现页面的跳转,例如,在,PHP,中使用,JavaScript,跳转到,index.php,页面的代码如下:,7.4,会 话 管 理,7.4.1,会话的工作原理,PHP,的会话也称为,Session,。,PHP,在操作,Session,时,在用户登录或访问一些初始页面时服务器会为客户端分配一个,SessionID,。,SessionID,是一个加密的随机数字,在,Session,的生命周期中保存在客户端。它可以保存在用户机器的,Cookie,中,也可以通过,URL,在网络中进行传输。,用户通过,SessionID,可以注册一些特殊的变量,称为会话变量,这些变量的数据保存在服务器端。在一次特定的网站连接中,如果客户端可以通过,Cookie,或,URL,找到,SessionID,,那么服务器就可以根据客户端传来的,SessionID,访问会话保存在服务器端的会话变量。,7.4.2,实现会话,1,初始化会话,在实现会话功能之前必须初始化会话,初始化会话使用,session_start(),函数,语法格式如下:,bool session_start(void),该函数将检查,SessionID,是否存在,如果不存在则创建一个,并且能够使用预定义数组,$_SESSION,进行访问。如果启动会话成功则函数返回,TRUE,,否则返回,FALSE,。会话启动后就可以载入该会话已经注册的会话变量以便使用。,7.4.2,实现会话,2,注册会话变量,自,PHP 4.1,以后,会话变量保存在预定义数组,$_SESSION,中,所以可以以直接定义数组单元的方式来定义一个会话变量,格式如下:,$_SESSION,键名,=,值,;,定义后该会话变量保存为,$_SESSION,数组的一个单元,例如:,7.4.2,实现会话,3,访问会话变量,要在一个脚本中访问会话变量,首先要使用,session_start(),函数启动一个会话。之后就可以使用,$_SESSION,数组访问该变量了。例如:,7.4.2,实现会话,4,销毁会话变量,会话变量使用完后,删除已经注册的会话变量以减少对服务器资源的占用。删除会话变量使用,unset(),函数,语法格式如下:,void unset(mixed$var,mixed$var,$.),说明:,$var,是要销毁的变量,可以销毁一个或多个变量。例如:,要一次销毁所有的会话变量,可以使用以下语句:,session_unset();,7.4.2,实现会话,5,销毁会话,使用完一个会话后,要注销所有的会话变量,然后再调用,session_destroy(),函数销毁会话,语法格式如下:,bool session_destroy(void),该函数将删除会话的所有数据并清除,SessionID,,关闭该会话。例如:,7.4.2,实现会话,【,例,7.2】,创建一个用户登录页面,设定的用户名和密码分别为,administrator,和,123456,。表单提交到本页面,当用户名和密码输入正确时,启动,Session,,将用户名和密码值传到用户管理员页面。如果不先登录而访问用户管理员页面则提示无权访问。,新建,EX7_2_1.php,文件,,输入代码。,新建,EX7_2_2.php,文件,输入以下代码:,7.4.2,实现会话,运行,EX7_2_1.php,文件,在页面中输入用户名和密码,如图,7.3,所示。单击,【,登录,】,按钮,结果如图,7.4,所示。,图,7.3,用户登录界面,图,7.4,管理员界面,7.4.3 Cookie,技术,值得注意的是,,Cookie,技术有很多局限性,例如:,多人共用一台计算机,,Cookie,数据容易泄露;,一个站点存储的,Cookie,信息有限;,有些浏览器不支持,Cookie,;,用户可以通过设置浏览器选项来禁用,Cookie,。,7.4.3 Cookie,技术,1,创建,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,分钟后失效,。,$path,。表示,Cookie,在服务器上的有效路径。默认值为设定,Cookie,的当前目录。,$domain,。表示,Cookie,在服务器上的有效域名。例如,要使,Cookie,能在,域名下的所有子域都有效,该参数应设为,。,$secure,。表示,Cookie,是否仅允许通过安全的,HTTPS,协议传输。取值为,1,或,0,,当设成,1,时,Cookie,仅允许通过,HTTPS,传输,设成,0,表示允许通过普通,HTTP,协议传输。默认值为,0,。,7.4.3 Cookie,技术,例如:,7.4.3 Cookie,技术,2,访问,Cookie,通过,setcookie(),函数创建的,Cookie,是作为数组的单元,存放在预定义变量,$_COOKIE,中的。也就是说,直接对,$_COOKIE,数组单元进行赋值也可以创建,Cookie,。但,$_COOKIE,数组创建的,Cookie,在会话结束后就会失效。例如:,123456 bdshare_firstime=1398408989078 number=081101),?,访问,Cookie,的方法与,Session,类似,例如:,7.4.3 Cookie,技术,3,删除,Cookie,Cookie,在创建时指定了一个过期时间,如果到了过期时间,,Cookie,将自动被删除。在,PHP,中没有专门删除,Cookie,的函数。如果为了安全方面的考虑,在,Cookie,过期之前就想删除,Cookie,,可以使用,setcookie(),函数或,$_COOKIE,数组将已知,Cookie,的值设为空。例如:,123456 bdshare_firstime=1398408989078 user=),?,7.4.3 Cookie,技术,【,例,7.3】,制作一个登录表单,将表单的值保存在,Cookie,中,并可以选择,Cookie,的有效时间。,新建,EX7_3_1.php,文件,,输入代码。,新建,EX7_3_2.php,文件,输入以下代码:,7.4.3 Cookie,技术,运行,EX7_3_1.php,文件,输入用户名,administrator,,密码,123456,,,Cookie,选择保存,1,天,如图,7.5,所示。单击,【,登录,】,按钮,结果如图,7.6,所示。,7.5,实例,制作一个,PHP,互动网页,【,例,7.4】,制作一个智能问答系统,系统根据存储于文本文件中的用户信息判断用户是否是合法登录。用户登录后可以进行智力问答,回答完后系统会计算其所得分数。,在,Practice,文件夹下新建一个,EX7_4_info.txt,文本文件,在其中保存用户的信息,有用户名、密码两个信息,中间用“,|,”隔开,如输入如下几行数据:,user1|123456,user2|654321,user3|111111,新建,EX7_4_login.php,文件(登录页面),,输入代码。,新建,EX7_4_main.php,文件(主页面),,输入代码。,新建,EX7_4_QA.php,文件(答题页面),,输入代码。,7.5,实例,制作一个,PHP,互动网页,运行,EX7_4_login.php,文件,输入用户名,user1,,密码,123456,,如图,7.7,所示。,7.5,实例,制作一个,PHP,互动网页,单击,【,登录,】,按钮,进入主页面,如图,7.8,所示。,7.5,实例,制作一个,PHP,互动网页,单击,【,开始答题,】,按钮,进入答题页面,如图,7.9,所示。,7.5,实例,制作一个,PHP,互动网页,在答题页面上进行答题,答完后单击,【,提交,】,按钮,系统会计算所得分数,如图,7.10,所示。单击,【,确定,】,按钮后会弹出“继续答题”确认对话框,如图,7.11,所示。,7.5,实例,制作一个,PHP,互动网页,单击,【,确定,】,按钮则继续答题,单击,【,取消,】,按钮则返回主页面,在主页面中会有相应提示,如图,7.12,所示。,
展开阅读全文