当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

5.5共通功能——使用Zend_Validate进行输入数据的检查

9/17/2020 9:43:31 PM 人评论

5.5共通功能——使用Zend_Validate进行输入数据的检查

5.5 共通功能——使用Zend_Validate进行输入数据的检查

在上一节中已经提到过,当终端用户将浏览器上的JavaScript等脚本检查设置为禁用时,再完美的客户端输入检查都将不被执行了。这样怀有恶意的用户,就能将各种非法的数据登录到数据库中了,这对网站的安全是很大的威胁。

因此,客户端脚本检查尽管有速度快等优点,光有客户端脚本检查是很不够的,有时候必须在服务器端再追加与客户端脚本一样的检查。本节将介绍如何使用Zend_Validate组件来编写服务器端检查程序,如图所示。

alt

要点

CheckUtil.class.php与上一节的CheckUtil.js一样,是集中了进行输入数据检查方法的功能性类。

Zend Framework中有检查用的组件Zend_Validate,单独使用它,不是太好使用。本节中将利用Zend_Validate的检查功能,然后加上错误信息以及其错误的显示功能,来完成整个检查类。表5-3所示的是CheckUtil.class.php中定义的方法。

表5-3 CheckUtil.class.php中定义的方法

alt

CheckUtil.class.php是功能型类,使用方法请见本节后的补充资料。

目录结构

alt

代码

alt

定义放置错误信息的变量$_error。

alt

定义毁坏方法,在其中加入关闭数据库连接。

alt

定义构造方法,在构造方法中初始化错误信息容纳变量。

alt

取得/设定私有变量$error值得访问方法。setError方法在数组的最后追加指定的错误信息。

alt

数组$this->_error中含有错误信息(错误信息的数目1以上)的情况下,将数组放置到模板变量errors中,且调用error.tpl来显示错误信息,最后终止处理。此处特意以comment的方式保留了一段代码,其实不仅可以将错误信息显示在错误页面上时,也可以以字符串的形式返回,再以其他形式显示出来。这段代码就是将错误信息转化为字符串的。

alt

checkError方法是各个XxxxCheck方法中内部调用的私有方法。将Zend_Validate_Xxxx对象与检查对象值以参数传入,进行值的合法性检查。

如果发生输入错误,使用getMessages方法取得所有的错误信息,并用循环将错误信息放置到$_error数组中。

alt

requiredCheck方法对文字输入框等进行必须输入检查。没有输入时,将显示错误信息。使用setMessage方法事先设置发生错误时的错误信息。实际的检查由私有方法checkError完成。后面的其他检查函数都是相同的过程。

alt

lengthCheck方法对输入字符串进行是否超过了指定长度的检查。Zend_Validate_StringLength类提供字符串长度的检查。此类本来是用来检查最大与最小长度的,此处将最小长度设为0。

另外,请注意在错误提示信息中是否含有“%max%”的字符串。这是Zend_Validate中设置的预约位置,会自动置换为检查对象字符串。可使用的预约位置,随着Zend_Validate_Xxxx类的不同而不同,可参照本节后的补充资料。

alt

numberTypeCheck方法进行是否是数字的检查。数字检查具体由Zend_Validate_Digits类完成。

alt

dateTypeCheck方法是进行日期格式的数据检查的。具体由Zend_Validate_Date类来完成日期格式的检查。

alt

与上面的dateTypeCheck方法一样,dateNumberTypeCheck方法也进行日期型数据检查,不同的是此方法可以指定年月日。

alt

rangeCheck方法是对数据进行是否在指定数值范围检查。具体的检查工作由Zend_Validate_Between类来完成。

alt

regExCheck方法用于检查字符串是否符合给定的正则表达式。可用于E-mail或URL等复杂字符的检查。正则表达式检查功能由Zend_Validate_Regex类提供。

alt

compareCheck方法是进行大小比较检查的,当第一个值$value1大于等于第二个值$value2,则返回错误信息。

alt

checkUser方法是自定义函数,判断指定的用户名是否已经被注册。

alt

checkMail方法也是自定义函数,判断指定的邮件地址是否已经登录。

alt

duplicateCheck是进行判断是否重复登录的方法。自定义。

alt

错误发生时,用于显示错误信息的共通页面。利用JavaScript的功能打开显示错误信息的窗口,并在该窗口中显示收集到的所有错误信息。

alt

补充

注意事项

Zend_Validate组件中的Zend_Validate_StringLength类的内部,使用了iconv_strlen函数来取得字符串长度。iconv_strlen函数是利用php.ini中的iconv.internal_encoding参数中设定的字符代码来换算字符串长度的。因此使用时,千万要注意设定iconv.internal_encoding参数。

如果按照第1章介绍的步骤进行环境配置的话,不用进行其他额外的特别配置了。

CheckUtil.class.php的使用方法

alt

上述的使用过程都是一些固定模式,使用CheckUtil.class.php时,就算检查的项目数目增加,程序的修改也非常单纯。

Zend_Validate组件提供的检查功能

在Zend_Validate组件中,根据检查的内容不同,提供了各种各样的Validate类(Zend_Validate_Xxxxx),下面罗列了Zend_Validate组件中可以利用的各种Validate类。

列表中的类名是除了“Zend_Validate_”外的名称,另外,参数是传给Validate类的构造方法的。Zend_Validate组件如表5-4所示。

表5-4 Zend_Validate组件一览

alt

在Zend_Validate组件中,可能含有留有与检查参数对应的留置位(place holder)的错误信息(例如,对Zend_Validate_GreaterThan类来说,错误信息中含有“%min%”的留置位)。

在Validate类中设定了必要的参数后,使用isValid方法来判断检查是否成功。如果发生了错误,可用getMessages方法取得错误信息。

Validat类的错误信息

在前面的CheckUtil.class.php文件中,调用Validate类的getMessage方法时,有时会返回多个错误信息,请务必注意。

表5-5列举了Validate类中的错误信息种类。

表5-5 Validate类中的错误代码种类

alt

错误代码是,setMessage方法中设定错误信息时,为识别错误种类用的代码。

参照CheckUtil.class.php文件中的第47行,在setMessage方法的第2参数指定错误代码后,就能为特定错误设定特定的错误信息。第2参数省略时,按照默认的错误代码设定错误信息。


知识专栏:PHP的开发支援环境——Zend Studio for Eclipse

在PHP应用程序的开发过程中,如果想导入简单的IDE,4.10节后介绍的Aptana Studio是一个很好的选择。但是,Aptana Studio的正式版本刚刚发布,还有很多让用户不满意的不足的地方。

这样,如果确实想在PHP的应用程序开发时使用IDE,你还可以选择Zend Studio for Eclipse(http://www.zend.com/product/eclipse.html)。

Zend Studio for Eclipse具备了从代码自动生成、HTML WYSIWYG编辑器、单元测试、代码管理、探查等开发时需要的主要功能,以及优秀的开发环境。标准对应使用Zend Framework进行开发。进行真正的PHP综合应用系统的开发工作时,Zend Studio for Eclipse是个不错的选择。


相关教程

共有条评论 网友评论

验证码: 看不清楚?