我有大量的表单字段(最后计数为34)遍布整个网站,所以我写了一个尽可能多的东西来进行批量验证,然后我会处理一个不太常见的项目。执行基础。
在某些 $_POST
键上,我需要检查该值是否为字母数字。
例如,需要检查$_POST['username']
。 $_POST['firstname']
不需要检查,因为它只能是字母(我们稍后会检查)。
我打算做类似下面的事情,但似乎我通过skippng这么多来创造很多开销,并且只检查5或6个值。
foreach($_POST as $key => $value){
if($key == 'descr'){ continue; }
if($key == 'imageUploads'){ continue; }
// etc
// etc
// etc
if(!ctype_alnum($value)){
$notAlNum[] = $key.' is not alphnumeric;
}
}
有没有其他方法可以做到这一点,而没有循环遍历整个post数组?
从答案拼凑起来这是我提出的解决方案,它很难看,但它确实有效。
if(in_array($_POST['userName'] || $_POST['pswd'] || $_POST['oldpswd'] || $_POST['activationCode'],$_POST)){
$toCheck = array($_POST['userName'],$_POST['pswd'],$_POST['oldpswd'],$_POST['activationCode']);
foreach($toCheck as $key => $var) {
if(empty($var)){ continue; }
if(!ctype_alnum($var)){
$errormsg[] = $var.' is not alphnumeric';
}
}
}
答案 0 :(得分:2)
只检查那几个变量
$toCheck = array('firstVar2Check','secondVar2Check',...);
foreach($toCheck as $var) {
if(!ctype_alnum($_POST[$var])){
$notAlNum[] = $var.' is not alphnumeric';
}
}
答案 1 :(得分:1)
您可以使用PHP的filter_input功能,而不是直接访问$ _POST。这允许您清理和验证数组的内容(例如,它是否是字母数字),并且通常被认为比直接访问数组更安全。例如:
$user = filter_input(INPUT_POST, 'user', FILTER_VALIDATE_REGEXP, ['options' => [
'regexp' => '/[a-z_\-0-9]/i']
]);
这确实意味着遵循与上面描述的模式略有不同的模式 - 现在您将在获取每个POST变量时进行验证。您只需要为每个变量决定如何进行santitize /过滤。
答案 2 :(得分:0)
为什么不创建要检查的键数组? e.g。
foreach([ 'username' => true, 'otherField' => false ] as $field => $required) {
if ((!isset($_POST[$field]) || strlen($_POST[$field])) == 0 && !$required) continue;
if (!isset($_POST[$field]) || strlen($_POST[$field]) == 0) {
$errors[] = "$field is required";
}
else if (!ctyle_alnum($_POST[$field])) {
$errors[] = "$field is not alphanumeric";
}
}
然后你不会浪费时间处理无关的数据