$ _POST для отключенного выбора

<select class="txtbx1" name="country" disabled>

<option value='FR' >FRANCE</option><option value='CH' selected>SWITZERLAND</option>
</select>

приведенный выше код находится внутри формы, метод которой post

но echo $_POST['country'] ничего не показывает.. с другой стороны, если я удаляю отключенный из select $_POST['country'], отображается правильный результат

Ответ 1

Вот как работает атрибут disabled. Когда элемент управления формы отключен, значение будет проигнорировано при отправке формы, и ключ не будет присутствовать в $_POST (или $_GET).

Если вы хотите, чтобы значение присутствовало в представленных данных, но вы не хотите, чтобы пользователь мог изменять значение на странице (что, как я полагаю, вы пытаетесь добиться), используйте readonly="readonly" вместо disabled="disabled".

ИЗМЕНИТЬ

Элемент <select> не имеет атрибута readonly. Вышеприведенная информация по-прежнему сохраняется, поскольку она будет работать для <input> и <textarea> s.

Решение вашей проблемы здесь заключается в отключении выбора и использовании скрытого ввода для отправки значения обратно на сервер - например,

Когда выбор включен:

<select class="txtbx1" name="country">
  <!-- options here -->
</select>

... и когда он отключен:

<select class="txtbx1" name="country_disabled" disabled="disabled">
  <!-- options here, with appropriate value having `selected="selected"` -->
</select>
<input type="hidden" name="country" value="value_of_field" />

Ответ 2

Это правильное поведение. disabled отключает элемент и не отправляет его при отправке формы.

Вы можете использовать JavaScript, чтобы отключить форму перед отправкой. Что-то вроде этого (untested):

document.getElementById('myForm').addEventListener('submit', function() {
    for(var i = 0; i < this.children.length; i++){
        var child = this.children[i];
        if(child.disabled){
            child.disabled = false;
        }
    }
});

Ответ 3

Как выглядит ваш тег формы? Возможно, вы забыли атрибут method="post"...