У меня есть раскрывающееся поле в моей форме, и когда я нахожу, что подача формы проходит проверку, и если произошла ошибка, верните все значение. Эта работа будет ожидаться для моего 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'). Для списков, содержащих больше параметров, которые используют два гендерных класса, я использую первичный ключ таблицы базы данных, содержащий параметры, чтобы обеспечить уникальность.
Хотя мне интересно, когда меня сначала попросят добавить «Другого» в список вариантов для пола ….