Bạn đang làm điều này trong một lần xem? Tôi sẽ chỉ cho bạn có tôi xử lý này, nhưng tất cả xảy ra trong một bộ điều khiển:
// 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!
}
Các form_dropdown() chức năng phải mất một mảng được thiết lập như: $ key => $ value Trong trường hợp quan trọng trong việc trường hợp của tôi là id quốc gia và giá trị là tên quốc gia. Tôi có cặp '0' => 'KHÔNG' ở đầu mảng quốc gia của tôi, vì vậy người dùng không thể chọn một cặp. Nếu tôi muốn thực hiện điều này theo yêu cầu của bạn, tôi có thể đặt nó thành '-1' => 'Vui lòng chọn ...' và nó sẽ không xác thực, vì -1 không phải là số tự nhiên.
Hy vọng rambling của tôi sẽ giúp bạn!
Edit:
Được rồi, vì vậy trước khi bạn tạo menu thả xuống với form_dropdown(), những gì bạn sẽ muốn làm là kiểm tra một giá trị được lựa chọn từ đến từ các mảng POST.
Trong trường hợp của CI, bạn có thể sử dụng chức năng set_value ($ input), do đó dưới dạng ví dụ của tôi, tôi có thể làm điều gì đó như:
$selected = (!empty(set_value('country'))) ? set_value($country) : '';
form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)
Vì vậy, bây giờ giá trị được lựa chọn thả xuống sẽ được thiết lập với những gì đã được chọn trên bài đăng cuối cùng. Bạn có thể muốn kiểm tra giá trị đó để đảm bảo giá trị hợp lệ. Nếu không có gì được chọn, thì bạn có thể đặt $ được chọn làm giá trị như hiện tại trong cơ sở dữ liệu hoặc giá trị mặc định bạn đã chọn.
Đó là tuyệt vời - đó làm việc tốt. Bạn sẽ nghĩ rằng sẽ có một cách tốt hơn để làm điều đó mặc dù? Ngoài ra, bất kỳ ý tưởng làm thế nào bạn thực hiện thả xuống 'dính'? – Gaz
Bạn có ý định như thế, nếu biểu mẫu đã được gửi nhưng cái gì khác không xác thực và bạn muốn trình đơn thả xuống có cùng giá trị được chọn không? –
Yeh, đó là ý tôi. Re: validation - CI dường như có tài liệu tốt để xác thực đầu vào cơ bản nhưng không quá nhiều cho dropdowns. Ngoài ra, tôi đã có thể nghĩ rằng sẽ có một tỷ lệ cao của dropdowns được dân cư từ các giá trị cơ sở dữ liệu và do đó set_select() sẽ phục vụ cho nó, có vẻ không? – Gaz