Я использовал некоторые коды, как показано ниже,
<select class="form-control selection" name="currency"> <option value="">select currency</option> <option value="AED"<?php echo set_select('currency', 'AED'); ?> >AED</option> <option value="SAR"<?php echo set_select('currency', 'SAR'); ?> >SAR</option> <option value="MAD"<?php echo set_select('currency', 'MAD'); ?> >MAD</option> <option value="TRY"<?php echo set_select('currency', 'TRY'); ?> >TRY</option> </select>
Но, к сожалению, он не отображает выбранное значение после неудачной проверки формы. Почему этот базовый метод set_select () не работает? Я использовал это в некоторых других областях, и все, что работает нормально
Прежде чем использовать set_value() , set_select() , set_checkbox() , set_radio() , вы должны передать эти поля для проверки, даже если это не требуется / проверено.
Есть только два случая, когда вы используете вспомогательные функции формы CodeIgnIter set_* :
Form_validation не загружена. Form_validation экземпляром (вы используете библиотеку Form_validation ). Чтобы использовать вспомогательные функции set_* , вам необязательно использовать библиотеку проверки формы, но если вы используете библиотеку проверки, вы ДОЛЖНЫ установить хотя бы правило проверки для этого поля .
Для всех вспомогательных функций формы set_* справедливо следующее. Но я попытаюсь описать, как работает set_select() :
Синтаксис: set_select($field = '', $value = '', $default = FALSE)
Когда вы используете set_select() , CodeIgniter использует _get_validation_object() для поиска объекта проверки .
_get_validation_object() возвращает либо object либо FALSE (если проверка еще не загружена).
Когда он возвращает FALSE , set_select() ищет переменную $_POST чтобы найти указанное имя field в массиве, а в следующем , проверяя функциональные параметры, такие как $value и $default , определяет, будет ли возвращено selected="selected" атрибут / значение или пустая строка '' .
Таким образом, он работает без использования библиотеки проверки формы.
Но если раньше библиотека проверки была загружена, set_select() передаст аргументы Form_validation::set_select() и вернет результат.
В классе Form_validation существует частное свойство, называемое _field_data которое представляет собой массив, содержащий все имена / значения полей ( те, для которых вы установили для них правила проверки ).
Form_validation::set_select() проверяет существование field в массиве _field_data и возвращает пустую строку при _field_data .
Массив _field_data заполняется методом validation set_rules() .
Следовательно, если вы используете библиотеку валидации, вы должны установить, по крайней мере, правило проверки для своего field чтобы получить set_select() helper-функции set_select() .
Вот почему вы не могли заставить его работать.
Я надеюсь, что этот ответ поможет получить хорошее представление о set_* .
Попробуй это:
Измените функцию set_select в set_select формы из:
if (count($_POST) === 0) { return ' selected="selected"'; }
в
if (count($_POST) === 0) { if ($default) { return ' selected="selected"'; } else { return ''; } }
По их словам, выбор набора кодеригентов работает только в том случае, если вы проверяете эти поля. Если эти поля не требуются, то нет права на повторное заполнение