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

时间:2013-02-25 18:56:49

标签: php

我有一个简单的过滤功能,用于我从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']步骤,也会发生这种情况。

1 个答案:

答案 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

资源