PHP与Web页面交互

一个Web表单通常由表单标签和各种表单元素组成

表单标签

<form name="form_name" 
method="post/get" action="url" enctype="value" target="_self">
 //省略插入的表单元素
</form>

<form>标签的属性:

  • name:表单的名称,用户可以自己定义表单的名称
  • method:表单提交方式,表单提交的方式有两种:POST 和 GET

    1、POST方式可以没有限制地传递数据到服务器端,所有信息都是在后台传输的,用户在浏览器中看不到这一过程,安全性高。另外POST方式不会将信息附加在URL后,不会显示在地址栏。所以POST方式比较适合发送一些保密或容量较大的数据到服务器。

    2、GET方式为表单提交的默认方式。使用GET方式提交表单数据时,数据被附加到URL后,并作为URL的一部分发送到服务器。因此,在浏览器地址栏中能够看到用户提交的信息,在地址栏中会显示“URL?用户传递的参数列表”。

GET方式传递的参数格式如下:
http://url?para1=value1&para2=value2&para3=value3……
其中URL为表单响应的地址(如127.0.0.1/get.php),para1为表单元素的名称,value1为表单元素的值。URL和第一个表单元素名之间用“?”隔开,而多对表单元素名及其值之间用“&”隔开,每对表单元素的格式都以“paran=valuen”形式固定不变。

  • action:指定处理该表单页面的URL,通常为具有数据处理能力的Web程序,如后缀为.php,.asp或者.jsp等的动态网页。
  • enctype:设置表单内容的编码方式,主要有三种值。设置为”text/plain”会将空格转换为”+”加号,但不对特殊字符编码。设置为”multipart/form-data”将不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。设置为”application/x-www-form-* urlencoded”会在发送前编码所有字符(默认)。
  • target:设置返回信息的显示方式,主要有四种值。设置为”_blank”表示在新的窗口中显示;设置为”_parent”表示在父级窗口中显示;设置为”_self”表示在当前窗口中显示;设置为”_top”表示在顶级窗口中显示。

表单元素

一个表单(form)通常包含很多表单元素。常用的表单元素有以下几种标签:输入域标签<input>、选择域标签<select><option>、文本域标签<textarea>等。

  • 输入域标签<input>
    常用包括文本框、密码框、按钮、单选按钮和复选按钮等
    例如:<input name="element_name" type=" type_name">
    参数name是指输入域的名称,参数type是指输入域的类型。在<input type=" ">标签中一共提供了10种类型的输入域,用户所选择使用的类型由type属性决定。type属性取值有:

    描述
    button 定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)。
    checkbox 定义复选框。
    file 定义输入字段和 “浏览”按钮,供文件上传。
    hidden 定义隐藏的输入字段。
    image 定义图像形式的提交按钮。
    password 定义密码字段。该字段中的字符被掩码。
    radio 定义单选按钮。
    reset 定义重置按钮。重置按钮会清除表单中的所有数据。
    submit 定义提交按钮。提交按钮会把表单数据发送到服务器。
    text 定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符。
  • 选择域标签<select><option>用来建立一个列表或者菜单。
    菜单可以节省空间,正常状态下只能看到一个选项,单击右侧的下三角按钮打开菜单才能看到全部的选项,菜单只能选择一项。列表可以显示一定数量的选项,如果超出了这个数量,会自动出现滚动条,浏览者可以通过拖到滚动条来查看各选项。语法格式如下:

    <select name="select_name" size="int_num" multiple>
    <option value="value1">选项1</option>
    <option value="value2">选项2</option>
    <option value="value3">选项3</option>
    …
    </select> 

    参数name表示选择域的名称;参数size表示列表的行数;参数value表示菜单选项值;参数multiple表示以列表方式显示数据,省略则以菜单方式显示数据。
    选择域标签<select><option>的显示方式如图:

  • 文本域标签<textarea>用来制作多行文本框,可以在其中输入多行文本。语法格式如下:

    <textarea name="textarea_name" cols="20" rows="6" wrap="value">
    .............文本内容!
    </textarea>

    参数name表示文本域的名称;rows表示文本域的行数;cols表示文本域的列数(rows和cols都以字符为单位);wrap用于设定文本的换行方式,值为”off”表示不自动换行。值为hard表示自动硬回车换行,换行标记一同被发送到服务器,输出时也会换行。值为soft表示自动软件换行,换行标记不会被发送到服务器,输出时仍然为一列。

表单参数值获取方式

PHP获取参数值的方式有三种:$_POST[]、$_GET[]和$_SESSION[],分别用于获取表单、URL和Session变量的值。下面分别讲述这三种获取参数值的方式。

  • $_POST[] 全局变量
    使用PHP的$_POST[]预定义变量可以获取表单元素的值,格式为:$_POST["element_name"]
    此时需要将表单的提交方式属性method设置为POST,例如要获取文本框”user”的值。
    <?php $user=$_POST["user"]; ?>
  • $_GET[]全局变量
    使用PHP的$_GET[]预定义变量也可以获取表单元素的值,格式为:$_GET["element_name"]
    此时需要将表单的提交方式属性method设置为GET,例如要获取文本框”user”的值可以使用代码: <?php $user=$_GET["user"]; ?>
    另外对于非表单提交过来的数据,比如直接通过超链接附加过来的数据也可以使用$_GET[]的方式获取。例如:<a href="doget.php?user=aaa&pass=123">超链接传递参数</a>
    也就是说只要出现在浏览器地址栏中的参数都可以用$_GET[]的方式获取,不管这些数据是来自表单还是来自普通超链接。

    注意:$_POST[]和$_GET[]全局变量都可以获取表单元素的值,但获取的表单元素名称是区分大小写的

  • $_SESSION[]变量
    使用$_SESSION[]变量可以获取表单元素的值,格式: $_SESSION["element_name"]
    例如要获取文本框”user”的值可以使用下面代码。<?php $user=$_SESSION["user"]; ?>
    使用$_SESSION[]变量获取的变量值,保存之后任何页面都可以使用。但这种方法很占用系统资源,建议慎重使用。

在PHP中获取表单数据

  • 获取文本框、密码框、隐藏域、按钮和文本域的值
    获取表单数据,实际上就是获取不同表单元素的值。在获取表单元素值时需要使用name属性来获取相应的value属性值。所以表单中添加的所有表单元素必须定义对应的name属性值,而且name属性值最好是具有一定意义的字符串,这个字符串可以由英文字母和数字组合。另外表单元素在命名上尽可能不要重复,以免获取的表单元素值出错。

    在Web程序开发中,获取文本框、密码框、隐藏域、按钮以及文本域的值的方法是相同的,都是使用name属性来获取相应的value属性值。下面仅以获取文本框中的值为例。

<form id="form1" name="form1" method="post" action="biaodan1.php">
用户名:<input name="user" type="text" id="user" value="James" size="12" />
密&nbsp;&nbsp;码:<input name="pass" type="password" id="pass" value="123456" size="12" />
<input name="tj_btn" type="submit" id="tj_btn" value="提交" />
</form>
<?php
if($_POST["tj_btn"]=="提交"){
  echo "您的用户名是:".$_POST["user"];
  echo "&nbsp;&nbsp;您的密码是:".$_POST["pass"];
}
  • 获取单选按钮的值
    radio(单选按钮)一般是成组出现的,具有相同的name值和不同的value值,在一组单选按钮中,同一时间只能有一个被选中。例如,下面是一个只有一组单选按钮和提交按钮的表单,代码如下:
<form id="form1" name="form1" method="post" action="biaodan2.php">
<input name="sex" type="radio" id="radio" value="男" checked="checked" />男
<input name="sex" type="radio" id="radio2" value="女" />女
<input name="tj_btn" type="submit" id="tj_btn" value="提交" />
</form>
<?php
if($_POST["tj_btn"]=="提交"){
  echo "您的选择的性别是:".$_POST["sex"];
}
?>
  • 获取复选框的值
    复选框能够进行项目的多项选择。复选框一般都是多个同时存在的,为了便于传值,name的名字可以是一个数组的形式,格式为:<input type="checkbox" name="like[]" value="上网"/>
    在返回页面可以使用count()函数计算数组的大小,结合for循环语句即可输出选择的复选框的值。例如,下面是一个只有一组复选框和提交按钮的表单,代码如下:
<form id="form1" name="form1" method="post" action="biaodan3.php">
兴趣爱好:
<input name="like[]" type="checkbox" id="like" value="上网" checked="checked" />上网
<input name="like[]" type="checkbox" id="like" value="看书" checked="checked" />看书
<input name="like[]" type="checkbox" id="like" value="玩游戏" />玩游戏
<input name="tj_btn" type="submit" id="tj_btn" value="提交" />
</form>
<?php
if($_POST["tj_btn"]=="提交"){  
  echo "您的兴趣爱好是:";
  for($i=0;$i<count($_POST[like]);$i++){
    echo $_POST[like][$i]."&nbsp;&nbsp;";
  }
}
?>

  • 获取下拉菜单框和列表菜单框的值
    列表框有下拉菜单框和列表菜单框两种形式,其基本语法是一样的。

    (1)下拉菜单框值的获取
    下拉菜单框值的获取非常简单,与获取文本框的值一样,首先需要定义下拉菜单框的name属性值,然后应用$_POST[]全局变量进行获取即可。

    (2)列表菜单框值的获取
    由于列表菜单框允许选择多个菜单项,为了便于传值,<select>标签的命名通常采用数组形式,在返回页面可以使用count()函数计算数组的大小,结合for循环语句即可输出选择的菜单项的值。例如,下面是一个只有一个列表菜单框和提交按钮的表单,代码如下:

<form id="form1" name="form1" method="post" action="biaodan5.php">
您喜欢的课程:
<select name="course[]" id="course[]" size="4" multiple>
  <option value="网络编程">网络编程</option>
  <option value="网页设计">网页设计</option>
  <option value="java程序设计">java程序设计</option>
  <option value="c程序设计">c程序设计</option>
</select>
<input name="tj_btn" type="submit" id="tj_btn" value="提交" />
</form>
<?php if($_POST["tj_btn"]=="提交"){ echo "您喜欢的课程是:"; for($i=0;$i<count($_POST[course]);$i++){ echo $_POST[course][$i]."&nbsp;&nbsp;"; } } ?>

  • 获取文件域的值
    文件域的作用是实现文件的上传。文件域值的获取同获取文本框的值一样,首先需要定义下拉菜单框的name属性值,然后应用$_POST[]全局变量进行获取。

Cookie管理

Cookie的中文意思是甜饼。Cookie其实就是一小段信息,它可以由脚本在客户端机器上保存。从本质上讲,它是客户的身份证。它不能作为代码执行,也不会传递病毒。简单地说,Cookie是Web服务器暂时存储在用户硬盘上的一个文本文件,并随后被Web浏览器读取。Web服务器可以利用Cookie来保存和维护很多与网站有关的信息。Cookie常用于3个方面:

  1. 记录访客的某些信息。如可以利用Cookie记录用户访问网页的次数,或者记录访客曾经输入过的信息,另外,某些网站可以使用Cookie自动记录访客上次登陆的用户名和密码等信息。
  2. 在网页直接传递变量。浏览器并不会保存当前页面上的任何信息,当页面被关闭时页面上的所有变量信息将随之消失。而通过Cookie可以把需要在页面间传递的变量先保存起来,然后到另一个页面再读取即可。
  3. 将所存储的Internet页存储在Cookie临时文件夹中,可以提高以后浏览的速度。

创建Cookie

在PHP中通过setcookie()函数创建Cookie。在创建Cookie之前必须了解的是,Cookie是HTTP头标的组成部分,而头标必须在页面其他内容之前发送,它必须最先输出。这需要将函数的调用放到任何输出之前,包括<html><head>标签以及任何空格。如果在调用setcookie()函数之前有任何输出,本函数将失败并返回False,如果setcookie()函数成功运行,将返回True。setcookie()函数的语法格式如下:
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false]]]]] )

参数 描述
name 必需。规定 cookie 的名称。
value 必需。规定 cookie 的值。
expire 可选。规定 cookie 的过期时间。time()+3600*24*30 将设置 cookie 的过期时间为 30 天。如果这个参数没有设置,那么 cookie 将在 session 结束后(即浏览器关闭时)自动失效。
path 可选。规定 cookie 的服务器路径。如果路径设置为 “/”,那么 cookie 将在整个域名内有效.如果路径设置为 “/test/”,那么 cookie 将在 test 目录下及其所有子目录下有效。默认的路径值是 cookie 所处的当前目录。
domain 可选。规定 cookie 的域名。为了让 cookie 在 example.com 的所有子域名中有效,您需要把 cookie 的域名设置为 “.example.com”。当您把 cookie 的域名设置为 www.example.com 时,cookie 仅在 www 子域名中有效。
secure 可选。规定是否需要在安全的 HTTPS 连接来传输 cookie。如果 cookie 需要在安全的 HTTPS 连接下传输,则设置为 TRUE。默认是 FALSE。
<?php
$value = 'I like php';
$value1= 'I hate php';
setcookie("myCookie1", $value);               //本网页关闭后该Cookie就过期
setcookie("myCookie2", $value,time()+60);      //1分钟候后过期
setcookie("myCookie3", $value1,time()+3600);   //1小时候后过期
?>
#运行本实例,在Cookie文件夹下会自动生成3个有效期不同的Cookie文件,
#在Cookie失效后,Cookie文件会自动删除。

读取Cookie

在PHP中可以直接通过超级全局数组$_COOKIE[]来读取浏览器端的Cookie值。

<?php
// 输出单独的 Cookie
echo $_COOKIE["myCookie2"] . "<br>";
//另一个调试的方法就是输出所有的 Cookie
print_r($_COOKIE);
?>

删除Cookie

当Cookie被创建后,如果没有设置它的失效时间,其Cookie文件会在关闭浏览器时自动删除。如果要在关闭浏览器之前删除Cookie文件,方法有两种:一种是使用setcookie()函数删除,另一种是在浏览器中手动删除Cookie。

  • 使用setcookie()函数删除Cookie
    删除Cookie和创建Cookie的方式基本类似,也使用setcookie()函数。删除Cookie只需要将setcookie()函数中的第二个参数设置为空值,将第三个参数Cookie的过期时间设置为小于系统的当前时间即可。
    例如,将Cookie的过期时间设置为当前时间减1秒,代码如下:
    setcookie("cookie_name" , "" , time()-1);

    在上面的代码中,time()函数返回以秒表示的当前时间戳,把过期时间减1秒就会得到过期的时间,从而删除Cookie。当然,如果把过期时间设置为0也可以删除Cookie。

  • 在浏览器中手动删除Cookie
    在使用Cookie时,Cookie自动生成一个文本文件存储在IE浏览器的Cookies临时文件夹中。在浏览器中删除Cookie文件是非常快捷的。启动IE浏览器,选择“工具”/“Internet选项”命令,打开“Internet选项”对话框。在“常规”选项卡中单击“删除Cookies”按钮,将弹出“删除Cookie”对话框,单击“确定”按钮,即可成功删除全部Cookie文件。

    Cookie的生命周期
    如果Cookie不设定过期时间,就表示它的生命周期为浏览器会话的时间,只要关闭IE浏览器,Cookie就会自动消失。这种Cookie被称为会话Cookie,会话Cookie是保存到内存中的,一般不保存到硬盘中。
    如果设置了过期时间,那么浏览器会把Cookie保存到硬盘中,再次打开IE浏览器时会继续有效,直到Cookie过期之后系统才会自动删除Cookie文件。
    虽然Cookie可以长期保存在客户端浏览器中,但也不是一成不变的。因为浏览器最多允许存储300个Cookie文件,而且每个Cookie文件支持最大容量为4KB。每个域名最多支持20个Cookie,如果达到限制时,浏览器会自动随机地删除Cookie文件。

Session管理

前面提到的Cookie虽然可以在客户端保存一定数量的会话状态,但是事实上全部采用Cookie来解决会话控制是不现实的,因为Cookie本身的容量有限。因此这里提供另外一种解决方案,那就是只在客户端保存一个会话标志符,然后将会话数据都存储在服务器上或者数据库中。这种解决方案就是Session,下面就详细讲述Session的相关知识。

  • 什么是Session
    Session译为“会话”,其本义是指有始有终的一系列动作/消息。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此Session实际上是一个特定的时间概念,Session默认的生命周期为20分钟。
  • 为什么要使用Session
    浏览器和服务器采用HTTP协议进行通信,HTTP协议是无状态的。用户从浏览器向服务器发出的每个请求都独立于它前面的请求。服务器无法知道两个连续的请求是否来自同一个用户,它所能做的就是返回当前请求的页面。为了在服务器保持客户端的状态,就需要使用Session
  • Session的工作原理
    Session的工作原理比较简单,当客户端访问服务器时,服务器根据需要设置Session,将会话信息保存在服务器上,同时将唯一标识Session的session_id传递到客户端浏览器。浏览器将这个session_id保存在内存中,这个session_id相当于无过期时间的Cookie。浏览器关闭后,这个Cookie就清掉了,它不会被存储在用户的Cookie临时文件中。以后浏览器每次请求都会额外加上这个session_id,在服务器根据这个session_id,就能取得客户端的数据状态。
    如果客户端浏览器意外关闭,服务器保存的Session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此Session的信息。但是Session的保存有一个过期时间,一旦超过规定时间没有客户端请求时,服务器就会清除这个Session。

创建和管理会话

创建一个会话主要包括启动会话、注册会话、使用会话和删除会话等步骤

  1. 启动会话
    启动会话的方式有两种:一种是使用session_start()函数,另一种是使用session_register()函数为会话登录一个变量来隐含地启动会话。
    session_start()函数创建会话的语法格式如下:bool session_start(void);
    使用session_start()函数之前浏览器不能有任何输出(包括<html><head>标签以及任何空格),否则会产生错误,因此应该把调用session_start()函数放在网页代码的顶端。
    session_register()函数用来为会话登录一个变量来隐含地启动会话,使用session_register()函数时,不需要调用session_start()函数,PHP会在注册变量之后隐含地调用session_start()函数。
  2. 注册会话
    会话变量被启动后,全部保存在数组$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接给该数组添加一个元素即可。
    例如,启动会话,创建一个Session变量并赋值,代码如下:

    <?php
    session_start();                //启动Session
    $_SESSION["user"]="James";    //声明一个名为user的Session变量,并赋值
    ?>
  3. 使用会话
    使用会话变量很简单,首先需要判断会话变量是否存在,如果不存在就创建它;如果存在就可以用数组$_SESSION访问该会话变量。例如:

    <?php
    session_start();                      //启动Session
    if(!empty($_SESSION["user"])){       //判断一个会话变量是否为空
    $user=$_SESSION["user"];          //存在就将会话变量赋给一个变量$user
    echo $user;                       //输出变量$user
    }else{
    $_SESSION["user"]="James";        //不存在则创建一个新的会话变量
    }
    ?>
  4. 删除会话
    删除会话主要有删除单个会话、删除多个会话和结束当前会话3种。删除单个会话变量同删除数组元素一样,直接注销$_SESSION数组的某个元素即可。格式为: unset($_SESSION["user"]);

    在使用unset()函数时,要注意$_SESSION 数组中某元素不能省略,即不可一次注销整个数组。这样会禁止整个会话的功能,如unset ($_SESSION)函数会将全局变量$_SESSION销毁,而且没有办法恢复,用户也不能再注册$_SESSION变量了。如果要删除多个或者全部会话,可以采用下面的两种方法
    如果想要一次注销所有的会话变量,可以将一个空的数组赋值给$_SESSION,代码如下:$_SESSION=array();
    如果整个会话已经基本结束了,首先应该注意销毁所有的会话变量,然后再使用session_destroy()函数清除并结束当前会话,并清空会话中的所以资源,彻底销毁Session,代码如下:session_destroy();

猜你喜欢

转载自blog.csdn.net/zhili_wang/article/details/80934687