Вы делаете это в представлении? Я покажу вам, я справлюсь с этим, но все это происходит в контроллере:
// first, we can set a validation rule for the input 'country' (our dropdown), in this case it is required, and must be a natural number. You can look up more rules in the CI user guide, and you can write your own functions as well and add them to the 3rd parameter here. I believe some native PHP functions can be used as well.
$this->form_validation->set_rules('country', 'Country', 'required|is_natural');
// the form is not valid! we'll enter this block whenever the form validation rules above are not met, as well as when first going to this controller-action.
if ($this->form_validation->run() == FALSE) {
// buid your form, there's some CI functions to help with this that I'm using
$my_form = form_open('user/edit', 'class="superform"')
. form_fieldset()
. '<ol>'
. '<li>'
. form_label('Country<br/>', 'country')
// so here is the dropdown, matching the name given to the validation rule we've set, the second parameter takes an array, which I am grabbing from a model, the last parameter is the 'selected; value, which I am grabbing from some variable, if it's not present the first item in the dropdown will obviously be selected
. form_dropdown('country', $this->Country_model->get_countries_dropdown(), $user->country)
. form_error('country', ' <em>', '</em>'
. form_submit('mysubmit', 'Save', 'class="button"')
. '</li>'
. '</ol>'
. form_fieldset_close()
. form_close()
);
// sending the form variable to my view, where i will simply <?=$my_form?> it
$this->load->view('user_edit', $my_form);
} else {
// form has validated! do something!
}
Функция form_dropdown () принимает массив, который настроен следующим образом:
$ key => $ value
Где ключ в моем случае - идентификатор страны, а значение - название страны. У меня есть пара '0' => 'NONE' в начале массива моей страны, поэтому пользователь не может выбрать ее. Если бы я хотел сделать это обязательным, как в вашей ситуации, я мог бы установить его на «-1» => «Пожалуйста, выберите ...», и он не будет проверяться, поскольку -1 не является натуральным числом.
Надеюсь, моя болтовня поможет!
Edit:
Хорошо, поэтому перед созданием раскрывающегося списка с помощью form_dropdown () вам нужно будет проверить, выбрано ли выбранное значение из массива POST.
В случае CI вы можете использовать функцию set_value ($ input), поэтому в моем примере формы я мог бы сделать что-то вроде:
$selected = (!empty(set_value('country'))) ? set_value($country) : '';
form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)
Так что теперь выбранное значение раскрывающегося списка будет установлено на то, что было выбрано в последнем сообщении. Возможно, вы захотите проверить это значение, чтобы убедиться, что оно действительно. Если ничего не было выбрано, вы можете установить $ selected как значение, которое в данный момент находится в базе данных, или значение, которое вы выбрали по умолчанию.