我有这段代码:
$range = array (
'options' => array (
'min_range' => 0,
'max_range' => 10
)
);
if (!$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range)) {
exit ('Error');
}
“数字”输入将从包含0到10的选项发送。
问题是如果number = 0,则返回“Error”。
这有什么问题?
由于
答案 0 :(得分:9)
这是因为!0
是真的。为什么?通过添加!
,您正在进行布尔检查,因此您的变量将被转换。根据{{3}}:
转换为布尔值时,以下值被视为
FALSE
:
布尔值
FALSE
本身整数
0
(零)浮动
0.0
(零)空字符串,字符串
"0"
...
所以整数0
转换为false
,而所有其他整数都转换为true
。
这就是为什么您需要为false
或null
执行manual的原因,因为如果由于某种原因失败,filter_input()
会返回值。
$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range);
if ($number === false) {
//filter failed
}
if ($number === null) {
//variable was not set
}
答案 1 :(得分:0)
我找到了解决方案!
if (
!$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range) === 0
|| !filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range) === FALSE)
{
exit ('Error');
}