haces esto en una vista? Voy a demostrar que tiene que manejar esto, pero todo sucede en un controlador:
// 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!
}
La función form_dropdown() toma una matriz que está configurado como: valores de clave => $ $ Cuando la llave en mi caso es una identificación de país, y el valor es el nombre de los países. Tengo el par '0' => 'NINGUNO' al comienzo de mi matriz de país, por lo que el usuario no puede elegir uno. Si quisiera hacer esto como tu situación, podría configurarlo en '-1' => 'Por favor selecciona ...' y no validaría, ya que -1 no es un número natural.
Espero que mis divagaciones ayuden!
Editar:
bien, así que antes de crear el menú desplegable con form_dropdown(), lo que querrá hacer es comprobar el valor seleccionado de la matriz procedente de la POST.
En el caso del CI, se puede utilizar el set_value función ($ entrada), así que en mi formulario de ejemplo que podría hacer algo como:
$selected = (!empty(set_value('country'))) ? set_value($country) : '';
form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)
Así que ahora se establecerá el valor seleccionado de la lista desplegable a lo que se seleccionó en la última publicación. Es posible que desee comprobar ese valor para asegurarse de que sea válido. Si no se seleccionó nada, puede establecer $ selected como algo así como el valor actualmente en la base de datos, o un valor predeterminado que haya elegido.
Eso es grande - que funcionó bien ¿Pensarías que habría una mejor manera de hacerlo? Además, ¿alguna idea de cómo hacer que el menú desplegable sea "adhesivo"? – Gaz
¿Quiere decir que, si el formulario fue enviado pero algo no validado, y desea que el menú desplegable tenga el mismo valor seleccionado? –
Sí, eso es lo que quiero decir. Re: validación: CI parece tener una buena documentación para la validación de entrada básica, pero no tanto para los menús desplegables. Además, habría pensado que habría un alto porcentaje de desplegables que se rellenan a partir de los valores de la base de datos, por lo que set_select() se encargaría de eso, ¿no es así? – Gaz