在页面之间传送变量有四种方式:在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 后面的语句中少了一个 } 。     

真是得处处小心,出现问题了,首先耐心排查代码,而不是到处发求助信。