php 表单form提交详细分析

时间:2016-06-12
提到php开发,我们不得不提到php数据的传输与提交,而php中数据传输与提交一般都是使用表单form,本文章向大家介绍php $_POST $_GET 表单form提交实例透彻分析与讲解,文章应该是一篇比较完整的form表单提交的知识讲解,需要的朋友可以参考一下。

一、表单form到底有什么作用

表单的作用是采集客户端提交的数据,并把数据提交给服务端。

比如在登录一个网站时,你需要输入自己的用户名和密码才能登陆。又比如你注册游戏账号时,你需要填写自己的邮箱、密码、年龄等等。

这些操作就要通过表单提交给服务器,最后由服务器记录在数据库。

 

二、表单form组成结构

html 表单是Web应用中最常用的组件,由提交按钮以及其他相关元素组成。表单被应用在各个领域中,用于实现注册用户、填写银行账户和登录等功能。说简单点就是一对form标签和input标签的组合。如下:

<FORM METHOD="POST" ACTION="GetFormValue.php">
    <H2>Contact List</H2>
    <BR>Nickname:
    <BR><INPUT TYPE="TEXT" NAME="Nickname">
    <BR>
    <BR>Full Name:
    <BR><INPUT TYPE="TEXT" NAME="Fullname">
    <BR>
    <BR>Memo:
    <BR><TEXTAREA NAME="Memo" ROWS="4" COLS="40" WRAP="PHYSICAL">
    </TEXTAREA>
    <BR>
    <BR>
    <INPUT TYPE="SUBMIT">
</FORM>

正如上所示,表单的两个标签必须是成对出现的:<form></form>。在一个HTML页面中允许有若干个表单,在编写时以表单的名字(name)和Form ID作为它们之间的区分。

form标签有两个必填的属性 : action,method。

action属性指的是接收处理结果的文件位置,当action值为空时,则提交给当前文件本身,如果action的值为其他文件或URL,则提交给该文件或URL地址处理。

method属性,顾名思义就是提交数据的方法,它有两个值可选:post/get ,post是隐藏传递,get是地址栏传递,果没有设置method属性或该属性为空值,浏览器默认method的值为POST方法。

form中可以添加文本框和按钮等表单元素,比如上面实例中的Nickname、Fullname、Memo和submit等都是表单元素,下面列出表单元素:

表单元素 说    明
input type="checkbox" 复选框,允许用户选择多个选择项
input type="file" 文件浏览框,当文件上传时,可用来打开一个模式窗口以选择文件
input type="hidden" 隐藏标签,用于在表单中以隐含方式提交变量值  
input type="password" 密码文本框,用户在该文本框输入字符时将被替换显示为*号
input type="radio" 单选项,用于设置一组选择项,用户只能选择一个
input type="reset" 清除与重置表单内容,用于清除表单中所有文本框的内容,而且使选择菜单项恢复到初始值
input type="submit" 表单提交按钮
input type="text" 单行文本框
select 下拉列表框,可单选和多选。默认为单选,如果增加多项选择功能,增加<select name="select" size="自定义列数" multiple="multiple">即可
option 列表下拉菜单,和select配合使用,显示供选择的值
textarea 多行文本框,在使用文本框时需要关闭标签之间的文本内容,形成如下格式:<Textarea>你的文字</Textarea>

其中,hidden标签被称为隐藏或隐含的标签,它不会在用户浏览的页面界面上出现,当用户填写资料表单和跨页之间传值时,可以使用该标签传递一些隐含的值。

password密码文本框用于隐藏密码,用户输入的文本将以*显示在文本框中,但是密码并没有加密,只是被*替换显示,这点请注意。

下面介绍表单的属性,它们用于表单中约束表单元素的行为或显示

属性名称 说    明
name 文本框的名称,PHP根据该名称,在超级全局数组中建立以name为名称的键名
size 文本框的宽度,在select下拉菜单中,表示可以看到的选项行数
value 文本框中的默认值,注意,该值不能应用到type=password密码文本框以及type=file文件文本框中
multiple 此属性用于下拉列表菜单select中,指定该选项用户可以使用Ctrl和Shift键进行多选
rows 多行文本框显示时可以容纳的字符列数宽度
cols 多行文本框显示时可以容纳的字符行数高度

三、php如何获取表单数据

php获取表单数据有三种方式:

  1. 以$_GET方式获取表单数据
  2. 以$_POST方式获取表单数据
  3. 以$_REQUEST方式获取表单数据

$_GET只能获取get方法提交的数据,$_POST方法只能获取post方法提交的数据,而$_REQUEST能同时获取get和post方法提交的数据。

请看下面实例:

<HTML>
<BODY>

<FORM METHOD="POST" ACTION="GetFormValue.php">
    <H2>Contact List</H2>
    <BR>Nickname:
    <BR><INPUT TYPE="TEXT" NAME="Nickname">
    <BR>
    <BR>Full Name:
    <BR><INPUT TYPE="TEXT" NAME="Fullname">
    <BR>
    <BR>Memo:
    <BR><TEXTAREA NAME="Memo" ROWS="4" COLS="40" WRAP="PHYSICAL">
    </TEXTAREA>
    <BR>
    <BR>
    <INPUT TYPE="SUBMIT" name="submit" value="提交">
</FORM>
</BODY>
<?php
if($_POST["submit"]){
  $Nickname=$_POST["Nickname"];
  $Fullname=$_POST["Fullname"];
  $Memo=$_POST["Memo"];
  echo "<BR>Nickname=$Nickname";
  echo "<BR>Fullname=$Fullname";
  echo "<BR>Memo=$Memo";
}
?>

四、get和post的区别

安全性

如果用get提交一个验证用户名和密码的form,一般认为是不安全的。因为用户名和密码将出现在URL上,进而出现在浏览器的历史记录中。显然,在对安全性有要求的情况下,应该使用post。

编码

HTML 4.01 specification指出,get只能向服务器发送ASCII字符,而post则可以发送整个ISO10646中的字符(如果同时指定enctype=”multipart/form-data”的话)。

注意get和post对应的enctype属性有区别。enctype有两个值,默认值为application/x-www-form-urlencoded,而另一个值multipart/form-data只能用于post。

提交的数据的长度

HTTP specification并没有对URL长度进行限制,但是IE将请求的URL长度限制为2083个字符,从而限制了get提交的数据长度。测试表明如果URL超出这个限制,提交form时IE不会有任何响应。其它浏览器则没有URL的长度限制,因此其它浏览器能通过get提交的数据长度仅受限于服务器的设置。

而对于post,使用POST方式提交表单,通过HTTP协议的header部分传递表单数据,理论上数据的大小无上限。不过,在使用PHP进行POST提交 时,文件大小受PHP配置文件(php.ini)限制,我们可以修改php.ini文件中的post_max_size参数,可将默认的2M字节,修改为 自己需要的大小,但由于HTTP协议的特性,这个值不宜设置过大,最大以8M为宜。