一个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¶2=value2¶3=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" />
密 码:<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 " 您的密码是:".$_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]." ";
}
}
?>
获取下拉菜单框和列表菜单框的值
列表框有下拉菜单框和列表菜单框两种形式,其基本语法是一样的。(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]." "; } } ?>
- 获取文件域的值
文件域的作用是实现文件的上传。文件域值的获取同获取文本框的值一样,首先需要定义下拉菜单框的name属性值,然后应用$_POST[]全局变量进行获取。
Cookie管理
Cookie的中文意思是甜饼。Cookie其实就是一小段信息,它可以由脚本在客户端机器上保存。从本质上讲,它是客户的身份证。它不能作为代码执行,也不会传递病毒。简单地说,Cookie是Web服务器暂时存储在用户硬盘上的一个文本文件,并随后被Web浏览器读取。Web服务器可以利用Cookie来保存和维护很多与网站有关的信息。Cookie常用于3个方面:
- 记录访客的某些信息。如可以利用Cookie记录用户访问网页的次数,或者记录访客曾经输入过的信息,另外,某些网站可以使用Cookie自动记录访客上次登陆的用户名和密码等信息。
- 在网页直接传递变量。浏览器并不会保存当前页面上的任何信息,当页面被关闭时页面上的所有变量信息将随之消失。而通过Cookie可以把需要在页面间传递的变量先保存起来,然后到另一个页面再读取即可。
- 将所存储的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。
创建和管理会话
创建一个会话主要包括启动会话、注册会话、使用会话和删除会话等步骤
- 启动会话
启动会话的方式有两种:一种是使用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()函数。 注册会话
会话变量被启动后,全部保存在数组$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接给该数组添加一个元素即可。
例如,启动会话,创建一个Session变量并赋值,代码如下:<?php session_start(); //启动Session $_SESSION["user"]="James"; //声明一个名为user的Session变量,并赋值 ?>
使用会话
使用会话变量很简单,首先需要判断会话变量是否存在,如果不存在就创建它;如果存在就可以用数组$_SESSION访问该会话变量。例如:<?php session_start(); //启动Session if(!empty($_SESSION["user"])){ //判断一个会话变量是否为空 $user=$_SESSION["user"]; //存在就将会话变量赋给一个变量$user echo $user; //输出变量$user }else{ $_SESSION["user"]="James"; //不存在则创建一个新的会话变量 } ?>
删除会话
删除会话主要有删除单个会话、删除多个会话和结束当前会话3种。删除单个会话变量同删除数组元素一样,直接注销$_SESSION数组的某个元素即可。格式为:unset($_SESSION["user"]);
在使用unset()函数时,要注意$_SESSION 数组中某元素不能省略,即不可一次注销整个数组。这样会禁止整个会话的功能,如unset ($_SESSION)函数会将全局变量$_SESSION销毁,而且没有办法恢复,用户也不能再注册$_SESSION变量了。如果要删除多个或者全部会话,可以采用下面的两种方法
如果想要一次注销所有的会话变量,可以将一个空的数组赋值给$_SESSION,代码如下:$_SESSION=array();
如果整个会话已经基本结束了,首先应该注意销毁所有的会话变量,然后再使用session_destroy()函数清除并结束当前会话,并清空会话中的所以资源,彻底销毁Session,代码如下:session_destroy();