Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的PHP过滤系统有什么问题?_Php - Fatal编程技术网

我的PHP过滤系统有什么问题?

我的PHP过滤系统有什么问题?,php,Php,我有一个简单的过滤函数,用于我从POST接收的数据和另一个变量(它将是会话数组的一部分,但在开发中是在它自己的数组中)。POST数据完全按照预期由函数处理,而另一个变量,$sess['iid'],总是失败。为什么? 我可以解决这个问题,但我讨厌不理解为什么会发生这种情况 过滤功能: function filterNumber($fin) { if( ctype_digit( $fin ) ) { $fout = $fin; } else { $fout = 0;

我有一个简单的过滤函数,用于我从POST接收的数据和另一个变量(它将是会话数组的一部分,但在开发中是在它自己的数组中)。POST数据完全按照预期由函数处理,而另一个变量,
$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等数据超全局变量视为字符串。