to robisz w widoku? Pokażę trzeba sobie radzić, ale to wszystko dzieje się w kontrolerze:
// 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!
}
Funkcja form_dropdown() przyjmuje tablicę, która jest konfiguracja jak: $ key => $ value gdzie klucz w mój przypadek to identyfikator kraju, a wartość to nazwa kraju. Mam parę "0" => "NONE" na początku mojej tablicy kraju, więc użytkownik nie może wybrać jednej. Jeśli chciałem uczynić to wymaganym tak jak twoją sytuację, mógłbym ustawić go na "-1" => "Proszę wybrać ..." i to nie sprawdzałoby, ponieważ -1 nie jest liczbą naturalną.
Mam nadzieję, że moje wędrówki pomogą!
Edit:
Ok, więc przed utworzeniem rozwijaną z form_dropdown(), co będziemy chcieli zrobić, to sprawdzić na wybranej wartości od pochodzących z tablicy POST.
W przypadku CI, można użyć SET_VALUE function ($ wejście), więc w moim przykładzie postaci mógłbym zrobić coś takiego:
$selected = (!empty(set_value('country'))) ? set_value($country) : '';
form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)
Więc teraz wybrana wartość rozwijanej zostanie ustawiony do tego, co zostało wybrane w ostatnim poście. Możesz sprawdzić tę wartość, aby upewnić się, że jest poprawna. Jeśli nic nie zostało wybrane, możesz ustawić wartość $ selected jako coś podobnego do wartości aktualnie w bazie danych lub wartość domyślną, którą wybrałeś.
„niezbędna” To świetnie - że działało dobrze. Myślisz, że byłby lepszy sposób na zrobienie tego? Jakieś pomysły, w jaki sposób sprawiają, że lista rozwijana jest "lepka"? – Gaz
Masz na myśli, jeśli formularz został złożony, ale coś innego nie zostało zatwierdzone, a chcesz, aby menu miało tę samą wybraną wartość? –
Tak, właśnie o to mi chodzi. Re: sprawdzanie poprawności - CI wydaje się mieć dobrą dokumentację do podstawowego sprawdzania poprawności danych wejściowych, ale nie w przypadku list rozwijanych. Ponadto, byłby myślę, że będzie wysoki procent dropdowns, które są wypełniane z wartości bazy danych, a więc set_select() zaspokoi go, wydaje się nie? – Gaz