相信一开始大家都做过留言板类似的功能,主要就是接受变量,然后对变量进行处理,然后写入到数据库当中!但是如果是真是的线上的类似留言板的功能,我们需要对用户输入的参数进行过滤和校验,这个过程中,一开始的我们都会使用if进行判断,当然中间还需要考虑sql注入、xss攻击这些,sql注入的话我们可以使用pdo进行参数绑定然后进行过滤处理,xss攻击的话最简单的我们选择php htmlspecialchars 将html字符,转换成html实体,这样特殊字符就不能执行了,好了,我们继续上面的,我们一般会使用if进行判断,如下代码所示:
<?php $userlevel = (string)$_POST['userlevel']; //限制条件 string vip/svip/normal $age = (int)$_POST['age']; // 非空 int 1-100 $sex = (string)$_POST['sex']; //非空 string 男/女 $num = (int)$_POST['num']; //非空 int 1001 - 2000 //上面的所有接受的字段都需要进行检查 if ($userlevel != 'vip' || $userlevel != 'svip' || $userlevel != 'normal') { echo '用户等级参数输入不合法'; return false; } if ($age < 1 || $age > 100) { echo 'age输入参数不合法'; return false; } if ($sex != '男' || $sex != '女') { echo '性别输入参数不合法'; return false; } if ($num < 1001 || $num > 2000) { echo 'num参数输入不合法'; return false; }但是我们如果一个表单需要接受10几个参数,而且有的字段的限制规则都是一样的,我们是不是可以把这些验证规则给抽出来,放到一个方法里面,然后进行调用,因为我们项目中都是使用类的形式,我们可以使用下面这种方式,将校验规则放到数组里面,然后将变量一个类型的校验规则放到一个数组中,使用foreach遍历这个数组,然后匹配rule数组中的各自规则进行校验和分析,具体代码如下:
<?php class FormCheck { protected $rule = [ 'userlevel' => [ 'vip', 'svip', 'normal', ], 'age' => [ 'min' => 1, 'max' => 100, ], 'sex' => [ '男', '女', ], 'num' => [ 'min' => 1001, 'max' => 2000, ], ]; //这里只是表示接受参数的意思,具体post接受根据自己选择的框架来使用 $param['userlevel'] = (string)$_POST['userlevel']; //限制条件 string vip/svip/normal $data['age'] = (int)$_POST['age']; // 非空 int 1-100 $param['sex'] = (string)$_POST['sex']; //非空 string 男/女 $data['num'] = (int)$_POST['num']; //非空 int 1001 - 2000 //上面的所有接受的字段都需要进行检查 foreach ($param as $key => $value) { if(!$this->check($key,$valu)){ echo '输入参数不合法'; return false; } } foreach($data as $key => $value) { if(!this->checkLength($key,$value)) { echo '参数长度输入错误'; return false; } } public function check($key, $value) { if(!in_array($this->rule[$key], $value)) { return false; } return true; } public function checkLength($key, $value) { $len = strlen($value); if ($len < $this->rule[$kye]['min'] || $len > $this->rule[$key]['max']) { echo '输入长度不合法'; return false; } } }这只是一个小小的技巧,一开始自己写了很多if,同事看到了说可以这样写,发现这样写的话,别人看你的代码会更加清晰,代码量也会少很多,还有这些我印象中tp或者其他框架都是这样做的,说明自己还是写和看php代码太少了,需要有空看一下框架的源代码,看一下框架里面是怎么处理这些东西的,看看laravel是如何处理这些东西的。