Преодоление предупреждения в NetBeans — не используйте массив Superglobals напрямую $ _GET

У меня есть несколько строк кода, как это;

A.

    if ( isset($_GET["logout"]) && $_GET["logout"] == 1){
do_something;
}

Я заменяю на (чтобы избавиться от предупреждения);

B.

    if ( isset( filter_input(INPUT_GET,'logout',FILTER_SANITIZE_NUMBER_INT)  ) &&
filter_input(INPUT_GET,'logout',FILTER_SANITIZE_NUMBER_INT) == 1){
do_something;
}

но я заканчиваю тем, что ломаю приложение с B. Экран входа в систему даже не появляется. В журнале ошибок apache также нет ошибок.

Это образец URL;

 http://192.168.0.91/test-app/?logout=1

Что не так с моим синтаксисом / кодом B. Я предполагаю, что я использую filter_input неправильно?

Update1:

версия php -> php5-5.4.20-34.3.x86_64
версия NetBeans -> 8.0.1

1

Решение

  1. В A. нет ничего плохого. Отключите подсказку в Netbeans или проигнорируйте ее.

  2. Нет, с Б. все в порядке filter_input возвращается null если ключ не существует, и isset вернусь false если условие null, так что ваша логика в порядке, и использование функции тоже. Единственная проблема может заключаться в том, что ваша версия PHP слишком старая. Фильтр_вход был введен в 5.2.0.

1

Другие решения

Код Б. был исправлен путем изменения на;

if ( filter_input(INPUT_GET,"logout",FILTER_SANITIZE_STRING) !== null &&
filter_input(INPUT_GET,"logout",FILTER_SANITIZE_INT)==1) {
dosomething;
}

Приложение работает нормально сейчас.

Вдохновением для этого исправления является фантастическая статья в http://kunststube.net/isset/ Дэвид Зентграф.
Хотелось бы, чтобы был способ связаться с ним, чтобы поблагодарить его, но … очевидно, он здесь постоянный.

Спасибо Бро 🙂

0

По вопросам рекламы [email protected]