”>
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
functionprocess_form()
{
global$name;
global$fruit;
global$times;
if($fruit==‘apple’){$fruit_message=‘Youloveapple.’;}
elseif($fruit==‘orange’){$fruit_message=‘Youloveorange’;}
else{$fruit_message=‘Youlovebanana.’;}
$favorite_times=count($times);
if($favorite_times<=1)
{$times_message=‘Youshouldeatfruitmoreoften.’;}
elseif($favorite_times>1&&$favorite_times<4)
{$times_message=‘Thosearegoodtimestoeatfruit.’;}
else{$times_message=‘Youareeatingtoomuchfruit.’;}
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()函数,完成对表单的处理。
小结
通过以上三步,我们使用PHP快速地在单一页面上实现了表单显示和表单处理的功能。
设定Cookies
PHP提供了强大的设定和读取Cookies的功能。
在此,我们不想对Cookies进行过多的介绍,但是用户应当认识到在设计WEB应用的过程中Cookies可能起到的重要作用。
用户可以使用PHP提供的setcookie()函数创建或修改Cookie。
setcookie()函数总共包括6个参数,能够对cookie进行精确的控制。
使用setcookie()函数设定cookie的最简单的方式为:
setcookie(‘name’,‘PETER’);
这样,在用户访问整个站点页面的期间,PHP将会自动创建一个名为$name的变量,并将值PETER赋予该变量。
我们把这种Cookie称做会话Cookie,即其作用域为用户的整个会话过程。
如果我们希望Cookie值在访问用户离开站点后仍然有效的话,可以使用setcookie()函数的相应参数,设定Cookie的有效期。
这里,我们需要对PHP的时间设定进行一下说明。
PHP是一种基于Unix开发出的技术,用户需要用自1970年1月1日之后的秒数表示当前时间。
对于没有任何Unix系统编程经验的广大普通用户来说真是有点摸不着头脑。
不过,大家大可不必担心,因为PHP为我们提供了一个非常简便的解决方式,即mktime()函数。
用户可以在mktime()函数中按照小时、分、秒、月、日、年的顺序输入用户希望表示的时间,mktime()函数将会返回该时间距离1970年1月1日的秒数。
举例来说,如果我们希望设定一个有效期持续到2000年的Cookie的话,可以使用如下方式:
<?
php
$y2k=mktime(0,0,0,1,1,2000);
setcookie(‘name’,‘PETER’,$y2k);
?
>
如果用户希望更新已经存在的cookie,可以采用简单的直接覆盖原值的方法。
例如,即使我们已经按照上述代码对cookie进行了设定,仍可以对其做以下改动:
php
$y2k=mktime(0,0,0,1,1,2000);
setcookie(‘name’,‘JEFF’,$y2k);
?
>
这里需要提醒用户注意的一点是,虽然我们对cookie值进行了修改,但是在没有加载经过修改的页面之前,PHP中$name变量的值仍然不会改变。
如果用户希望在更改cookie值的同时更改相应PHP变量的值,可以采用以下方式:
<?
php
$name=‘JEFF’;
$y2k=mktime(0,0,0,1,1,2000);
setcookie(‘name’,$name,$y2k);
?
>
在有效期参数之后,setcookie()函数提供了设置可以读取cookie值的页面的路径和域的参数。
出于安全因素的考虑,在默认情况下,只有与设定cookie的页面处于同一目录或下属子目录的页面才能够读取相应cookie值。
但是,根据需要,我们也可以对这一设定进行修改。
例如:
<?
php
setcookie(‘name’,‘jeff’,$y2k,‘~/myhome’,‘’);
?
>
通过上述代码,我们设定凡是位于~/myhome目录下,属于域的页面都能够读取该cookie值。
setcookie()函数的最后一个参数较少被使用。
该参数可以指定只向运行安全连接协议,如SSL,的WEB服务器返回cookie值。
如果用户希望启动该参数功能,只需要将其值设为1即可。
使用PHP删除cookie也非常简便,用户只需要在setcookie()函数中输入希望删除的cookie的名称,PHP就会自动完成所有的删除工作。
例如:
phpsetcookie(‘name’);?
>
最后,关于cookie还要说明一点。
考虑到HTTP协议中cookie的运作方式,用户一定要注意应当在显示任何文字之前发送所有的cookie设置。
如果用户在编写代码时先设定显示的文字然后再发送cookie的话,PHP就会弹出报错信息,无法完成cookie的设置。
举例来说:
php
setcookie(‘name’,‘jeff’);
echo“HelloEveryone!
”;
?
>
这种cookie设置的方式是正确的。
但是如果采用如下方式:
php
echo“HelloEveryone!
”;
setcookie(‘name’,‘jeff’);
?
>
则会出现报错信息,无法完成cookie的设置。
日期和时
PHP提供了多种简便的功能以方便用户显示和控制日期和时间。
如果用户希望以某种形式显示某一日期或时间的话,可以使用PHP提供的date()函数。
date().函数包括两个参数,分别用于设定日期的显示格式以及代表显示日期的时间戳,其中,时间戳必须采用距离1970年1月1日的秒数方式表示。
如同C语言中的strftime()函数或Perl中的POSIX:
:
strftime()函数,PHP中的date()函数具有非常多的格式设置选项,这里就不一一说明了。
举例来说,date()函数的使用方式如下:
php
$birthday_stamp=mktime(10,10,0,10,20,1975);
$birthday_formatted=date(‘Fd,Y-g:
ia’,$birthday_stamp);
echo“Peterwasbornon$birthday_formatted.”
?
>
显示结果为:
PeterwasbornonOctober10,1975--10:
10p.m.