




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 10 章使用表单可使用 HTML 表单将用户提供的数据发送给对数据进行处理的服务器。将使用已在本书前半部分学习的许多 PHP 语言概念来处理和验证表单数据。我们首先会建立一个简单的表单,然后学习如何在用户提交表单后访问其字段中的信息。本章将对可以放在表单上的基本输入设备类型以及隐藏值进行讨论。当然,PHP 代码会与所有这些元素混合在一起。表单的工作方式分两个步骤。必须将表单提供给用户,然后,用户会在表单中提供一些信息并提交该表单。用户提交表单时,每个表单都有一个相应的目标页面来处理该页面的数据。通常情况下,这就是最初生成表单的相同文件。PHP 代码会进行检查,看看随页面请求而来的是否还有用户输入,以确定是否正调用该文件生成表单或对其数据进行处理。在许多类型的应用程序中,都需要进行搜索数据库的工作。不管是搜索在论坛上发布的信息、用户还是博客,都能大大简化用户的生活。在数据库级别,也可以使用许多不同的方法来处理搜索并返回结果。建立表单因为需要一个用户输入搜索查询的位置,因此,我们先建立一个表单来处理用户的输入。每个表单都必须具备以下基本组件:用 method 关键字定义的提交类型用 input 标记定义的一个或多个输入元素用 action 关键字定义的提交后得目的地可以用称为 search 的文本输入字段和 submit 按钮来建立简单的表单,如示例 10-1 所示Example 10-1. A simple form example1 2 3 Building a Form4 5 6 method=GET7 8 Search: 9 10 11 12 13 将示例 10-1 中的代码放到 WEB 服务器上 WEB 可访问目录中称为 simple.php 的文件内,如文档 root。从严格意义上说,表单完全是由 HTML 定义的,但我们将使用第 6 行的一些PHP 代码来参考超级全局变量 PHP_SELF。这提供了处理表单数据提交的当前 PHP 文件名称的快捷方式。示例 10-1 中的表单可以使你捕获用户为某次搜索输入的搜索字符串。请注意我们如何在文本所在的输入周围包裹标记;这会使表单更易于使用。单击 Search:文本会自动将光标发送到搜索字段。在第 6 行上,我们将表单提交方法设置为 GET。这样做是为了确保用户可以将其搜索收藏为书签,且不需要返回该页面并重新输入其数据。第 8 行通过定义文本字段执行了大部分工作。从浏览器访问 simple.php 文件应该会生成一个类似于图 10-1 所示的表单。它不太有用,因为你所提交的任何值都只会返回相同的表单,稍后我们将对此进行讨论。图 10-1:样例表单在浏览器中的显示方式访问提交的表单值下面我们修改示例 10-1 中的代码,来显示提交表单后得搜索字符串。要进行此工作,可使用语法$_GETfield检查已提交的 GET 字段的值。同样,$_POSTfield用于在使用 post 字段提交时访问字段。因为 search 是建立表单时所指定字段的名称,因此我们将在示例 10-2 中使用$_GET“search”。示例 10-2:修改简单搜索以对结果进行处理Building a FormSearch: );else echo The search string is: $search;?示例 10-2 生成了以下 HTML:Building a FormSearch: 如果在搜索文本框中提交了 PHP 的某个值,则会得到类似于图 10-2 所示的输出。图 10-2:相同的脚本现在能够回显搜索字符串提交表单后,if 语句会注意到$search 变量已有一个为其指定的值。返回的并非是运行HTML 表单的脚本,而是搜索字符串。因此,你使相同的 PHP 文件生成了表单,并对其提交值进行了处理。对于表单,可以指定默认值并使用不同的表单输入。可以使用多种方法提交表单。后面的几个小节将对此进行说明。全局寄存器在 PHP 早期的版本(4.2.0 之前) ,通常练习使用 PHP 配置指令,这被叫做全局寄存器。因为太容易写出不安全的代码,所以现在默认不启用。如果一个变量没有被初始化,一个恶意用户可能会用一个 URL 参数绕过这个变量,这就使脚本变得非常不安全了。现在这些变量必须通过一种方法才能被访问,这种方法会向发帖一样来检测这个变量来自哪儿。不幸的是,假设全局寄存器一直开启,就一直会有不正常的代码被利用。这就导致了很多令人头疼的问题,比如在受影响的代码中,提交的表单数据不能被访问。默认值在对数据库进行搜索时,实际上表单中可能需要有一些默认值。例如,这对于在价格范围中搜索时是有帮助的。用户并不总是希望插入值,这就使得搜索时会简单的多。通常情况下,使用 value 属性设置表单元素的默认值:使用 chechked 关键字的复选框存在例外。请看示例 10-3.示例 10-3:表单默认值Form Default Values method=GET /Min Price Max Price 在图 10-3 中,对于要搜索的最低和最高价格,默认值为 0 和 1000.如果用户搜索要出租的公寓,则此默认值就非常合适,具体情况取决于涉及到的是哪方面的内容。在示例 10-1 中,已经将提交按钮的默认值指定为 Go!。图 10-3:默认值出现在其字段中输入类型有很多不同类型的输入,那么应该使用哪种类型呢?单选按钮、复选框、文本输入、文本区域、按钮,等等,种类非常之多。下面将对每种输入选项进行讨论。文本框在处理用户输入时,大部分时间可能需要使用文本字符串。文本类型元素用于捕获用户输入的这些字符串。提交表单后,要求使用 name 属性处理表单提交后的输入,因为它指定了如何参考该值。当它出现在浏览器时,size 参数会确定文本框的长度。maxlength 参数确定了用户可以放在该字段中的最多字符数。语法是:例如,以下代码,创建了一个如图 10-3 所示的文本框。文本区域如果你需要用户输入一大块文本或将使用 WYSIWYG 编辑器,则需要使用文本区域。文本区域是使用 textarea 元素定义的,所要求的属性为 name、cols 和 rows ement。name 属性的工作原理与其在文本框中类似。cols 属性指定了为文本区域创建多少列。 rows 属性指定了要创建多少行。语法是:例如:Suggestion: 其显示可能如图 10-4 所示。图 10-4:带有文本区域元素的简单表单复选框当需要为用户提供几个不同的选项时,复选框非常有用,当允许分别选择每个选项时尤为如此。只有在需要为用户提供几个选项时才使用复选框,否则可以使用另外一种不同类型的输入。这种类型的输入被称为选择列表,稍后我们将对此进行简要论述。对于复选框,可将输入类型设置为 checkbox。要求提供名称和值的属性。如果将该值设置为 checked,则默认情况下会选择此复选框。语法是:例如:Italian Mexican Chinese 这会显示如图 10-5 所示的复选框。图 10-5:带有复选框的简单表单单选按钮单选按钮就像是按钮上的预设。它们类似于复选框,不同之处就是一次只能选择一个单选按钮。要创建单选按钮,可将类型设置为 radio。要求提供名称和值属性。一个组中的所有单选按钮必须使用相同的名称,以仅允许一个值。语法为:例如:Italian Mexican Chinese 其外观如图 10-6 所示。图 10-6:所提供的选项与在复选框中相同,但复选框换成了单选按钮图 10-6 只允许选择一种食物类型。隐藏隐藏表单元素可使你在信息对用户不可见的情况下,将信息从表单发送给对数据进行处理的脚本。这可能是诸如是否按下了表单的提交按钮或用户名这样的信息。语法是:例如:HIDDEN 是表单的 INPUT 元素的 TYPE 属性值。它是指在文档中不以可见方式出现、并且用户不与其交互的表单字段。可使用它传输有关客户端或服务器的过时信息。可通过 Page Source 查看隐藏字段。因此,建议不要将密码放在隐藏字段中。选择列表选择列表为用户提供了一个选项列表。你可以指定用户是否可以从列表中选择一项或多项。元素定义了选择列表。列表上的每个项都是用 option 元素指定的。语法为:Label of Option 此外,还可以在中设置一下几个属性要求提供 name 属性,该属性指定了如何在提交表单后访问数据。size 属性指定了列表的多少行出现在浏览器窗口中。默认值为下拉列表。multiple 属性允许用户从列表中选择多项。有以下两个常用的属性:selected 属性指定了默认选择。value 属性指定了不同于该选项标签的一个值。如果未指定 value,则会使用该选项的标签作为值。=提示:默认情况下,没有 multiple 属性的选择列表只能有一个选项被选中。=选择列表的常见用途是向用户提供可以从中进行选择的选项,如示例 10-4 中创建的选项。示例 10-4:多种书籍类型Hard CoverSoft CoverReferenceAudio Books图 10-7 给出了根据示例 10-4 中的代码构建的列表。图 10-7:从列表中选择的多个项列表中的第一个选项是一个空条目,这有助于检测用户是否对列表进行了任何更改。使用多个值使用复选框和单选按钮产生了一个新问题。在处理具有相同名称的一组复选框的结果或来自一个选择列表的元素时,不能使用单个值。示例 10-5 给出了一个示例。示例 10-5:带有使用相同名称存储多个值得复选框的表单Using Default Checkbox Values;foreach($food as $foodstuff)echo .htmlentities($foodstuff);echo .;else echo (ItalianMexicanChinese);?图 10-5 会产生如图 10-8 所示的结果。图 10-8:默认情况下选中了 Chinese 复选框你为用户提供了三种不同的食物选择:Italian、Mexican、和 Chinese。在本示例中,用户可以选择多个复选框。因此,当在 PHP 中处理表单提交时,需要根据复选框的名称选择多个值。我们在字段的 name 属性后放了一对方括号( ) ,以用数组的形式发送结果在下面的代码中,name 属性被设置为 food而非 food。如果不使用数组,则在用户选中多种食物时,其选择将会被在列表中选中的最后一种食物覆盖。在输入名称后放一对闭合的方括号则说明这是一个数组。既然想要勾选一项,则为它提供一个 checked 属性,然后将其设置为 checked。这会在用户的浏览器中将复选框设置为由默认情况设置。Using Default Checkbox Values;foreach($food as $foodstuf)echo .htmlentities($foodstuf).;elseecho (Italian Mexican Chinese );?如果选择了两个复选框,则会看到图 10-9 所示的屏幕图 10-9:选择 Italian 和 Chinese提交后,图 10-9 所示的屏幕会产生如图 10-10 所示屏幕。图 10-10:显示了每个选中的字段可以用相同的方式设置单选按钮,但应该将 name 属性设置为 food 而非 food,因为单选按钮的意思就是用户只能选择一项。最后,请注意在上面的代码中,复选框被 fieldset 标记包围。从逻辑上说,这样做是为了定义一组数据。对数据进行验证接受用户输入的数据时,始终应该对其进行验证。如果未对用户输入的数据进行验证,会导致出现许多问题,最重要的是,这会带来极大的安全风险。对数据进行验证并不复杂。我们将讲述用来对用户输入的数据进行处理的最常见的 PHP 函数。验证复选框、单选框和选择列表对来自复选框、单选按钮或选择的数据进行验证要比对方没有格式的字段(如文本框)进行验证容易的多,这是因为该值应该只是某个已定义的值。为确保这一点,可将所有选项存储在数组中,并确保在处理数据时此用户输入时数组的一部分。下面我们看一下用于检查来自单个选择的输入的代码(换句话说,只有一个复选框、单选按钮或其他选择) ,如示例 10-6 所示。示例 10-6:检查来自单选按钮或单个选择的输入验证文本框和文本区域要验证文本框和文本区域,首先需要收集哪些信息有效以及哪些信息无效。此外,你不希望允许用户不输入任何内容。你可以稍微花一点时间进行检查,看字符串是否为空,也可以建立更复杂的表达式来检查某些字符是否存在,如电子邮件地址中的。可以使用示例10-7 中的代码来确保输入时可接受的。示例 10-7:检查来自复选框或多个 select 语句的输入我们还未给你提供切实的、功能强大的 PHP 代码,下面将为你提供一个 PHP 如何轻松创建转换工具的很好的示例。可使用转换工具从华氏度转换为摄氏度,或将美国度量单位转换为公知单位。牛逼吧,昂?用 PHP 构建一个英尺 -米转换器我们将创建一个英尺-米转换程序,以此展示 PHP 的强大功能,如示例 10-8 所示,如果你的网站在世界范围内都可访问的话,则该应用程序会非常有用。示例 10-8:PHP 英尺- 米转换程序Feet to meters conversion$feet feet converts to ;echo $feet * 0.3048;echo meters.;? method=GETFeet: /这一自处理表单收集以英尺为单位的测量结果,并将该测量结果乘以一个标准的转换因子,然后输出结果。在表单提交的$feet 变量中,你仍然拥有以英尺为单位的原始值,因此当在表单中显示 Feet 用户输入字段时,你可以使用它作为初始值。图 10-11 所示为输入 12 并单击 Convert 按钮后的结果。图 10-11:使用数学公式将英尺转换为米用 PHP 构建一个时区转换工具现在已经学习了如何执行各种任务,让我们将其放到一起,来了解用 PHP 都能完成哪些工作。示例 10-9 使用了表单、数组、条件语句、循环和日期字符串。他们合力为你提供了一个在一些常见的时区之间进行转换的方便工具。示例 10-9:根据用户输入在时区之间转换1 2 3 Time Zone Converter4 5 6 ;25 echo date(h:i:sA,$start_time).n;26 echo ;27 putenv(TZ=$end_tz);2829 echo in $start_tz becomes ;30 echo ;31 echo date(h:i:sA,$start_time).n;32 echo ;33 echo in $end_tz.;34 35 ?36 method=GET37 38 Your Time:39 /40 in41 42 $tz;49 50 ?51 52 Convert to:53 54 $tz;61 62 ?63 64 65 66 67 下面逐行说明了示例 10-9 中发生的情况:第 816 行用全球的很多时区填充了数组第 18 行查看$start_time 是否有值。假定存在值,则会运行代码,以对提交表单的用户做出响应。第 4349 行以及第 5561 行在数组中对时区循环。它们还会检查通过表单提交传递来的值是否与时区值匹配。如果匹配,则会插入 selected 属性,以记住最后一次表单提交后得时区设置。图 10-12 给出了将 Chicago 时间转换为 Paris 时间的示例图 10-12:将 Chicago 时间转换为 Paris 时间用表单数据查询数据库对数据进行验证后,就为使用来自数据库查询表单中的信息做好了准备。示例 10-10 根据第 7 章中的代码创建了一个名为 query_db 的函数,用来显示作者,第 11 行发生了变化,允许将书名与 LIKE 搜索子句匹配。LIKE 和 NOT LIKE 通常与字符串一起使用,可能还会与通配符一起使用,如下划线(_)和百分号(%) 。下划线(_)匹配单个字符百分号(%)匹配 0 或多个字符在示例 10-10 中,函数带有一个参数,并搜索你正查找的特定书名。示例 10-10:将表单处理与数据库查询组合在一起1 . DB:errorMessage($connection);9 10 if (get_magic_quotes_gpc( ) /guard against SQL injection11 $qstring = stripslashes($qstring);12 13 $qstring = mysql_real_escape_string($qstring);14 $query = SELECT title, pages, author_id, author FROM books NATURAL JOIN authors15 WHERE books.title LIKE %$qstring%; /build the query16 $result = $connection-query($query);17 if (DB:isError($result)18 die(Could not query the database:.19 $query. .DB:errorMessage($result);20 21 echo ();22 echo TitleAuthorPages;23 while ($result_row = $result-fetchRow( ) 24 echo ;25 echo $result_row1 . ;26 echo $result_row3 . ;27 echo $result_row2 . ;28 29 echo ();30 $connection-disconnect( );31 32 ?33 34 35 Building a Form36 37 38 $search.;43 query_db($search);44 45 else 46 echo (47 48 Search:49 50 51 52 53 );54 5556 ?57 58 第 51 行完成了表单数据的处理。搜索字符串被发送给 query_db 函数。此示例展示了一个相当简单的搜索,它通过搜索 words 表,然后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024抚州职业技术学院辅导员招聘笔试真题
- 征求意见表2:文成县糯米山药种植与加工技术规程
- 2025年应急救生系统项目合作计划书
- Recycle 1(第1课时) 教案人教pep英语六年级上册
- 绘画语言及其在创作过程中的思想研究
- 6~9的加、减法第4课时 练一练 教案 2025人教版数学一年级上册
- 在班队活动中重塑“爱的教育”
- 2024年深圳市光明区水务局招聘专干真题
- 2025年江苏省第十届大学生就业创业知识竞赛考试练习题库(150题)【答案】
- 2025年江油市招聘属公费师范毕业生考试试题【答案】
- 联通员工调查问卷
- LY/T 1846-2009森林火灾成因和森林资源损失调查方法
- GB/T 1796.3-2017轮胎气门嘴第3部分:卡扣式气门嘴
- GB/T 1229-2006钢结构用高强度大六角螺母
- 关节软骨、胶原组织及生物力学
- 复合材料结构适航知识培训
- 《全过程工程咨询》课件
- 《高等物理化学》课程教学大纲
- 02、Storm课程入门到精通storm3-1
- 8.5.2 直线与平面平行(第2课时)直线与平面平行的性质教学设计
- 万科物业管理公司全套制度最新版
评论
0/150
提交评论