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

<select class="txtbx1" name="country" disabled> <option value='FR' >FRANCE</option><option value='CH' selected>SWITZERLAND</option> </select> 

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

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

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

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

РЕДАКТИРОВАТЬ

Элемент <select> не имеет атрибута readonly . Вышеупомянутая информация по-прежнему сохраняется, так как она будет работать для <input> s и <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" /> 

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

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

 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; } } }); 

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