php接受post/get变量进行校验和判断

相信一开始大家都做过留言板类似的功能,主要就是接受变量,然后对变量进行处理,然后写入到数据库当中!但是如果是真是的线上的类似留言板的功能,我们需要对用户输入的参数进行过滤和校验,这个过程中,一开始的我们都会使用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是如何处理这些东西的。


猜你喜欢

转载自blog.csdn.net/zpf_nevergiveup/article/details/79055622