PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结

2024-05-05

PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结(共4篇)

篇1:PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结

PHP 学习笔记

(二):表单:表单处理,表单验证,表单实例

PHP 表单

PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据(form-data)。1 GET vs.POST

GET 和 POST 都创建数组(例如,array(key => value, key2 => value2, key3 => value3, …))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

GET 和 POST 被视作 GET和_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。

PHP 表单验证输入字段

从上一节中的验证规则中,我们看到 “Name”, “E-mail” 以及 “Gender” 字段是必需的。这些字段不能为空且必须在 HTML 表单中填写。

在上一节中,所有输入字段都是可选的。在下面的代码中我们增加了一些新变量:$nameErr、$emailErr、$genderErr 以及 $websiteErr。这些错误变量会保存被请求字段的错误消息。我们还为每个 $_POST 变量添加了一个 if else 语句。这条语句检查 $_POST 变量是否为空(通过 PHP empty()函数)。如果为空,则错误消息会存储于不同的错误变量中。如果不为空,则通过 test_input()函数发送用户输入数据:

$nameErr = $emailErr = $genderErr = $websiteErr = “";$name = $email = $gender = $comment = $website = ”“;

if($_SERVER[”REQUEST_METHOD“] == ”POST“){

if(empty($_POST[”name“])){

$nameErr = ”Name is reqment“])){

$comment = ”“;

} else {

$comment = test_input($_POST[”comment“]);

}

if(empty($_POST[”gender“])){

$genderErr = ”Gender is required“;

} else {

$gender = test_input($_POST[”gender“]);

} } ?> PHP验证 E-mail 和 URL

本节展示如何验证名字、电邮和 URL。

PHP验证 E-mail

以下代码展示的简单方法检查 e-mail 地址语法是否有效。如果无效则存储一条错误消息:

$email = test_input($_POST[”email“]);if(!preg_match(”/([w-]+@[w-]+.[w-]+)/“,$email)){

$emailErr = ”无效的 email 格式!“;}

PHP验证 Name、E-mail、以及 URL

现在,脚本是这样的:

$nameErr = $emailErr = $genderErr = $websiteErr = ”“;$name = $email = $gender = $comment = $website = ”“;

if($_SERVER[”REQUEST_METHOD“] == ”POST“){

if(empty($_POST[”name“])){

$nameErr = ”Name is required“;

} else {

$name = test_input($_POST[”name“]);

// 检查名字是否包含字母和空格

if(!preg_match(”/^[a-zA-Z ]*$/“,$name)){

$nameErr = ”Only letters and white space allowed“;

}

}

if(empty($_POST[”email“])){

$emailErr = ”Email is required“;

} else {

$email = test_input($_POST[”email“]);

// 检查电邮地址语法是否有效

if(!preg_match(”/([w-]+@[w-]+.[w-]+)/“,$email)){

$emailErr = ”Invalid email format“;

}

}

if(empty($_POST[”website“])){

$website = ”“;

} else {

$website = test_input($_POST[”website“]);

// 检查 URL 地址语言是否有效(此正则表达式同样允许 URL 中的下划线)

if(!preg_match(”/b(?:(?:https?|ftp)://|ment“])){

$comment = ”“;

} else {

$comment = test_input($_POST[”comment“]);

}

if(empty($_POST[”gender“])){

$genderErr = ”Gender is required“;

} else {

$gender = test_input($_POST[”gender“]);

} } ?>

接下来向您讲解如何防止表单在用户提交表单后保留输入字段中的值。

PHP-保留表单中的值

如需在用户点击提交按钮后在输入字段中显示值,我们在以下输入字段的 value 属性中增加了一小段 PHP 脚本:name、email 以及 website。在 comment 文本框字段中,我们把脚本放到了 之间。这些脚本输出 $name、$email、$website 和 $comment 变量的值。

然后,我们还需要显示选中了哪个单选按钮。对此,我们必须操作 checked 属性(而非单选按钮的 value 属性):

Name: “>

E-mail: “>

Website: “>

Comment:

Gender:

value=”female“>Female value=”male">Male

echo

篇2:PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结

有关 HTML 表单,请参见 HTML 教程中的 HTML表单 一章。

Request.QueryString

HTML 表单中的 method 有两种,一种是 get,另外一种是 post。当 HTML 表单的 method=“get” 时,可以用 Request.QueryString 来获取表单提交的信息。

以下是一个让用户输入姓名的 HTML 表单示例。

请输入你的姓名:

该示例中,HTML 表单中使用的 method 为 get,指向 action 的网页是一个.ASP 文件,名字为 yourname.asp。以下是 yourname.asp 文件的源代码:

姓名信息

你的姓名是:<%= Request.QueryString(“yourname”)%>

在这个.ASP 文件里,你可以看到最关键的一句代码是:

你的姓名是:<%= Request.QueryString(“yourname”)%>

Request.QueryString 括号里的 “yourname” 对应于 HTML 表单中的 input 输入框的 name 值。

当使用 method=“get” 提交表单信息时,用户可以从地址栏看到这些提交信息。

Request.Form

当 HTML 表单中 method = “post” 时,可以用 Request.Form 来获取 HTML 表单提交的信息。

以下是一个让用户输入姓名和密码的 HTML 表单示例。

请输入你的姓名:

请输入你的密码:

该示例中,HTML 表单中使用的 method 为 post,指向 action 的网页是一个.ASP 文件,名字为 userpw.asp。以下是 userpw.asp 文件的源代码:

用户信息

你的姓名是:<%= Request.Form(“yourname”)%>

你的密码是:<%= Request.Form(“yourpw”)%>

在这个.ASP 文件里,你可以看到最关键的两句代码是:

你的姓名是:<%= Request.Form(“yourname”)%>

你的密码是:<%= Request.Form(“yourpw”)%>

Request.Form 括号里的 “yourname” 和“yourpw” 各对应于 HTML 表单中的两个 input 输入框的 name 值。

当使用 method=“post” 提交表单信息时,用户不会从地址栏看到这些提交信息。

HTML表单中还有一些可供用户选择的表单控件,比如单选框 input type=“radio”,复选框 input type=“checkbox”,单选下拉框 select,复选下拉框 select multiple。

这些选择性的控件示例,请参见 HTML表单教程。在这些示例中,action 指向的那个.ASP 文件叫 choose.asp。以下是 choose.asp 文件的源代码:

retrieveinformation from form controls(radio, checkbox, select)

你选择了:

<% For counter = 1 To Request.Form(“fruit”).Count

Response.WriteRequest.Form(“fruit”)(counter)& “

Next

%>

Request.Form 获取的是一个集合(collection)。Request.Form 集合有两个参数,一个是 element,称做元素,对应 HTML表单控件的 name 值;第二个是 index,称做索引,表示 element 的第几个值,index 从1开始计数。

用 Request.Form(element)(index)可以引用 Request.Form 集合中某个元素的某个值。

比如 Request.Form(“fruit”)(1),表示“fruit”元素中的第一个值,Request.Form(“fruit”)(2)表示“fruit”元素中的第2个值。

用 Request.Form(element).Count,可以得到集合中某个元素的值的总数量。

篇3:PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结

验证输入数据是高质量安全软件应用的必要保证。在WEB应用环境下,验证是尤其敏感的一部分,因为非法的数据存在破坏应用功能的潜在危险,甚至可以使最敏感的应用领域的数据库崩溃。

输入数据的验证是指检查用户输入的数据是否和先前定义好的规则相符。这些规则是根据应用的商业标准来建立的。例如,如果要求日期按照“YYYY-MM-DD”格式输入,那么“09/9/22”这个日期就被认为是无效的。E-mail地址和电话号码也是这样的例子,它们需要按照有效的格式进行检查。

1 Web表单验证

基于浏览器/服务器(B/S)结构的Web应用系统大多利用表单来处理数据录入,因此Web表单验证是保证录入数据有效性的重要措施之一。Web表单验证的方法通常有以下几种:(1)客户端验证,这种验证是把表单提交到服务器之前,先要通过客户端JavaScript、Jscript和VBScript等脚本语言进行端验证,避免用户不小心填写错误而将数据提交到服务器。这些验证过程大致包括:非空验证、字符串长度验证、数据类型验证和满足某一规则的验证(通常使用正则表达式)。如文献[1,2,3],其中文献[3]提出了一种通用的JavaScript客户端表单验证方案。(2)服务器端验证,这种验证是把表单提交到服务器之后,先采用PHP、ASP、JSP等动态语言实现服务器端验证数据的合法性然后再执行其他操作。验证内容与客户端验证相似。如文献[4,5,6]。(3)客户端和服务器端相结合的验证,客户端验证是服务器端验证的良好补充,服务器端验证是必须的,如文献[7]。

以上3种Web表单验证技术存在的问题有[8]:(1)客户端验证无法调用后台数据库获得数据来验证表单数据的合法性,并且客户端验证是可以绕过去的,只要禁用活动脚本就可以不通过验证而提交表单。(2)服务器端验证表单受HTTP的限制,因为HTTP是一种无状态的协议。(3)在提交一个表单网页时,用户需要等待整个网页加载。

针对以上问题,本文实现了一种在PHP环境下通过AJAX技术验证表单的方法,从而建立更加友好和响应更加敏捷的表单验证技术。

2 关键技术

2.1 AJAX技术

AJAX是一种创建交互式网页应用的开发技术,它提供了一种可以调用后台服务器获得数据的客户端JavaScript技术。与传统的Web应用不同,AJAX采用异步交互过程[9]。访客请求支持AJAX的网页的工作流程如图1所示。

AJAX优点有:(1)更迅捷的响应速度,AJAX应用可以仅向服务器发送并取回必需的数据,因此在服务器和浏览器之间交换的数据大量减少,极大地提高系统性能。(2)Web部分刷新,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,避免了在网络上发送那些没有改变过的信息。(3)AJAX不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行[10]。

2.2 PHP技术

PHP是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格类似于C语言,被广泛的运用。PHP独特的语法混合了 C、Java、Perl 以及 PHP 自创的语法。它可以比 CGI 或者Perl 更快速地执行动态网页;PHP将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快的效果;PHP能实现所有的CGI的功能,而且支持几乎所有流行的数据库以及操作系统[11]。

3 AJAX表单验证原理

客户端页面刚载入时,值属性是空的,当用户填写完表单的某一项内容并将光标移开后,域值被发送到服务器,系统通过AJAX实时地将验证结果返回给客户。如果验证失败,将显示一个友好的错误消息,向用户通报这个域的验证结果。之后继续填写表单的其他内容,执行后台服务器调用来验证表单项,每验证一项都实时地将验证结果返回给客户。这时值属性不再为空,避免了表单由于验证错误而重载。表单的每一项都通过AJAX实时验证完后提交表单执行服务器验证,同时使用会话变量来保存用户输入,以避免验证失败和表单刷新。如果验证成功直接进入系统进行后续操作;验证失败则给出错误提示,并将光标定位在错误之处,用户可以重新输入,系统重复执行AJAX验证步骤。

AJAX表单验证流程如图2所示。

AJAX表单验证既实现了在表单提交后通过服务器端验证表单数据,又实现了在用户客户端的JavaScript验证,而在整个验证过程中没有中断用户的活动,是合理的表单验证。

4 AJAX表单验证实现

4.1 验证规则

以某一系统的用户注册信息为例,选用表单验证最常用的用户名、密码、出生年月日、E-mail、电话号码、手机号等信息进行验证。按照以下规则来检查输入数据:用户名不能是数据库中存在的, 由5~25位字母、数字或下划线组成;密码不能为空,由6-20位字母、数字或下划线组成;出生年月日必须合法,且格式为“YYYY-MM-DD”;E-mail必须是xx@xx.xx格式;电话号码必须是区号-号码格式,并且至少为7位数字;手机号必须是“1”开头的11位数字。注册界面如图3所示。

4.2 代码实现

当用户移开输入元素时生成输入元素的onBlur 事件,它通过两个参数触发JavaScript函数validate()――域值和域ID。这个函数将向脚本validate.php发送异步HTTP请求,以处理AJAX验证。

validate.js实现客户端功能。在validate.js中,验证函数向服务器发送一个AJAX请求。初始化AJAX请求的具体过程为:(1)建立一个XMLHttpRequest实例;(2)建立远程服务器地址;(3)初始化验证请求的缓存,然后用函数处理每个表单域的验证。主要代码如下:

首先监视服务器端的状态改变,xml Http的属性ready State表示服务器端的状态,如果状态是0或者4,是指没有活动的请求,此时就可以发送一个新请求。当发送新请求时,可以使用从缓存中读出的数据,它已经包含了格式化的问询串。处理服务器响应的函数是handle Request State Change,并且每次从服务器成功接收响应时依次调用read Response()。

Validate.php处理客户的AJAX调用,同时处理表单提交时的验证。AJAX验证由Validate AJjax方法执行,结果用来组成一个返回给客户的XML文档。支持验证功能的类叫做validate,它嵌入在一个名为validate.class.php的脚本处理里,关键代码如下所示:

5 结 语

基于浏览器/服务器的开发模式已经成为现阶段应用系统开发的主流,在应用系统中,最常见的功能是表单验证操作。传统的Web表单验证程序存在界面闪烁、受HTTP的限制、页面全部刷新、用户等待时间过长等问题。PHP环境下AJAX表单验证技术利用AJAX异步无刷新、快速响应、节省网络带宽等性能特点,大大提高了Web界面的响应速度,为用户提供更为自然的浏览体验。

参考文献

[1]汪健峰.使用JavaScript语言进行表单脸证[J].电脑编程技巧与维护,2006(7):29-34.

[2]张蕊,高张.利用JS文件来优化网站表单验证和提交代码[J].电脑编程技巧与维护,2008(11):85-86.

[3]徐卫英.基于JavaScript的验证表单通用方案的设计与应用[J].计算机时代,2010(4):43-45.

[4]常中华.用ASP增强表单验证程序的实现[J].电脑编程技巧与维护,2005(4):27-29.

[5]于天恩.PHP精解案例教程[M].北京:清华大学出版社,2007:111-116.

[6]杨会芹,姚文琳.一个可复用的表单验证类的设计与实现[J].华南金融电脑,2007(3):104-107.

[7]屠晓云.基于Struts的验证方式的研究[J].福建电脑,2008(11):51-52.

[8]Darie C,Brinzarea B,等.AJAX and PHP Web开发[M].王德民,王新颖,等译.北京:人民邮电出版社,2007.

[9]殷旭,廖斌,张志华,等.基于AJAX工作流表单的研究与应用[J].计算机应用与软件,2010,27(3):75-77.

[10]AJAX.百度百科[EB/OL].http://baike.baidu.com/view/99.htm?fr=ala0_1_1.

篇4:PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结

一:学习目标

(1)、掌握HTML表单格式

(2)、掌握各种表单元素的常用属性(3)、掌握各种表单元素的应用(4)、掌握$_POST/GET变量(5)、了解URL编码和BASE64编码(6)、掌握PHP的编码和解码函数

(一):表单数据的提交方式(1)、通过GET方式提交

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【PHP 学习笔记(二):表单:表单处理,表单验证,表单实例总结】相关文章:

php总结性学习笔记05-05

常见接口协议学习笔记总结05-09

学习十九大学习笔记09-02

党员学习笔记06-21

读书学习笔记04-17

校长学习笔记04-17

影视学习笔记04-23

纪要学习笔记04-30

学习三会一课学习笔记04-12

学习资料:学习新党章笔记05-10

上一篇:童年怪事作文下一篇:车间主任述职报告范文