仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1210|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之联合 PHP 利用 HTML 表单会见单个和多个...

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
刚开始因为习惯于ASP格式的写法,总是在这些方面出现问题,自己还总是找不到问题所在,这就提醒了自己,在写代码的时候一定要认真,不能粗心地老是少个“;”或者字母大小写不分,要不然很可能找半天都找不到错误。会见   能较轻易地对用户经由过程 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 />";
}
...



但是,有时成绩不是值太多,而是基本没有值。

使人惊异的消逝的复选框
复选框只要实践被选中时才被提交,熟悉到这一点很主要。不然,它的消逝将告知您所需晓得的实情:用户没有单击复选框。利用复选框时,您可使用 isset() 函数显式地反省是不是设置了值:

清单 7. 反省是不是提交了复选框
...
$contact_value = $HTTP_GET_VARS['contact'];
echo $contact_value;

if (isset($contact_value)) {
//The checkbox was clicked
} else {
//The checkbox wasn't clicked
}
...




获得一切表单值
复选框字段只是您对预期表单值称号能够不完整有掌控的情况的示例之一。凡是,您会发明有一个以通用办法会见一切表单值的例程是很有效的。

侥幸的是,由于 $HTTP_GET_VARS 及其同类只是散列表,您可以用数组的一些特征来操作它们。例如,您可使用 array_keys() 函数来获得一切潜伏值称号的列表:

清单 8. 获得表单值称号的列表

...
$form_fields = array_keys($HTTP_GET_VARS);
for ($i = 0; $i < sizeof($form_fields); $i++) {

$thisField = $form_fields[$i];
$thisValue = $HTTP_GET_VARS[$thisField];
echo $thisField ." = ". $thisValue;
echo "<br />";

}
...



在本例中,您实践上联合了几种手艺。起首,检索表单字段称号的数组并将其定名为 $form_fields。$form_fields 数组只是一个典范的数组,因而您可使用 sizeof() 函数来肯定潜伏键的数量,并对每项停止轮回遍历。关于每项,检索字段的称号然后利用该称号获得实践值。生成的 Web 页面看起来以下:


ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = Array



这里有两个主要事项。第一,contact 字段基本没有前往值,这正如预期的那样。第二,crew 值(特地说一下,您也许晓得:它的称号是 crew 而不是 crew[])是一个数组而不是值。为了实践检索一切值,需求利用 is_array() 函数检测一切数组并响应地处置它们:

清单 9. 处置数组
...
for ($i = 0; $i < sizeof($form_fields); $i++) {

$thisField = $form_fields[$i];
$thisValue = $HTTP_GET_VARS[$thisField];
if (is_array($thisValue)){
for ($j = 0; $j < sizeof($thisValue); $j++) {
echo $thisField ." = ". $thisValue[$j];
echo "<br />";
}
} else {
echo $thisField ." = ". $thisValue;
}
echo "<br />";

}
...




了局是一切已实践提交的数据:


ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = snertal
crew = gosny



最初一个申明:点
既然您有了能顺应您提交任何表单值的表单操作页面,您就需求抽一点工夫思索一个经常让 PHP 法式员感应不测的情况。

有些情形下,设计人员会选择利用一个图形按钮而不是提交按钮,图形按钮如图 2所示,代码如清单 10所示。

清单 10. 添加图形按钮
...
<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="image" src=http://www.163design.net/p/c/"button.gif" name="formbutton"/>
</td>
</tr>
</table>
...



图 2. 表单上的图形按钮




请注重,虽然上图中只要一个图象,却有两个图形按钮(或希冀的了局)。作为开辟人员,您可以经由过程反省和值一同前往的 x 和 y 坐标晓得用户单击了何处。现实上,按原样提交该表单能够会创立以以下所示开头的 URL 和查询字符串:


...snertal&crew%5B%5D=gosny&formbutton.x=37&formbutton.y=14


请注重附加到按钮称号的 .x 和 .y。但是,假如您盘算提交该页面然后检查了局,您会看到:


ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = snertal
crew = gosny

formbutton_x = 37
formbutton_y = 14



请注重,点号(.)已被转换成下划线(_)。这仿佛有点奇异,但它是需要的,由于 PHP 中的变量名不克不及有点号,因而 $formbutton.x 会是一个不法变量名。现实上,表单称号中的任何点号 ― 不单单针对图象按钮 ― 都被转换成下划线。

停止语
在本文中,您看到了对用户经由过程 HTML 或 XHTML 表单提交的信息停止会见的几种办法。若何处置该信息取决于您利用的 PHP 版本和您是不是能将表单变量作为全局变量停止会见。不管何种情形,表单值可作为数组利用,而且您可以用数组的特征来轮回遍历一切可用的值。

  php   manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。
分手快乐 该用户已被删除
沙发
发表于 2015-2-4 11:56:54 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
蒙在股里 该用户已被删除
板凳
发表于 2015-2-6 17:03:26 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-11 20:09:42 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
莫相离 该用户已被删除
5#
发表于 2015-2-28 08:46:14 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
乐观 该用户已被删除
6#
发表于 2015-3-1 12:00:27 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
爱飞 该用户已被删除
7#
发表于 2015-3-6 16:53:34 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-13 04:19:54 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
金色的骷髅 该用户已被删除
9#
发表于 2015-3-17 12:08:21 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
因胸联盟 该用户已被删除
10#
发表于 2015-3-24 00:16:59 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
兰色精灵 该用户已被删除
11#
发表于 2015-3-31 04:20:24 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
admin 该用户已被删除
12#
发表于 2015-4-5 11:48:34 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
柔情似水 该用户已被删除
13#
发表于 2015-4-11 06:47:31 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
14#
发表于 2015-4-13 10:15:59 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
变相怪杰 该用户已被删除
15#
发表于 2015-4-15 23:32:10 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
小魔女 该用户已被删除
16#
发表于 2015-4-16 09:44:28 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小女巫 该用户已被删除
17#
发表于 2015-4-18 00:39:20 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
飘灵儿 该用户已被删除
18#
发表于 2015-4-18 11:38:34 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
海妖 该用户已被删除
19#
发表于 2015-4-22 05:43:43 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
活着的死人 该用户已被删除
20#
发表于 2015-6-4 23:31:21 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 13:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表