PHP编程:联合PHP利用HTML表单
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 能较轻易地对用户经由过程 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;
echo "<br />";
echo "1) ".$crew_values;
echo "<br />";
echo "2) ".$crew_values;
...
如今,提交页面后会显示多个值:
0) snertal
1) gosny
2)
起首要注重这是一个下标从 0 入手下手的数组。第一个碰到的值在地位 0 中,接上去的值在地位 1,以此类推。在本例中,我只提交了两个值,所以第三项为空。
凡是,您不晓得将提交几何项,因而您可以使用它是数组这一现实利用 sizeof() 函数来肯定提交了几何值,而不用直接挪用每项:
清单 6. 肯定数组的巨细
...
for ($i = 0; $i < sizeof($crew_values); $i++) {
echo $crew_values[$i];
echo "<br />";
}
...
但是,有时成绩不是值太多,而是基本没有我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。 本文当是我的笔记啦,遇到的问题随时填充 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 做为1门年轻的语言,php一直很努力。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 本文当是我的笔记啦,遇到的问题随时填充 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
页:
[1]
2