Recordemos que CodeIgniter trabaja con el estándar MVC:
modelo --> se encarga de la interacción con la base de datos.
vista --> se encarga de toda la parte gráfica del módulo.
controlador --> se encarga de toda la lógica del proyecto, interactúa con el modelo y la vista.
vista --> se encarga de toda la parte gráfica del módulo.
controlador --> se encarga de toda la lógica del proyecto, interactúa con el modelo y la vista.
Teniendo una tabla (profesiones) con los siguientes datos:
mysql> select * from profesiones; +--------------+---------------------------------+ | id_profesion | profesion | +--------------+---------------------------------+ | 1 | Bachiller | | 2 | Técnico Superior Universitario | | 3 | Licenciado (a) | | 4 | Profesor (a) | | 5 | Ingeniero | | 6 | Doctor (a) | | 7 | Magister | +--------------+---------------------------------+
Hacemos lo siguiente:
- en el modelo (model) creamos una función que se encargue de obtener los datos correspondientes:
function get_profesiones(){ // armamos la consulta $query = $this->db-> query('SELECT id_profesion,profesion FROM profesiones'); // si hay resultados if ($query->num_rows() > 0) { // almacenamos en una matriz bidimensional foreach($query->result() as $row) $arrDatos[htmlspecialchars($row->id_profesion, ENT_QUOTES)] = htmlspecialchars($row->profesion, ENT_QUOTES); $query->free_result(); return $arrDatos; } }
- en el controlador (controller):
lo primero es cargar el modelo, para poder acceder a sus funciones:
$this->load->model('nombre_del_modelo');
eso lo hacemos en el método constructor del controlador.
y en el método index, antes de cargar la vista, obtenemos la matriz con los datos devueltos por la función que se encuentra en el modelo.
// obtenemos el array de profesiones y lo preparamos para enviar $datos['arrProfesiones'] = $this->nombre_del_modelo->get_profesiones(); // cargamos la interfaz y le enviamos los datos $this->load->view('nombre_de_la_vista', $datos);
- luego en la vista (view) dependerá de como vas a armar el select:
usando las funciones del Form Helper:
echo form_label('Profesión: '),form_dropdown('selProfesiones', $arrProfesiones); /* imprimirá: <label>Profesión: </label><select name="selProfesiones"> <option value="1">Bachiller</option> <option value="2">Técnico superior Universitario</option> <option value="3">Licenciado (a)</option> <option value="4">Profesor (a)</option> <option value="5">Ingeniero</option> <option value="6">Doctor (a)</option> <option value="7">Magister</option> </select> */
armándolo a mano:
Profesión: <select name="selProfesiones"> <?php foreach ($arrProfesiones as $i => $profesion) echo '<option value="',$i,'">',$profesion,'</option>'; ?> </select>
excelente muy bueno POR FIN UN TUTORIAL QUE EXPLICAN DESDE LO MAS MINIMO, te felicito =)
ResponderEliminarPregunta - sugerencia: A mi entender ¿no deberÃa incluirse las llaves de apertura y cierre de la instrucción foreach dejando fuera a "return $arrDatos;" ? para que este contenga todos los resultados...ustedes diran.
ResponderEliminarHola, cuando dentro de un bloque (if, for, foreach, while) sabes que sólo va a ir una sola instrucción, queda a tu criterio colocar las llaves o no, ya que el bloque siempre leera el siguiente proceso/instrucción/orden como si estuviera dentro de si mismo e ignorara las demás, por ejemplo:
ResponderEliminarfor($i=1; $i<5; $i++)
echo $i;echo ' hola';
imprimira: "1234 hola"
La recomendación es siempre usar las llaves para que no haya confusión, independientemente de si albergara una sola instrcucción, pero como lo digo, queda a criterio de cada quién.
En este caso el "return $arrDatos;" si está fuera del foreach.. y la función si devuelve todos los registros de la tabla.
saludos!
Hola, es cierto fue una mala interpretacion mia, interpreté 3 instrucciones en vez de una (vayan las disculpas del caso).
ResponderEliminarTe comento que estoy un poco enredado queriendo mostrar 2 select independientes con datos provenientes de 2 tablas de una BD,y mostrarlos en una misma vista, Como puedo hacer esto?Desde ya muchas gracias!!
Hector
En ese caso usas 2 funciones, las ejecutas y los arreglos que te devuelven, los envÃas a la vista para cargar los elementos select, ejemplo:
ResponderEliminar// obtenemos los arreglos y los enviamos
$datos['arrProfesiones'] = $this->modelo->get_profesiones();
$datos['arrPaises'] = $this->modelo->get_paises();
y en la vista los asocias:
echo form_label('Profesión: '),form_dropdown('selProfesiones', $arrProfesiones);
echo form_label('Paises: '),form_dropdown('selPaises', $arrPaises);
Muchas gracias, era simple nomas. Realmente codeigniter me esta atrapando.
ResponderEliminarExcelente sitio.
saludos!
ola pueden ayudarme, quiero cargar un select, con datos de una tabla, de la siguiente forma: tabla paises, al seleccionar un pais debe cargarme en otro selec los departamentos, y al seleccionar un departamento debe cargar en otro selec las ciudades, pueden ayudarme?
ResponderEliminarcomo capturar los el datos seleccionado de un select desde mi controlador para usar este dato en una consulta a la bd gracias
ResponderEliminarHola, ese SELECT va detro de un formulario configurado con el atributo method="POST" y en el atributo action debes indicarle a que controlador y que método iran esos datos al hacer submit en el form, algo como action="controlador/tu_metodo"
ResponderEliminarluego en el método indicado capturas lo recibido por POST,algo asÃ:
$valor_select = $this->input->post('nombre_del_select');
eso lo validas y lo envias a las funciones que tienes en el modelo para que accedan a la base de datos.
Ols, muy bueno tu web site pero cuando trato de hacerlo en mi proyecto no me carga todos los registros solo me carga UNO, y es k tengo 3 registros en la BD (yo trato de cargarlo en un select multiple) pero eso no tendria na k ver ayudame x fas te lo garadeceria mucho...
ResponderEliminarHola, revisa la consulta a la base de datos, luego imprime con print_r el array que se le pasa al form_dropdown para ver que te devuelve.
ResponderEliminarokey bueno yo probe con las dos formas de imprimer en ambos me sale lo mismo probare dame un tok plz thaks de igual manera
EliminarConsulta! para cargar la opción seleccionada lo hago con esto:
ResponderEliminar$this->input->post('med_id', TRUE)
Pero solo quiero obtener el VALUE y no el nombre de la opción (el value y la opción son distintos) como puedo hacerlo??
Te refieres al texto?
ResponderEliminar<option value="ID">TEXTO</option>
el texto no se envÃa en el POST, sólo el value del option, si quieres más datos puedes dejarlos en el vale concatenado, por ejemplo:
<option value="ID-TEXTO">TEXTO</option>
- lo obtienes y lo procesas
$med_id = $this->input->post('med_id', TRUE);
$arrData = explode(",",$med_id);
echo "<pre>",print_r($arrData),"</pre>";
Gracias por la explicación compañero..! Me fue de gran ayuda.. Saludos
ResponderEliminarpodrias enviarme a mi correo el ejemplo (tumpiurano@gmail.com), pues me sale error en el Modelo en el siguiente codigo: "if ($query->num_rows() > 0)"
ResponderEliminarA PHP Error was encountered
Severity: Error
Message: Call to a member function num_rows() on a non-object
Filename: models/MPortada.php
Line Number: 16
Backtrace:
el problema anterior se solucionaba: llendo a c:\xampp\htdocs\TU_Proyecto\application\config\autoload.php y agregando 'database' en las librerias
ResponderEliminar$autoload['libraries'] = array('database');
como recibo el id en el js ??
ResponderEliminarHola, incluye el campo dentro del formulario con método POST y cuando hagas el submit llega al controlador/método que le indicaste en el action, luego lo recibes asÃ:
Eliminar$select_id = $this->input->post('select_id', TRUE);
Hola, muy buen código, solo tengo una duda, al hacer todo en el formulario me aparecen las opciones correctamente sin embargo, cuando mando por POST los valores, en lugar de los id me envÃa el valor y me sale error en la base de datos, ¿cómo podrÃa remediarlo?
ResponderEliminarINSERT INTO zonatipohabitacion (Zona, TipoHabitacion) VALUES ('A', 'Doble')
Hola, al enviar el campo seleccionado por POST deberÃa llegarte el value del select, si no es asà es que tienes algo mal aplicado en el código, de igual manera siempre puedes filtrar lo que te llegue por post en el controlador y asà te aseguras de que lo que vaya a la base de datos sea lo correcto.
Eliminarhola, quisiera agradecer por el tutorial tan bueno me sirvió bastante, solo que que tengo una cuestión, como puedo hacer para que al momento de seleccionar una opción del dropdown este seleccione el id y que a su vez me mande todos los registros que contenga ese id?
ResponderEliminarHola, gracias!
EliminarCuando dices que "mande todos los registros que contenga ese id", imagino que te refieres a registros de la base de datos, si es asÃ, lo que debes hacer es
recibir el ID del dropdown por POST en el controlador y después llamar a una
función del modelo que te devuelva esos registros filtrando por el ID,
es decir, algo asÃ:
1.- en el controlador:
public function procesar_formulario(){
$id_del_select = $this->input->post('select_id', TRUE);
donde "select_id" es el nombre de tu dropdown en la vista y
"procesar_formulario" es el método que indicaste en el atributo "action" del formulario "mi_controlador/procesar_formulario"
2.- luego llamas a una función que hayas creado en tu modelo y que haga la
consulta de los registros, tal que si:
$arrRegistros = $this->modelo->get_rows_by_id($id_del_select);
3.- en tu modelo tendrÃas que tener un método con el query, ejemplo:
function get_rows_by_id($id){
$id = (int)$id;
$arrResponse = array();
$sSQL = "SELECT mi_campo FROM mi_tabla WHERE id = ?";
$query = $this->db->query($sSQL);
if($query->num_rows()>0){
foreach($query->result() as $row){
$arrResponse[] = array(
'cat_name' => $row->ame
);
}
return $arrResponse;
}else{
return FALSE;
}
}
espero te sirva, saludos!