Почему мое входное значение всегда установлено в php? - PullRequest
0 голосов
/ 26 августа 2011

Я работаю на своем локальном сервере вампиров, где я тестирую проверку формы с помощью PHP; Я не могу понять, почему мои входные значения всегда установлены - if(isset($_POST['variable'])) -, даже если я ничего не ввожу?

Это наиболее раздражает при использовании тегов выбора: если я ничего не выберу (и тогда я понимаю, что атрибут «выбранный» отсутствует), первое значение параметра будет установлено как мой выбор ...

Может кто-нибудь помочь мне здесь? Спасибо; -)

Ответы [ 7 ]

2 голосов
/ 26 августа 2011

Объяснение

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

Пример

Вы можете сделать первое значение в выбранном вами пустым:

<select name="test">
    <option value="">Please select an option...</option>
    <option value="option1">Option 1</option>
</select>

Тогда в вашем PHP сделайте:

if(isset($_POST['test'] && !empty($_POST['test'])) {
    // there is something in the field
} else {
    // trigger error
}

Я, вероятно, должен указать здесь, что empty() будет видеть 0 как пустое, поэтому, если вы отправляете обратно целые числа, вы должны проверять следующим образом:

if(isset($_POST['test'] && '' !== $_POST['test']) {
    // there is something in the field
} else {
    // trigger error
}
1 голос
/ 26 августа 2011

Если оно отправлено в качестве параметра, оно будет установлено, даже если значение является пустой строкой.

isset() сообщает, была ли переменная определена, а не заполнена ли она.

Вам нужно проверить isset() в ваших переменных поста, но вы также можете проверить, есть ли у них значение:

if(isset($_POST['variable']) && $_POST['variable']!=='') { .... }

Надеюсь, это поможет.

0 голосов
/ 26 августа 2011

Вместо того, чтобы использовать isset (), я бы предложил использовать empty ():

if(!empty($_POST['variable'])) {
    // do something
}

Это эквивалентно:

if (isset($_POST['variable']) && $_POST['variable']) {
    // do something
}

, но намного проще для чтения и немногосветлее.

Для тегов выбора можно добавить отключенную опцию вверху, и тогда переменная выбора не будет отправлена, пока они явно не выберут что-либо.

<select name="variable>
    <option disabled=disabled>Select one...</option>
    //other options here
</select>
0 голосов
/ 26 августа 2011

Если вы хотите сбросить пустой ввод, попробуйте array_filter($_POST).

0 голосов
/ 26 августа 2011

Как выглядит ваша форма? В соответствии с документацией isset, расположенной здесь: http://php.net/manual/en/function.isset.php, isset возвращает true только тогда, когда значение установлено или не равно нулю.

Итак, если ваша форма устанавливает значение, возможно, именно поэтому вы видите такое поведение. При нормальных обстоятельствах значение, которое не установлено, должно возвращать false при проверке isset.

0 голосов
/ 26 августа 2011

Так работает HTML, с этим ничего не поделаешь.
Единственный тип ввода, который не отправляется на сервер, - это пустой флажок (и это раздражает людей, в свою очередь)

Просто добавьте пустую опцию вверху вашего тега выбора.

Благодаря этому поведению вам не нужно проверять каждое поле с isset.

0 голосов
/ 26 августа 2011

Вам следует проверить, имеет ли оно значение:

if (isset($_POST['variable']) && $_POST['variable'])
...