Зачем использовать isset&&!empty для инпута?

Смотрю уроки по php и там автор часто использует связку if (isset(..)&&!empty(..)) для инпута. Для чего нужен ещё и isset() ? Почему не обойтись одним лишь !empty ? Если мы берем данные из input, то заведомо знаем, что он уже существует, не? Или я недопонимаю функцию isset() ?

Спасибо.
  • Вопрос задан
  • 1123 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
Да, в большинстве случаев достаточно empty(). Вероятно автор перестраховывается от каких-то специфичных случаев.

И нет, мы не уверены существует ли инпут. Пользователь (хакер) может модифицировать форму через консоль разработчика в браузере. Или даже может сформировать произвольный POST-запрос в стороннем приложении.

UPD: Возможно, стоит фильтровать ввод не через всякие isset'ы, а через filter_input()
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Если в текстовом поле, например, ничего не ввели, то и на сервер это поле не передастся.
Если делать проверку только по empty($_POST['foo']), то вылезет NOTICE - Undefined index: foo.
Хороший программист делает так, чтобы код не кидал никаких уведомлений, чтобы спустия несколько месяцев не ловить в продакшене рандомные баги.
Можно проверять через array_key_exists('foo', $_POST), но это значительно дольше набирать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
myfirepukan
@myfirepukan
Жарим поиск
Это в html5 вроде есть проверка на пустоту input а раньше не было и можно было отправить форму вообще без значения нажатием кнопки. На клиенте всякие JS проверки ненадёжны. Да и просто привычка хорошая, особенно при работе с массивами потом.
Ответ написан
Комментировать
sivabur
@sivabur
Заблокировали просто так!
Нет мы заведомо не знаем. Можно и одним !empty(). Я б порекомендовал проверить существует ли переменная submit (будет существовать если нажмут на кнопку отправки и потом проверять каждое поле только на пустоту, но тут тоже есть заковырка переменные приведение ниже тоже считаются пустотой)

"" (пустая строка)
0 (целое число)
0.0 (дробное число)
"0" (строка)

php.net/manual/ru/function.empty.php
php.net/manual/ru/function.isset.php
Ответ написан
Комментировать
@krypt3r
Не все читают маны. А что там пишут?
Если переменная не существует, предупреждение не генерируется. Это значит, что empty() фактически является точным эквивалентом конструкции !isset($var) || $var == false
Ответ написан
Комментировать
@mr-molodoy
Думаю, Вы правы если есть задача проверить, что та или иная переменная не пуста достаточно использовать
(!empty ($var))
Различия же между этими двумя функциями достаточно просты для понимания через isset мы можем проверить существует ли переменная (т.е объявлена ли она) при этом она может быть и пустой.
А empty же в свою очередь проверяет переменную на заполненость. При этом переменная не обязательно должна существовать, тогда как и в случае с пустой переменной данная функция вернет true.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы