字段太多,手动验证太费劲
需要重复的地方,自动化完成
验证规则:
1.必须检测字段
2.有字段则检测,无此字段则不检测,如性别,没有则不检测,有则必定是男女之一
3.如有内容不空 ,则检查,如签名档,非空,则检查长度
在Model增加增加自动验证功能
protected $valid = array();//验证规则 protected $error = array(); /* * 验证的规则: * 格式: * $this->_valid = array( * array('要验证的规则字段名', * 0/1/2 验证的场景, * '报错提示', * 'require/in(几种情况)/between(范围)/length(某个范围) ') * ) * * protected $valid = array( array('goods_name',1,'商品名不能为空','require'), array('cat_id',1,'必须是整形值','number'), array('is_new',0,'is_new只能是0或1','in','0,1'), array('goods_brief',2,'商品简介应在10到100字符','length','10,200') ) 验证没通过,添加检验未通过的报错提示 无论那一条未通过,都不能通过 */ public function _validate($data){ if(empty($this->valid)){ return true; } $this->error = array(); foreach($this->valid as $k=>$v){ switch($v[1]){ //1 必须检测 case 1: if(!isset($data[$v[0]]) ){ $this->error[] = $v[2]; return false; } if(!$this->check( $data[$v[0]],$v[3]) ){ $this->error[] = $v[2]; return false; } break; //0 有则检测,调用check(),传递值,规则,参数 case 0: if(isset($data[$v[0]])){ if(!$this->check($data[$v[0]],$v[3],$v[4] )){ $this->error[] = $v[2]; return false; } } break; //2 如果有,且非空则检测 case 2: if(!isset($data[$v[0]]) && !empty($data[$v[0]])){ if($this->check($data[$v[0]],$v[3],$v[4])){ $this->error[] = $v[2]; return false; } } } } return true; } public function getErr(){ return $this->error; } /* *验证规则讨论 * */ protected function check($value,$rule='',$parm=''){ switch($rule){ //验证是否为空,值为空为真,取反为假 ,即如果结果为空,则返回假 case 'require': return !empty($value); //不需要break,因为使用了return // 判断 case 'number': return is_numeric($value); //在某几个可选的范围内,0,1 把数据拆成数组,判断数组是否在数组中 case 'in': $tmp = explode(',',$parm); return in_array($value,$tmp); //在那个范围内,10,100 拆成数组,赋给两个值,判断和最大最小的比较结果 case 'between': list($min,$max) = explode(',',$parm); return $value>=$min && $value<=$max; //验证字符长度,长度拆成数组,赋给两个值,判断字符长度要在字符长度要求内 case 'length': list($min,$max) = explode(',',$parm); return mb_strlen($value,'UTF-8')>=$min && mb_strlen($value,'UTF-8')<=$max; default: return false; } } |
在GoodsModel.class.php增加
/*验证规则: 0 可以不填,但是有必须验证 1 必须验证: */ protected $valid = array( array('goods_name',1,'商品名不能为空','require'), array('cat_id',1,'必须是整形值','number'), array('is_new',0,'is_new只能是0或1','in','0,1'), array('goods_brief',2,'商品简介应在10到100字符','length','10,200') );//验证规则 |
在goodaddAct.php增加
//自动验证 if(!$goods->_validate($data)){ echo implode('<br/>',$goods->getErr()); echo '数据不合法<br/>'; exit; } |