проверка, если filter_input возвращает false

В документации для filter_input() упоминается:

Значение запрошенной переменной в случае успеха, FALSE, если фильтр не работает, или NULL, если переменная variable_name не установлена.

Изучив различные примеры в Интернете, я был удивлен, увидев, что ни один из них (по крайней мере, о которых я знаю) не проверял значение FALSE. В большинстве примеров проверяется только значение NULL:

if ( is_null( filter_input( INPUT_POST, 'name', FILTER_SANITIZE_STRING ) ) ) {
   // display error
}

Есть причина для этого ? Или есть реальный пример, который проверяет значение FALSE? Если да, не могли бы вы привести пример, чтобы я мог извлечь из него пользу.

Кроме того, не могли бы вы указать обстоятельства, при которых filter_input мог бы дать сбой. Очень признателен.


person Grateful    schedule 29.09.2014    source источник
comment
Я спрашивал о причине, по которой большинство людей не проверяют значение FALSE при работе с filter_input. - Иногда люди просто странные животные, мы не знаем, почему некоторые проверяют, а некоторые нет. .   -  person Funk Forty Niner    schedule 29.09.2014
comment
Спасибо за юмор, но возвращаясь к моему вопросу... есть ли у вас примеры, где FALSE проверяется на ? Во-вторых, при каких обстоятельствах filter_input может выйти из строя?   -  person Grateful    schedule 29.09.2014
comment
Это было 50% юмора и 50% серьезности (приятно видеть, что у вас есть чувство юмора) ;) Я не могу привести вам пример того, где проверяется FALSE. Взгляните на следующие вопросы и ответы в стеке; Я думаю, что это может надеюсь ответить на ваш вопрос stackoverflow.com/q/23392128 - Edit : Почему это, скорее всего, не удастся? Я бы сказал/думаю, что это будет зависеть от установленных параметров фильтра.   -  person Funk Forty Niner    schedule 29.09.2014
comment
Так же, как ссылка, приведенная ниже sitepoint.com/input-validation-using-filter -functions заявляет - Главная ошибка заключается в том, что функции хороши настолько, насколько хорош фильтр, который вы к ним применяете. Итак, согласно моему отредактированному комментарию выше, я был прав (подмигнул). Надеюсь, мы ответили на ваш вопрос.   -  person Funk Forty Niner    schedule 29.09.2014


Ответы (1)


Это потому, что !0 истинно. Почему? Добавив ! вы выполняете логическую проверку, поэтому ваша переменная преобразуется. И согласно руководству:

При преобразовании в логические значения следующие значения считаются FALSE:

the boolean FALSE itself

the integer 0 (zero)

the float 0.0 (zero)

the empty string, and the string "0"

Таким образом, целое число 0 преобразуется в false, а все остальные целые числа преобразуются в true.

Вот почему вам нужно выполнить безопасную проверку типов на false или null, поскольку это значения, которые filter_input() возвращает, если по какой-то причине происходит сбой.

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
if ($name === false) {
    //filter failed
}
if ($name === null) {
    //variable was not set
}
person Ahmed_Ali    schedule 29.09.2014
comment
У меня нет ответа на ваш вопрос, но, пожалуйста, перейдите по следующей ссылке, я вам помогу. sitepoint.com/input-validation-using-filter-functions - person Ahmed_Ali; 29.09.2014