表单处理
PHP为用户提供了众多方便易用的强大功能。在表单的处理方面,PHP能够自动地将由客户端表单发送的数据赋值给相应变量,从而极大地简化了整个表单的处理过程。
举例来说,用户建立如下表单:
< INPUT TYPE=TEXT NAME=“name” VALUE=“PETER” >
当使用PHP对上述代码进行处理时,PHP自动创建一个名为$name的变量,并将变量值“PETER”赋予该变量。
用户可以直接对PHP创建的变量进行各种操作,例如显示变量值:
echo “Hi $name!”;
或对变量值进行验证:
if ($name == “PETER”) { echo “Please check out your email.”; }
下面,我们就来看一下如何通过使用PHP创建并处理一个基本的表单。在示例当中,我们将会要求表单的填写者回答几个简短的问题,包括输入表单填写者的姓名,电子邮件地址,完成调查问卷等。
这里,我们将所要设计的页面按照功能划分成表单显示和表单处理两个功能模块。这样,用户就不必设计两个不同的页面,而只需要在同一个PHP页面中通过逻辑控制显示或处理相应的功能模块。
||||||A. 表单显示
我们通过第一个功能模块来实现表单的显示。具体代码为:
< ?php
function display_form()
{
global $PHP_SELF;
? >
< FORM TARGET=“< ?php echo $PHP_SELF; ? >”METHOD=GET >
Name: < INPUT TYPE=TEXT NAME=“name” >< BR >
Favorite Fruit: < INPUT TYPE=RADIO NAME=“fruit” VALUE=“apple” >Apple
< INPUT TYPE=RADIO NAME=“fruit” VALUE=“orange” >Orange
< INPUT TYPE=RADIO NAME=“fruit” VALUE=“banana” >Banana
Favorite Times to Eat Fruit:
< INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“m” >Morning
< INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“n” >Noon
< INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“d” >Dinner
< INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“l” >Latenight
< INPUT TYPE=HIDDEN NAME=“stage” VALUE= “results” >
< INPUT TYPE=SUBMIT VALUE= “Thanks!” >
< /FORM >
< ?php
}
? >
上述代码中绝大多数都是创建表单所必需的HTML代码。在此,我们仅对所涉及到的PHP知识做一下简单介绍。
首先,我们来看一下代码开始处的变量$PHP_SELF。变量$PHP_SELF是PHP中一个很方便的指针,其变量值就是当前页面的URL地址。这样,我们就可以通过在随后的form标签中将TARGET的值设定为$PHP_SELF,实现由该表单页面处理表单的目的。这里,我们使用$PHP_SELF变量而不使用页面的实际地址,是因为通过使用$PHP_SELF变量,我们可以方便对编写的页面代码进行修改和移动,而不必担心在每次改动之后重新输入新的页面地址。
另外,在使用$PHP_SELF变量时,我们采用了如下方式:
global $PHP_SELF;
这表明代码中的$PHP_SELF变量为全局变量。用户在使用PHP的过程中一定要注意PHP中任何的函数变量都是局部变量。这就意味着任何函数变量的作用域都只局限于包括该变量的函数本身。即使函数外存在同名变量,变量的值也不相同。因此,如果我们没有在代码中以显式方式声明函数变量$PHP_SELF为全局变量具有全局唯一值的话,用户就会发现函数中的变量$PHP_SELF的值将会为空,而不是我们预先所期望的当前页面的URL地址。
用户可能已经注意到我们将表单复选选项的名称设置为times[]数组,而把单选选项的名称设定为fruit常规变量。这是因为单选选项只允许用户选择唯一一个正确选项,因此fruit变量的值只可能是一个字符串;相反,复选选项则允许用户做多重性选择。如果,用户希望PHP能够保存用户可能作出的所有选择的话,就需要使用数组来保存所有的可能值。按照PHP的语法规则,我们通过在变量名times后面加上方括号,使PHP知道该变量是一个数组变量而不是普通的常规变量。
最后,我们设定了一个名为stage的隐含变量,通过使用该变量,我们可以控制是否显示表单还是处理表单结果。
||||||B. 处理表单
我们通过页面的第二个功能模块完成对表单输入结果的处理过程。其代码如下:
< ?php
function process_form()
{
global $name;
global $fruit;
global $times;
if ($fruit == ‘apple’) { $fruit_message = ‘You love apple.’; }
elseif ($fruit == ‘orange’) { $fruit_message = ‘You love orange’; }
else { $fruit_message = ‘You love banana.’; }
$favorite_times = count($times);
if ($favorite_times < = 1)
{$times_message = ‘You should eat fruit more often.’;}
elseif ($favorite_times > 1 && $favorite_times < 4)
{$times_message = ‘Those are good times to eat fruit.’;}
else {$times_message = ‘You are eating too much fruit.’;}
echo “Hello $name.”;
echo “$fruit_message $times_message”;
}
? >
在表单处理代码中,首先我们按照上文所介绍的$PHP_SELF变量处理方式,将我们在创建表单时所建立的变量全部声明为全局变量。接着,我们查看用户具体选择了哪一个fruit选项。然后,使用count()函数得出用户选择的复选选项的个数,然后按照该结果进行相应的判断。最后,我们输出用户的姓名以及表单处理后的信息。
||||||C. 合并表单功能模块
现在,我们把已经分别独立完成的两个功能模块组合在一起,同时设定两个模块之间的逻辑规则。我们可以在display_form()和process_form()之下加入以下代码:
< ?php
if (empty($stage)) { display_form(); }
else { process_form(); }
? >
首先,我们通过empty()函数查看$stage变量的值是否为空。如果$stage变量的值为空,例如当访问者首次浏览表单页面,PHP将会运行display_form()函数,同时在客户端显示表单;如果$stage变量的值不为空,例如当用户填写完表单并返回结果后$stage变量的值为results,PHP将会运行process_form()函数,完成对表单的处理。