博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP框架表单验证
阅读量:5268 次
发布时间:2019-06-14

本文共 4429 字,大约阅读时间需要 14 分钟。

对注册到test表的表单进行验证 

在注册之前要对表单进行验证:

用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证。

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。

数据验证可以进行数据类型、业务规则、安全判断等方面的验证操作。

数据验证有两种方式:

  1. 静态方式:在模型类里面通过$_validate属性定义验证规则。
  2. 动态方式:使用模型类的validate方法动态创建自动验证规则。

无论是什么方式,验证规则的定义是统一的规则,定义格式为:

  1. array(
  2. array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
  3. array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
  4. ......
  5. );
验证字段 (必须)

需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。

验证规则 (必须)

要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的规则,可以直接作为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。

提示信息 (必须)

用于验证失败后的提示信息定义

验证条件 (可选)

包含下面几种情况:

  • self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
  • self::MUST_VALIDATE 或者1 必须验证
  • self::VALUE_VALIDATE或者2 值不为空的时候验证 
附加规则 (可选)

配合验证规则使用,包括下面一些规则:  

规则 说明
regex 正则验证,定义的验证规则是一个正则表达式(默认)
function 函数验证,定义的验证规则是一个函数名
callback 方法验证,定义的验证规则是当前模型类的一个方法
confirm 验证表单中的两个字段是否相同,定义的验证规则是一个字段名
equal 验证是否等于某个值,该值由前面的验证规则定义
notequal 验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)
in 验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串
notin 验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串(3.1.2版本新增)
length 验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12 表示长度从3到12的范围)
between 验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)
notbetween 验证不在某个范围,定义的验证规则表示范围,可以使用字符串或者数组(3.1.2版本新增)
expire 验证是否在有效期,定义的验证规则表示时间范围,可以到时间,例如可以使用 2012-1-15,2013-1-15 表示当前提交有效期在2012-1-15到2013-1-15之间,也可以使用时间戳定义
ip_allow 验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
ip_deny 验证IP是否禁止,定义的验证规则表示禁止的ip地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值,当表单数据中包含主键字段时unique不可用于判断主键字段本身
验证时间(可选)
  • self::MODEL_INSERT或者1新增数据时候验证
  • self::MODEL_UPDATE或者2编辑数据时候验证
  • self::MODEL_BOTH或者3全部情况下验证(默认)

这里的验证时间需要注意,并非只有这三种情况,你可以根据业务需要增加其他的验证时间。

验证有两种方式:静态验证与动态验证。

一、静态验证 

在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义。

验证时要在test表的Model里面加验证条件:新建testModel.class.php,在模型类里面定义了$_validate属性如下:

定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用:

assign("error",$cw); $this->display(); } else { $model = new \Home\Model\testModel(); //$model = D("test"); //动态验证可以用D方法 if(!$model->create()) { $e = $model->getError(); $url = "ZhuCe/cw/{$e}"; $this->error("注册失败!",$url,1); } else { $model->add(); }

模板ZhuCe.html:

用户名:
密码:
确认密码:
年龄:
邮箱:
姓名:
<{$error}>

请求ZhuCe方法:

   

二、动态验证

如果采用动态验证的方式,就比较灵活,可以根据不同的需要,在操作同一个模型的时候使用不同的验证规则,例如上面的静态验证方式可以改为:

display(); } else { //$model = new \Home\Model\testModel(); $model = D("test"); //动态验证可以用D方法 //动态验证 $rules = array( array('uid','require','用户名不能为空') ); //调用validate()加入验证规则 $r = $model->validate($rules)->create();//若验证失败返回false,成功返回注册的test表数组信息 //var_dump($r); if(!$r) { echo $model->getError(); //若验证失败则输出错误信息 } else { $model->add(); } } }

我们还可以在表单后面直接显示错误提示,这就要用到ajax。以验证用户名非空为例:

在模板ZhuCe.html中:

  
用户名: 
密码:  
确认密码:
年龄:  
邮箱:  
姓名:  

在ZhuCe控制器中再做一个Yhm方法:

//验证用户名非空    function Yhm()    {        $model = D("test");            $rules = array(                array('uid','require','用户名不能为空')            );                        if(!$model->validate($rules)->create())            {                $fh = $model->getError();                $this->ajaxReturn($fh,'eval');  //ajax返回数据,默认返回json格式,eval返回字符串,因为dataType是TEXT,所以用eval格式            }            else            {                $fh = "OK";                    $this->ajaxReturn($fh,'eval');            }    }

请求ZhuCe方法:

   

其他验证也是类似的方法,提交相应数据到对应方法,使用相应的验证规则。

 

Where is a will ,there is a way!

转载于:https://www.cnblogs.com/chenduzizhong/p/7953662.html

你可能感兴趣的文章
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>