|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 能较轻易地对用户经由过程 HTML 表单提交的信息停止操作的才能一向是PHP的优势之一。现实上,PHP 版本4.1添加了几个会见该信息的新办法并无效地除去了之前版本中最经常使用的一个办法。本文研讨了利用 HTML 表单上提交的信息的分歧办法,并同时利用了 PHP 较早的版本和较新的版本。本文起首从研讨单个值入手下手,然后构建可以普通性地会见任何可用的表单值的页面。
注:本文假定您对运转 PHP 版本 3.0 或更高版本的 Web 办事用具有会见权。您需求对 PHP 自己和创立 HTML 表单有根基懂得。
HTML 表单
在浏览本文的过程当中,您将看到分歧类型的 HTML 表单位素若何供应 PHP 可以会见的信息。针对本示例,我利用了一个复杂的信息表单,它由两个文本域、两个复选框和一个答应多项的选择框构成:
清单 1. HTML 表单
<html>
<head><title>Tour Information</title></head>
<body>
<h2>Mission Information</h2>
<form action="formaction.php">
<table width="100%">
<tr><td>Ship Name:</td><td><input type="text" name="ship" /></td></tr>
<tr><td>Trip Date:</td><td><input type="text" name="tripdate" /></td></tr>
<tr><td colspan="2">Mission Goals:</td></tr>
<tr>
<td><input type="checkbox" name="exploration" value="yes" />
Exploration</td>
<td><input type="checkbox" name="contact" value="yes" />
Contact</td>
</tr>
<tr>
<td valign="top">Crew species: </td>
<td>
<select name="crew" multiple="multiple">
<option value="xebrax">Xebrax</option>
<option value="snertal">Snertal</option>
<option value="gosny">Gosny</option>
</select>
</td>
</tr>
<tr><td colspan="2" align="center"><input type="submit" /></td></tr>
</table>
</form>
</body>
</html>
在没有指定办法的情形下,该表单利用缺省办法 GET,阅读器用它将表单值附加到 URL,以下所示:
http://www.vanguardreport.com/formaction.php?
ship=Midnight+Runner&tripdate=12-15-2433&exploration=yes&crew=snertal&crew=gosny
图 1 显示表单自己。
图 1. HTML 表单
老举措:会见全局变量
清单 2 中显示的代码将表单值作为全局变量处置:
清单 2. 作为全局变量的表单值
<?php
echo "Ship = ".$ship;
echo "<br />";
echo "Tripdate = ".$tripdate;
echo "<br />";
echo "Exploration = ".$exploration;
echo "<br />";
echo "Contact = ".$contact;
?>
生成的 Web 页面显示提交的值:
Ship = Midnight Runner
Tripdate = 12-15-2433
Exploration = yes
Contact =
(正如您稍后将看到的那样,Contact 没有值,由于没有选中谁人框)。
清单 2 中的暗示法固然是便利的,但它仅在 PHP 伪指令 register_globals 被设置为 on 时才可用。在版本 4.2 之前,这是缺省设置,很多 PHP 开辟人员乃至没无意识到有如许的成绩。但是,从版本 4.2 入手下手,register_globals 的缺省设置是 off,在此情形下,该暗示法不克不及正常任务,由于不再用恰当的值创立并初始化变量。
但是,您可以用其它的办法初始化这些变量。第一个办法是更改 register_globals 的值。很多利用同享办事器的开辟人员无权为全部办事器更改该值,但可以针对某个特定站点改动行动。如您有 .htaccess 文件的会见权,您可以经由过程添加以下伪指令启用 register_globals:
php_flag register_globals on
鉴于对该特征是不是可用的不肯定性,建议开辟人员最好不要利用或依托这类获得变量的办法。那末您有甚么选择呢?
假如您的体系运转的是版本 4.1 或更高版本,则您的另外一个选择是利用 import_request_variables() 有选择地注册全局变量纠合。您可使用该函数导入 get、post 和 cookie 值,并且假如您情愿的话,还可以给每项添加前缀。例如:
<?php
import_request_variables(gp, "formval_");
echo "Ship = ".$formval_ship;
echo "<br />";
echo "Tripdate = ".$formval_tripdate;
echo "<br />";
echo "Exploration = ".$formval_exploration;
echo "<br />";
echo "Contact = ".$formval_contact;
?>
这里,导入了 get 和 post 值 ― 利用 c 来导入 cookie 值 ― 并且因为 p 跟在 g 以后,所以 post 值将掩盖同名的 get 值。
但假如您象很多开辟人员一样没有运转版本 4.1 或更高版本,那怎样办呢?
会见表单值纠合
关于那些运转较早版本或不肯利用全局变量的人来讲,可以选择利用 $HTTP_GET_VARS 和 $HTTP_POST_VARS 数组。虽然其实不同意利用这些纠合,但它们依然可用,并且仍被普遍利用。认真的不再利用它们时,将用版本 4.1 中添加的 $_GET 和 $_POST 数组替换它们。
这两类数组的类型都是散列表(hash table)。散列表是经由过程字符串值而不是整数来创立索引的数组。利用表单时,可以经由过程值的称号来会见值,如清单 3 所示:
清单 3. 经由过程散列表会见表单值
<?
$ship_value = $HTTP_GET_VARS['ship'];
echo $ship_value;
echo "<br />";
$tripdate_value = $HTTP_GET_VARS['tripdate'];
echo $tripdate_value;
echo "<br />";
$exploration_value= $HTTP_GET_VARS['exploration'];
echo $exploration_value;
echo "<br />";
$contact_value = $HTTP_GET_VARS['contact'];
echo $contact_value;
?>
利用该办法,您可以经由过程称号来检索每一个字段的值。
单名,多值
到如今为止,每一个称号仅对应一个值。假如有多个值会如何?例如,crew species 列表框答应用称号 crew 提交多个值。
幻想情形下,您但愿将这些值作为数组利用,如许就能够显式地检索它们。要完成这一点,您必需对 HTML 页面略加修改。要作为数组提交的字段应当用方括号定名,如 crew[] 中:
清单 4. 修正 HTML 页面
...
<td>
<select name="crew[]" multiple="multiple">
<option value="xebrax">Xebrax</option>
<option value="snertal">Snertal</option>
<option value="gosny">Gosny</option>
</select>
</td>
...
一旦您作出更改,检索表单值实践上发生数组:
清单 5. 将变量作为数组会见
...
$crew_values = $HTTP_GET_VARS['crew'];
echo "0) ".$crew_values[0];
echo "<br />";
echo "1) ".$crew_values[1];
echo "<br />";
echo "2) ".$crew_values[2];
...
如今,提交页面后会显示多个值:
0) snertal
1) gosny
2)
起首要注重这是一个下标从 0 入手下手的数组。第一个碰到的值在地位 0 中,接上去的值在地位 1,以此类推。在本例中,我只提交了两个值,所以第三项为空。
凡是,您不晓得将提交几何项,因而您可以使用它是数组这一现实利用 sizeof() 函数来肯定提交了几何值,而不用直接挪用每项:
清单 6. 肯定数组的巨细
...
for ($i = 0; $i < sizeof($crew_values); $i++) {
echo $crew_values[$i];
echo "<br />";
}
...
但是,有时成绩不是值太多,而是基本没有我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。 |
|