CodeIgniter select_value в form_dropdown

У меня есть раскрывающееся поле в моей форме, и когда я нахожу, что подача формы проходит проверку, и если произошла ошибка, верните все значение. Эта работа будет ожидаться для моего dropdown meu, у меня есть значение set_value в раскрывающемся списке, но оно не работает 🙁

Вот мой код

<?php echo form_dropdown('gender', $gender, set_value('gender')); ?> 

Что я делаю не так или нет?

Это хорошо сработало:

 <?php $selected = ($this->input->post('gender')) ? $this->input->post('gender') : 'M'; $gender = array("M" => "Male", "F" => "Female"); echo form_dropdown('gender', $gender, $selected); ?> 

Удалите set_value('gender')

Как в:

 <?php echo form_dropdown('gender', $gender, 'male'); ?> 

Как упоминал Трунг, вы можете передать массив в качестве третьего параметра для нескольких выборов.

С form_dropdown вы должны использовать set_select вместо set_value

Документация CodeIgniter

Если вы хотите установить значение по умолчанию в form_dropdown , передайте массив, который содержит значение по умолчанию в качестве третьего параметра функции form_dropdown .

CodeIgniter имеет set_checkbox() и set_radio() которые вам нужно использовать вместо set_value()

Но у set_checkbox и set_radio есть некоторые проблемы, и, похоже, они не могут обрабатывать формы, предназначенные для обработки BOTH create AND update forms.

Это исправление. Вы можете поместить этот код в помощник или расширить класс form_validation.

 <?php echo form_dropdown('gender', $gender, set_it('gender','M',$person)); ?> <?php /* $field is the field you're setting * $value is the "selected" value from the previous form post * $defaults is an object containing defaults in case the form is being used to create a new record. It could be filled with null values, or actual default values if you need that. */ function set_it($field, $value, $defaults = null) { // first, check to see if the form element was POSTed if (isset($_POST[$field])) { // does it match the value we provided? if ($_POST[$field] == $value) { // yes, so set the checkbox echo "checked='checked'"; // valid for both checkboxes and radio buttons } } // There was no POST, so check to see if the provided defaults contains our field elseif ( ! is_null($defaults) && isset($defaults->$field)) { // does it match the value we provided? if ($defaults->$field == $value) { // yes, so set the checkbox echo "checked='checked'"; // valid for both checkboxes and radio buttons } } } ?> 

Возможно, вы не проверяете форму.

Использовать это:

 $this-> form_validation-> set_rules ('gender', 'Label', 'xss_clean'); 

Использовать:

 <? php echo form_dropdown ('gender', $ gender, set_value ('gender'));?> 

Если вы не используете валидацию формы, выполните следующие действия:

 <? php echo form_dropdown ('gender', $ gender, $ this-> input-> post ('gender'));?> 

Если вы хотите использовать set_value для определенного поля, вам нужно иметь правило проверки для этого поля. Правило проверки не возвращает set_value NULL (или пустую строку, которую я не проверял)

В моем контроллере я добавил

 $this->form_validation->set_rules('gender','Gender','required'); 

перед моей версией form_validation->. Тогда я мог бы использовать ваш синтаксис:

 <?php echo form_dropdown('gender', $gender, set_value('gender')); ?> 

Я обнаружил, что set_value () работает, а не set_select (). Помните, что вы можете добавить второй параметр, чтобы set_value имел значение по умолчанию для мужчины или женщины, которое используется, если форма еще не подтверждена. Я извлекаю существующее значение из моей бэкэнд-базы данных и передаю это как таковое:

 <?php echo form_dropdown('gender', $gender, set_value('gender',$persons_gender_from_db)); ?> 

Также обратите внимание, что заданное значение возвращает индекс массива опций ('M' или 'F'), а не отображаемое значение ('Male' или 'Female'). Для списков, содержащих больше параметров, которые используют два гендерных класса, я использую первичный ключ таблицы базы данных, содержащий параметры, чтобы обеспечить уникальность.

Хотя мне интересно, когда меня сначала попросят добавить «Другого» в список вариантов для пола ….