文章教程

5.2.1GET提交方式

9/17/2020 9:38:49 PM 人评论 次浏览

5.2 在PHP中接收和处理表单数据

用户在表单中输入数据后,可以单击“提交”按钮,将数据提交到服务器,由在服务器端工作的PHP程序接收和处理表单数据。本节介绍在PHP程序中接收和处理表单数据的方法。

5.2.1 GET提交方式

表单提交数据的方式分为GET和POST两种,本节将介绍GET提交方式的特点和接收数据的方法。

在定义表单时,将method属性设置为get,可以指定表单采用GET提交方式,例如:

<form id="form1" name="form1" method="get" action="ShowInfo.php">

使用GET提交方式时,表单数据将附加在URL的动作属性上,然后把这个新的URL发送给处理脚本。数据与表单处理脚本之间用问号("?")作为分隔符。数据的格式为:

数据名=数据值

提交数据时,URL的格式如下:

http://网址/处理脚本?参数名=参数值

如果表单中包含多个控件,则它们之间用&作为分隔符。例如,如果将 5.1.1 小节介绍的input.html 中的表单设置为$_GET 提交方式,则在提交数据时,地址栏中的 URL 会变成如下格式:

http://localhost/ShowInfo.php?txtUserName=lee&txtUserPass=pass&txtUserPass2=&radio Sex=%E7%94%B7&C1=on&C2=on&C3=on&city=%E5%8C%97%E4%BA%AC&textarea=%E8%87%AA%E6%88%91%E4%BB%8B%E7%BB%8D&submit=%E6%8F%90%E4%BA%A4

在PHP程序中,可以使用HTTP GET变量$_GET读取使用GET方式提交的表单数据,具体方法如下:

参数值= $_GET[参数名]

【例5-2】 在ShowInfo.php中处理input.html使用GET方式提交的表单数据,代码如下:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?PHP

if($_GET['submit']) {

echo("用户名:" . $_GET['txtUserName'] . "<BR>");

echo("用户密码:" . $_GET['txtUserPass'] . "<BR>");

echo("确认密码:" . $_GET['txtUserPass2'] . "<BR>");

echo("性别:" . $_GET ['radioSex'] . "<BR>");

echo("兴趣爱好:");

if($_GET['C1'] == 'on')

echo("文艺 ");

if($_GET['C2'] == 'on')

echo("体育 ");

if($_GET['C3'] == 'on')

echo("电脑 ");

echo("<BR>");

echo("所在城市:" . $_ GET['city'] . "<BR>");

echo("自我介绍:") . $_ GET['textarea'];

}

?>

$_GET['submit']当数据是单击“提交”按钮提交到处理脚本ShowInfo.php时等于True;否则等于 False。使用$_GET['submit']可以确保处理脚本 ShowInfo.php 只有在表单提交数据时才能接收和处理数据,避免直接访问处理脚本ShowInfo.php(直接访问时ShowInfo.php什么事都不做)。

将 input.html 和 ShowInfo.php 复制到 Apache 服务器的根目录下,在浏览器中查看http://localhost/input.html,并参照图5-10输入数据。

单击“提交”按钮,调用 ShowInfo.php,接收表单中的数据并显示在页面中,如图 5-11所示。

figure_0100_0159

图5-10 在input.html输入数据

figure_0100_0160

图5-11 在ShowInfo.php显示数据

5.2.2 POST提交方式

GET提交方式存在如下不足。

• 表单数据会出现在URL中,这是不安全的。因为有些数据(例如密码)是不希望被看到的。

• URL的数据长度是有限制的,不能用于传递大数据量的表单数据。

使用POST提交方式可以解决上述问题。

在定义表单时,将method属性设置为post,可以指定表单采用POST提交方式,例如:

<form id="form1" name="form1" method="post" action="ShowInfo.php">

在PHP 程序中,可以使用HTTP POST 变量$_POST 读取使用POST 方式提交的表单数据,具体方法如下:

参数值= $_POST[参数名]

【例5-3】 在ShowInfo.php中处理input.html使用POST方式提交的表单数据,代码如下:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?PHP

if($_POST['submit']) {

echo("用户名:" . $_ POST['txtUserName'] . "<BR>");

echo("用户密码:" . $_ POST['txtUserPass'] . "<BR>");

echo("确认密码:" . $_ POST['txtUserPass2'] . "<BR>");

echo("性别:" . $_ POST['radioSex'] . "<BR>");

echo("兴趣爱好:");

if($_POST ['C1'] == 'on')

echo("文艺 ");

if($_POST['C2'] == 'on')

echo("体育 ");

if($_POST['C3'] == 'on')

echo("电脑 ");

echo("<BR>");

echo("所在城市:" . $_ POST['city'] . "<BR>");

echo("自我介绍:") . $_ POST['textarea'];

}

?>

$_GET['submit']的作用与5.2.1小节中介绍的$_GET['submit']相同。

5.2.3 GET和POST混合提交方式

通常表单使用POST方式提交数据,但有时也需要在指定处理脚本时设置URL参数。而URL参数是使用GET方式提交数据的。这就是GET和POST混合提交方式。例如:

<form id="form1" name="form1" method="post" action="ShowInfo.php?flag=1">

在实际应用中,多使用URL参数flag标记当前表单的编辑状态(插入记录或修改记录),处理脚本根据flag的值将表单数据保存到数据库中(插入记录或修改记录对应的数据库操作语句是不同的)。在处理脚本中使用HTTP GET变量$_GET读取URL参数flag的值,代码如下:

flag = $_GET['flag'];

读取使用POST方式提交的表单数据的方法与5.2.2小节中介绍的方法相同。

5.2.4 使用JavaScript验证表单的输入

在提交表单数据之前,通常需要验证表单的输入,如果一些必须输入的数据没有输入,则要求用户重新输入再提交。可以使用JavaScript程序实现此功能。

在定义提交按钮时可以使用onclick事件定义一个验证表单的函数,语法如下:

<input type="submit" name="Submit" value=" 添 加 " onclick="return 验证表单的函数(this.form)">

验证表单的函数通常以 this.form(即表单对象)为参数,这是为了在验证表单的函数中能够访问表单控件,并验证它们的值。验证表单的函数通常返回一个布尔值,当返回True时可以提交表单;否则不能提交。

【例5-4】 在input.html 中增加验证表单输入功能。

提交按钮的定义代码如下:

<input type="submit" name="submit" id="submit" value=" 提 交 " onclick="return form_onsubmit(this.form)"/>

验证表单的函数为onsubmit()。假定必须输入用户名和所在城市,则onsubmit()函数的代码如下:

<script language="javascript">

function form_onsubmit(obj)

{

if(obj.txtUserName.value == "") {

alert("请输入用户名");

return false;

}

if(obj.city.selectedIndex <0) {

alert("请选择所在城市");

return false;

}

return true;

}

</script>

参数 obj 即为提交数据的表单对象,可以通过它访问表单控件。如果没有输入用户名,则会弹出如图 5-12 所示的警告消息框。onsubmit()函数返回false,表单数据不会被提交。

figure_0101_0161

图5-12 警告消息框

组合框控件的selectedIndex属性表示选择项目的索引。如果选择第1项数据,则selectedIndex等于0;如果选择第2项数据,则selectedIndex等于1;依此类推。当selectedIndex小于0时表示没有选择数据。

教程类别