thinkphp 3.2.2 建议:给自动验证增加查询验证;很多时候都需要根据查询数据库判断某个值的状态或者值是否正确,在项目中很多地方都要用到。
例如:查询某个账户是否已被禁用,安全邮箱正确与否,等等。自动验证规则如下:
array('active','username','该账户已经禁用!',1,'inquiry',3),
array('email','username','安全邮箱不正确!',1,'inquiry',3),
其中,active和email是需要验证的字段,username是需要查询的验证条件。下面的是提交的表单:
array(4) {
["username"] => string(5) "admin"
["email"] => string(15) "admin@admin.com"
["password"] => string(5) "admin"
["repassword"] => string(5) "admin"
}
通过表单获取查询条件$map['username']='admin';用getField取得需要验证字段的值,即active和email的值;在提交的表单中, 没有active的值,但是有email的值,因此可以区别对待:对active,根据数据库中已经查到的值确定真假并返回;对email,判断表单中提交的
值与数据库中查询到的值判断是否相等并返回;
代码修改位置:ThinkPhp\Library\ThinkModel.class.php 1144行添加如下代码即可;
case 'inquiry': //验证某个值的状态或者值是否正确
$map[$val[1]] = $data[$val[1]];
$res=$this->where($map)->getField($val[0]);
if($data[$val[0]]){
if($res==$data[$val[0]]) return true;return false;
}else{
if($res) return true;return false;
}
最佳答案