我的PHP过滤系统有什么问题?
我有一个简单的过滤函数,用于我从POST接收的数据和另一个变量(它将是会话数组的一部分,但在开发中是在它自己的数组中)。POST数据完全按照预期由函数处理,而另一个变量,我的PHP过滤系统有什么问题?,php,Php,我有一个简单的过滤函数,用于我从POST接收的数据和另一个变量(它将是会话数组的一部分,但在开发中是在它自己的数组中)。POST数据完全按照预期由函数处理,而另一个变量,$sess['iid'],总是失败。为什么? 我可以解决这个问题,但我讨厌不理解为什么会发生这种情况 过滤功能: function filterNumber($fin) { if( ctype_digit( $fin ) ) { $fout = $fin; } else { $fout = 0;
$sess['iid']
,总是失败。为什么?
我可以解决这个问题,但我讨厌不理解为什么会发生这种情况
过滤功能:
function filterNumber($fin) {
if( ctype_digit( $fin ) ) {
$fout = $fin;
} else {
$fout = 0;
}
return $fout;
}
我对变量的命名要求很严格,因此POST数组被转换成$dirty[]
,然后通过对$dirty[]
应用适当的过滤器生成$clean[]
(用于进入数据库)。完全相同的序列应用于$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()
,无论我在$sess['iid']中输入了什么,结果都是0
如果我消除$dirty['iid']
步骤,也会发生这种情况
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
资源
印刷品
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
资源
展示你的$dirty['iid']
的var_dump()
。到底是什么?如果$dirty['iid']
仅包含数字,则它会按预期输出数值。数值必须仅为整数,不能与float一起使用。“另一个变量($sess['iid']
)总是失败”。它不应该总是失败,代码没有问题。但是,您期望代码执行的操作可能与它正在执行的操作不同。e、 g.@psu说什么。展示你的$dirty['iid']
的var\u dump()
。到底是什么?如果$dirty['iid']
仅包含数字,则它会按预期输出数值。数值必须仅为整数,不能与float一起使用。“另一个变量($sess['iid']
)总是失败”。它不应该总是失败,代码没有问题。但是,您期望代码执行的操作可能与它正在执行的操作不同。e、 g.@psu所说的。这是我所期望的。如果我将输入值更改为“1”而不是1,则函数会显示“是”。这一定意味着数据库的输出也被解释为“x”,而不是x(它们出现在我的变量转储中)。但为什么会这样呢?我从中学到的教训是,PHP将从数据库检索到的所有数据视为字符串,即使这些数据仅由数字组成,并且来自数据库中的INT列。我想我需要调整变量转储函数来显示每个变量的类型及其值。。。实际上是转储类型,我已经更新了答案,包括类型boolean和object<代码>变量导出
有一些怪癖,例如它在对象上调用。您也可以使用。另外,请记住,PHP也将GET和POST等数据超全局变量视为字符串。如果我将输入值更改为“1”而不是1,则函数会显示“是”。这一定意味着数据库的输出也被解释为“x”,而不是x(它们出现在我的变量转储中)。但为什么会这样呢?我从中学到的教训是,PHP将从数据库检索到的所有数据视为字符串,即使这些数据仅由数字组成,并且来自数据库中的INT列。我想我需要调整变量转储函数来显示每个变量的类型及其值。。。实际上是转储类型,我已经更新了答案,包括类型boolean和object<代码>变量导出有一些怪癖,例如它在对象上调用。您也可以使用。另外,请记住,PHP也将GET和POST等数据超全局变量视为字符串。