在页面之间传送变量有四种方式:在URL中传送变量,通过会话传送,通过cookie传送,使用HTML窗体传送。
实际使用中应根据具体情况,选择最合适的方法。
1. 通过URL传送变量
在页面之间传送变量的第一种方法是使用页面的URL。如:
http://www.myart.com/paint/fresco.php?id=12345
请求为fresco.php程序选择ID号为12345的文件。
通过URL传送变量有几个缺点:
用户可以看到变量的值,用这种方法传送敏感数据不安全;
用户可以随意修改URL中的变量值,并可以尝试不同的组合,可能会使网页显示用户未被授权的内容,造成信息泄露等。
实验:
用这种方式传送的变量可以通过特定的数组$_GET来访问。
(1) 修改上一节的程序moviesite.php,删掉原来定义常量的一行代码,并修改如下高光显示行:
(2) 新建movie1.php
(3)在浏览器中打开该文件,http://192.168.182.128/movie1.php,但是浏览器报HTTP Error 500错误。
在php的安装目录中/etc/找到php.ini文件,在其中找到display_errors,默认情况下是display_errors = Off,把Off修改为On,保存关闭文件,然后重启apache。
再次访问页面,PHP会在页面上把错误信息显示出来。
原来是语法错误,认为从moviesite开始是无效的,判断是因为双引号导致。
修改代码,加上转义字符后OK。
点击该链接:
2. 在会话中传送变量
会话基本是仅存在于浏览器关闭之前的一组临时变量。会话信息包含会话ID、被授权的个人是否登录到站点上等。这些信息都是为PHP程序临时存储的,以便在需要时使用。
每个会话都指定了一个唯一的会话ID。会话ID可以通过URL传送,也可以使用cookie来传送,通过cookie传送比较安全,因为cookie不可见。但如果不支持cookie,备选方法就是使用URL。
在使用会话前,需检查一下php.ini文件,session.save_path所指的路径是否为存在的目录。
session.save_path = "/tmp"
接着,只需调用session_start()函数,在PHP中开始一个会话。
实验:传送用户名
(1)修改movie1.php文件,增加如下高亮显示内容。
(2)修改moviesite.php文件,进行如下修改:
(3)访问http://192.168.182.128/movie1.php
单击该链接,显示:
说明:
所有的PHP会话信息都在页面的最顶部,在HTML代码之前。
在给浏览器发送任何输出,使用任何会话变量之前,必须使用函数session_start()。最好把session_start()放在脚本的开头。
3.用cookie传送变量
Cookie 是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。
与会话相比,在cookie中存储信息的优点是持久性。会话存储信息在浏览器关闭时就全部丢失了,而cookie可以在客户机上保存很长时间,这个时间可以由开发人员来指定。
要设置cookie,可以使用setcookie()函数。
setcookie(name,value,expire,path,domain,secure)
实验:
(1)修改movie1.php文件:
(2)修改moviesite.php:
(3)关闭浏览器窗口(以防使用了上面的实验中的会话),重新打开窗口,访问http://192.168.182.128/movie1.php,在打开的页面中点击链接,可以看到:
4.用窗体传送信息
前面的三种方法,每次都需要网站创建者提供全部用户信息,当需要用户提供信息时,使用窗体就更方便了。
窗体使网站真正成为交互式的网站,可以获取用户信息,并把这些信息发送到某个地方,以进行显示、处理和存储等,最后再把结果发送回用户。
窗体在HTML中编码,并保存在HTML中。窗体由四个部分组成:
- 开标记行:用<form>表示。这个标记行必须包含action属性和method属性。
action 属性给窗体提供另一个程序的URL或路径,使该程序可以从窗体中提取并取出数据。
method属性(GET或POST)告诉窗体如何取走数据(一般用POST)
- 窗体的内容,包括输入字段:用户输入信息的区域。必须包含type和name属性,还可以包含其他属性,如maxlength。
- 动作按钮或图像,一般用于提交/清理信息,用户定义的按钮在技术上也认为是输入类型。
- 闭标记行:用</form>表示。
实验步骤:
(1)修改movie1.php文件:
(2)修改moviesite.php文件:
(3)新建login.php文件:
(4)浏览器 打开这个login.php页面:
(5)输入用户名:Joe,密码:123456,点击“Submit”。进入如下页面:
(6)点击链接,又打开如下页面:
遇到问题:
刚开始完成文件的编辑,进行到步骤(5)时,点击提交后,页面显示: Parse error: syntax error, unexpected end of file in ...
后面是movie1.php,意思是movie1.php文件最后一行解析错误。回头检查了好几遍之后,才发现在else 后面的语句中少了一个 } 。
真是得处处小心,出现问题了,首先耐心排查代码,而不是到处发求助信。