1

对于从 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']via filterNumber(),结果为 0,不管我输入了什么$sess['iid']
如果我消除该$dirty['iid']步骤,也会发生这种情况。

4

1 回答 1

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

资源

于 2013-02-25T19:14:40.637 回答