我想检查表单的安全性输入。 人们应该用“"允许","允许"或者'允许'。这3个答案都被接受了。
我尝试了下面的代码,但是如果我输入这3个答案中的一个,它就不会通过if
循环。我做错了什么?
if( ! isset($_POST['security']) || empty($_POST['security']) || $_POST['security'] != 'allow' || $_POST['security'] != 'Allow' || $_POST['security'] != 'ALLOW') {
$error .= "<p class=\"message-error\">" . $messages['security_invalid'] . "</p>";
}
答案 0 :(得分:3)
试试这个:
if( empty($_POST['security']) or strtolower($_POST['security']) != 'allow') {
$error .= "yaddayadaa";
}
使用empty()
足以检查它是否未设置,为空,或为零或为空。然后,只需将帖子小写,然后检查一次是否为allow
。
答案 1 :(得分:2)
当您尝试比较字符串值时,问题基本上就出现了。那是因为你需要像下面那样单独测试它:
if (!isset($_POST['security']) || empty($_POST['security']) || ($_POST['security'] != 'allow' && $_POST['security'] != 'Allow' && $_POST['security'] != 'ALLOW'))
实际上,字符串值可以是其中一个字符串,当然,如果allow
为$_POST['security'] != 'Allow'
,那么class UserClass {
var id : String?
var annot : MKPointAnnotation?
}
将会失败。
答案 2 :(得分:0)
$security = 'Allow';
var_dump($security != 'allow' || $security != 'Allow');
输出:
bool(true)
第一个比较$security != 'allow'
在上面评估为真,这会使表达式短路。
您可以将表达式重写为:
$security = 'Allow';
var_dump($security != 'allow' && $security != 'Allow' && $security != 'ALLOW');
输出:
bool(false)
这仍然有点笨拙。
您最终可能需要在多个地方检查错误。拆分验证可能有助于清理问题。
<?php
$security = isset($_POST['security']) ? $_POST['security'] : null;
$email = isset($_POST['email']) ? $_POST['email'] : null;
$errors = [];
if(!in_array($security, array('allow', 'Allow', 'ALLOW')))
$errors['security'] = 'Invalid security answer.';
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false)
$errors['email'] = 'Invalid email address.';
$has_errors = (bool) count($errors);
$error = '';
foreach($errors as $error)
$error .= "<p class=\"message-error\">" . $error . "</p>";