tinkphp是国内非常流行的一个开源框架,国内大小公司都在用的框架。对于初学的好多同学感觉不太好上手,其实并没没有大家想的那么复杂。自动验证功能是thinkphp提高的一种数据验证方法,分为动态和静态两种方式。但是无论什么验证方式,验证的规则都是一样的。具体的规则如下:

规则是一个二维数组的格式     array(

array("验证字段","验证规则","错误提示","验证条件","附加规则","验证时间"),

array("验证字段","验证规则","错误提示","验证条件","附加规则","验证时间")

);

数据验证的前三条是必须的,后三条是可选的。

1. 验证字段可以是数据库字段,也可以是自己表单定义的字段。(必须)

2. 验证规则可以使用正则,也可以使用一些系统内置的方法,例如:require 字段必须,email邮箱,url地址等。(必须)

3. 提示信息就是验证失败后提示的内容。(必须)

4. 验证条件seft::EXITS_VALIDATE 或者 0 存在字段就验证    seft::MUST_VALIDATE 或者1 必须验证   seft::VALUE_VALIDATE 或者2 值不为空验证。(可选)

5. 附加规则配合规则使用,包括一些规则,例如:regex,验证规则必须是一个正则表达式。function,验证规则必须是一个函数。unique,验证是否唯一。更多的可以去thinkphp开发文档去看。(可选)

6. 验证时间 MODEL_INSERT 或者1 添加数据验证, MODEL_UPDATE 或者2 编辑数据验证, MODEL_BOTH 或者3 都验证。(可选)

知道了规则,我们可以自己尝试写一写,首先可以先一个静态的:

class UserModel extends Model{

protected $_validate = array(

array("verify","require","验证码不能为空!");

array("name"," ","用户名已存在!",0,unique,1); //新增是验证用户是否唯一

array("value",array(1,2,3),"值不在范围内!",2,in); //值是否在范围内

array("repassword","password","密码不正确!",0 ,confirm) //验证确认密码是否和密码一致

array("password","checkpasswd","密码格式不正确",0 ,function) //验证密码格式格式是否正确

);

}

定义好验证规则以后,直接就可以用了:

$user = D("User");

$data = getData();  /获取的表单数据

if(!$user->create()){

//没有通过验证

exit($user->getErro());

}

默认情况下,create方法是对表单提交的POST数据进行自动验证,如果你的数据来源不是表单post,仍然也可以进行自动验证。

动态验证:

动态验证就比较简单了,将上面的规则赋值给一个变量,把变量赋值给validate()方法中,如下:

  1. $rules = array(
  2. array('verify','require','验证码必须!'), //默认情况下用正则进行验证
  3. array('name','','帐号名称已经存在!',0,'unique',1), // 在新增的时候验证name字段是否唯一
  4. array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内
  5. array('repassword','password','确认密码不正确',0,'confirm'), // 验证确认密码是否和密码一致
  6. array('password','checkPwd','密码格式不正确',0,'function'), // 自定义函数验证密码格式
  7. );
  8. $User = M("User"); // 实例化User对象
  9. if (!$User->validate($rules)->create()){
  10. // 如果创建失败 表示验证没有通过 输出错误提示信息
  11. exit($User->getError());
  12. }else{
  13. // 验证通过 可以进行其他数据操作
  14. }

tinkphp中的自动验证的更多相关文章

  1. model中的自动验证 $_validate $_auto

    普通模式: <?php class UserModel extends RelationModel{ /**自动验证**/ protected $_validate = array( /**ar ...

  2. Thinkphp 中的自动验证 上一篇有例子

    说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. 说明:这里没练习静态自动验证:如果用到静态验证首先自定义一个控制器,再在Model ...

  3. thinkphp中的自动验证

    array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等.有 ...

  4. thinkphp自动验证---$_validate

    thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...

  5. ThinkPHP 自动验证与自动填充无效可能的原因(转)

    自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...

  6. ThinkPHP 自动验证与自动填充无效可能的原因

    原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...

  7. thinkPHP中服务器端的验证

    <?php class UserModel extends Model{ //user是表的名称 必须以表名开始,继承Model类 protected $_validate=array( //a ...

  8. thinkphp自动验证中的静态验证和动态验证和批量验证

    1.静态定义 在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义. 举例说明,我们在模型类里面定义了$_validate属性如下: class UserModel extends Model ...

  9. ThinkPHP中create()方法自动验证表单信息

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证 ...

随机推荐

  1. Socket中常见的几个转换函数(htonl,htons,ntohl,ntohs,inet_addr,inet_ntoa)

    Socket中常见的几个转换函数(htonl,htons,ntohl,ntohs,inet_addr,inet_ntoa) htonl() htons() ntohl() ntohs()及inet_n ...

  2. DAY7-面向对象之多态与多态性

    一.多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abs ...

  3. python爬虫框架(1)--框架概述

    框架概述 其中比较好用的是 Scrapy 和PySpider.pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面.S ...

  4. sizeof总结

    1.sizeof常用总结 ①与strlen比较       strlen 计算字符串的字符数,以"\0"为结束判断,但不统计结束符.   sizeof 计算数据(数组.变量.类型. ...

  5. MySQL存储引擎 -- MyISAM 与 InnoDB 实现

    一.MyISAM索引实现MyISAM引擎使用B树作为索引结构,叶节点的data域存放的是数据记录的地址. MyISAM主键索引这里设表一共有三列,假设我们以Col1为主键,Col2为辅助索引.则下图是 ...

  6. 推荐两款富文本编辑器:NicEdit和Kindeditor

    做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多.下面要推荐的两款富文本编辑器都是使用JS编 ...

  7. Mysql date, time, timestamp日期时间相关

    date: 格式:YYYY-MM-DD,时间范围:[0000-00-00, 9999-12-31],存储空间:3bytes time: 格式:HH:MM:SS,时间范围:[00:00:00, 23:5 ...

  8. wpf仿qq边缘自动停靠,支持多屏

    wpf完全模仿qq边缘自动隐藏功能,采用鼠标钩子获取鼠标当前状态,在通过当前鼠标的位置和点击状态来计算是否需要隐藏. 以下是实现的具体方法: 一.鼠标钩子实时获取当前鼠标的位置和点击状态 /// &l ...

  9. emr问题处理

    --通过his病历号查询emr中对应的患者ID --通过患者ID找出患者所有的病历集合ID --通过病历集合查找患者所有的病历 --通过病历dataID查找对应的病历数据,病历存在大字段中 '; -- ...

  10. 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...