<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" …