2016-12-15 2 views
0

Я добавляю некоторый код в устаревший PHP, чтобы использовать filter_input_array() для проверки параметров по URL-адресу запроса AJAX.

Закодировав функцию, я, естественно, хотел ее протестировать.

Я нахожусь на работе, размещая о некотором коде, который я написал дома, поэтому были вынуждены воспроизвести основные моменты из воспоминаний. Этот код, однако, отражает проблему, которая у меня была дома (более ясным образом, чем мой домашний код).

Мой 'тест' быстро & грязный. Одна страница PHP неоднократно очищает $_GET (освобождая ее и обновляя ее), добавляет к ней некоторые параметры и вызывает filter_input_array().

Я начинаю задаваться вопросом, что действительно ...

<?php 
    echo('$_GET, at start of script<br>'); 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('unset($_GET), then dump it()obviously, we expect an error<br>'); 
    unset($_GET); 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('Now, define $_GEt as an array, and add a few items, and validate it<br>'); 
    $_GET = array(); 
    $_GET['one'] = 1; 
    $_GET['two plus two'] = 5; 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('Now, attempt to validate the $_GET<br>'); 

    $fileters = array('one' => FILTER_VALIDATE_INT, 
         'two plus two' => FILTER_VALIDATE_INT, 
         ); 

    $validateGet = filter_input_array(INPUT_GET, $fileters, false); 
    echo('Validation result = '); 
    var_dump($validateGet); 
?> 

дает

$ _GET, в начале массива сценария (0) {}

снята с охраны ($ _GET), затем сбрасываем его(), очевидно, ожидаем ошибку E_NOTICE:
тип 8 - неопределенная переменная: _GET - по строке 8 NULL

Теперь определите $ _GEt как массив и добавьте несколько элементов и подтвердите его.
array (2) {["one"] => int (1) ["two plus two"] => int (5)}

Теперь попытка для проверки $ _GET
проверки результата = NULL

1), что происходит не так с filter_input_array()?

2) почему возникает результат null, когда в документации указано, что это будет false при отказе? Кого я должен проверять? В настоящее время я использую if $validateGet === false

+0

это действительно плохая практика, чтобы использовать суперглобальные ('$ _GET, $ _POST, $ _REQUEST') таким образом. Вы должны использовать их как readonly vars. см. http://softwareengineering.stackexchange.com/a/76410/251694 –

+1

Документация также говорит 'или NULL, если переменная не установлена ​​', поэтому ваш' $ _GET' определенно не соответствует запросу 'filter_input_array'. –

ответ

1

Функция filter_input_array, похоже, не использует $_GET, поэтому изменения, выполненные в этом var, не используются функцией проверки.

Если вам действительно нужно изменить значение этого вар (которое, я думаю, не является хорошей практикой), вы должны заменить filter_input_array() на filter_var_array(). Эта функция использует модифицированную вар и дает ожидаемый результат

http://ideone.com/x5D3Pb

+0

Отличный ответ. Очевидно, что я не должен использовать «$ _GET» - это было только для тестирования и никогда не будет в производственном коде. – Mawg