RSS лента

pavelsc

Как не надо писать код (php). Запись 1.

Оценить эту запись
Итак все мы часто видим такой код в обработчиках форм:
$varName = isset($_POST['fieldName']) ? $_POST['fieldName'] : "incognito";

Либо как вариация этой быдлокодерской тупости:
if(isset($_POST['fieldName']))$varName = $_POST['fieldName'];
else die("Fill {$nameOfField} please");

Так вот, запомните, isset($_POST['fieldName']) IS ALWAYS TRUE, что бы вы там себе ни думали и по чем бы вы не изучали.
А почему так? Да потому что если ваше поле
<input type="text" name="fieldName"/>

пустое, то $_POST['fieldName']=="", что есть пустая строка, а это не null и не undefined

Отправить "Как не надо писать код (php). Запись 1." в Digg Отправить "Как не надо писать код (php). Запись 1." в del.icio.us Отправить "Как не надо писать код (php). Запись 1." в StumbleUpon Отправить "Как не надо писать код (php). Запись 1." в Google

Метки: 1%2527%2522, 1'" Добавить / редактировать метки
Категории
Веб-программиров

Комментарии

  1. Аватар для Letmetouchyou
    empty()
  2. Аватар для alexdrob
    Цитата Сообщение от pavelsc
    Так вот, запомните, isset($_POST['fieldName']) IS ALWAYS TRUE
    Не всегда, а только тогда, когда был пост запрос с данным полем.
    Вполне вероятно что какого либо поля может не быть, возможно они динамически создаются.

    А если я напишу пробел в поле? Тогда empty вернёт false. Проверка isset на сколько я знаю работает быстрей, так вот если написать
    $varName = isset($_POST['fieldName']) ? $_POST['fieldName'] : "";

    то дальше по коду у вас будет $varName либо пустое (если поле не было вообще передано), либо в ней будет то что было передано.
    Потом уже обрезать символы, делать валидацию, и если там пусто - присваивать значение по умолчанию.
    В случае с empty все равно придётся проверять и обрезать пробелы, а потом делать повторную проверку.

    C empty тоже нужно быть осторожным, а если разрешено пустое поле? А если вписать 0? Просто нужно думать при написании, что лучше использовать.