入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

关于Thinkphp的自动验证create()函数的问题

创建时间:2016-09-27 投稿人: 浏览次数:945

我们使用手册的时候会看到手册上显示的是以下的代码

  1. protected $_validate= 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. );


  1. $User = D("User"); // 实例化User对象
  2. if (!$User->create()){
  3. // 如果创建失败 表示验证没有通过 输出错误提示信息
  4. exit($User->getError());
  5. }else{
  6. // 验证通过 可以进行其他数据操作
  7. }

但是当我们自己写的时候会发现验证时会出现问题,如果我们这样写 if(!$User->create()),再验证的时候就会出现逻辑错误,拿密码和确认密码的例子说一下,如果我们在两个输入框中(输入密码 ,重复输入密码)输入的不一致时,我们得到的是模型里的提示信息即上边的确认密码不正确,但是我们输入的密码和确认密码一致时,虽然不提示密码不一致但是也不会提示密码一致,继续进行的提示等,很懵逼哈,这是为什么呢,我们用谷歌调试的时候不会发现任何问题,代码是正确的,问题出在哪呢,我找了一下,原来是因为create()函数返回的值不仅有true 或者 false两种还会返回空数组等,这就导致了我们的逻辑错误,虽然我们没有输入并不一致,但是用 if(!$User->create()) 这种验证的时候$User->create()返回的是一个空 ‘!’非一下就会认为值为true 或者 1 ,就会继续走exit($User->getError());这条语句,

所以就不会得到我们想要的结果。改正的方法就是将    if(!$User->create())改为false===$User->create()就正确了,这样会限制一下返回值的类型,自然就会验证正确了



声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。