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']);

最初のステップ-to-は、POST変数と同じように機能します $sess['iid']$dirty['iid]

しかし、2番目の$dirty['iid']via$clean['iid']まで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 に答える