我有一个简单的过滤功能,用于我从POST接收的数据,以及另一个变量(它将成为SESSION数组的一部分,但在开发中是自己的数组)。 POST数据由函数完全按预期处理,而另一个变量$sess['iid']
, 始终 失败。为什么呢?
我可以解决这个问题,但我不想理解为什么会这样。
过滤功能:
function filterNumber($fin) {
if( ctype_digit( $fin ) ) {
$fout = $fin;
} else {
$fout = 0;
}
return $fout;
}
我对命名变量很严格,因此将POST数组转移到$dirty[]
,然后通过将适当的过滤器应用于$clean[]
来生成$dirty[]
(用于进入数据库) 。完全相同的序列适用于$sess['iid']
。
每个阶段的例子:
$dirty['iid'] = $sess['iid'];
$dirty['liverpool'] = $_POST['liverpool'];
$clean['iid'] = filterNumber($dirty['iid']);
$clean['liverpool'] = filterNumber($dirty['liverpool']);
第一步 - $sess['iid']
到$dirty['iid]
- 就像POST变量一样。
但是第二个$dirty['iid']
到$clean['iid']
来自filterNumber()
会产生值0,无论我将$sess['iid']
放入什么内容。
如果我取消$dirty['iid']
步骤,也会发生这种情况。
答案 0 :(得分:1)
function filterNumber($fin) {
if( ctype_digit( $fin ) ) {
$fout = $fin;
} else {
$fout = 0;
}
return $fout;
}
$tests = array(
1,
'1',
'123',
123,
1.2,
'1.2',
'abc',
true,
false,
null,
new stdClass()
);
foreach ($tests as $test) {
echo 'Testing: ' . var_export($test, true) . ' - result: ' . filterNumber($test);
}
打印
Testing: 1 - result: 0
Testing: '1' - result: 1
Testing: '123' - result: 123
Testing: 123 - result: 0
Testing: 1.2 - result: 0
Testing: '1.2' - result: 0
Testing: 'abc' - result: 0
Testing: true - result: 0
Testing: false - result: 0
Testing: NULL - result: 0
Testing: stdClass::__set_state(array(
)) - result: 0