Объяснение
Это правильное поведение, и именно так работает 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
}