Tutorial CodeIgniter 3ª parte: Formularios

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

En esta nueva entrega crearemos registros en la base de datos, y para controlar la información que introduciremos, haremos uso de la librería de validación y el ayudante de formularios de CodeIgniter.

Creación del formulario

CodeIgniter nos facilita una serie de funciones que nos permitirán mostrar formularios en las vistas. El framework no nos obliga a usar sus procedimientos, pero usarlos nos ayudará a tener un código más ordenado y limpio.

En primer lugar crearemos una nueva función en el controlador “empleados.php”, que en este primer paso, solo llamará a la vista necesaria:

1
2
3
4
function nuevo_empleado(){
    $this->load->helper('form');
    $this->load->view("formulario");
}

En primer lugar realizamos la carga de este ayudante, imprescindible si queremos usar sus funciones. Ya en la vista crearemos un formulario para introducir empleados en la tabla que usamos en el capítulo anterior.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<body>
    <h1>
        Nuevo empleado
    </h1>
    <?php
        echo form_open('empleados/nuevo_empleado');
        echo form_label('Nombre', 'nombre');
        echo form_input('nombre');echo '<br>';
        echo form_label('Sueldo', 'sueldo');
        echo form_input('sueldo');echo '<br>';     
        echo form_submit('botonSubmit', 'Enviar');
        echo form_close();
    ?>
</body>
</html>

formularios1

En primer lugar, utilizamos la función form_open para crear la etiqueta de apertura del formulario, el primer argumento es el atributo ‘action’ (CodeIgniter añade la URL raíz del sitio). A esta función también se le puede pasar un array con otros atributos que queramos añadir (class, id…) , para más información visitad la página dedicada al ayudante en la documentación.

Las siguientes líneas se encargan de mostrar los controles que necesitaremos para crear un empleado, en nuestro caso sólo hemos usado las etiquetas label, input y submit, pero el ayudante nos permite usar todos los controles de los que dispone HTML.

Ahora que tenemos el formulario listo, lo que haremos será comprobar que los datos sean correctos, en nuestro caso, que se hayan introducido tanto el nombre como el sueldo, que el nombre supere los 2 caracteres de largo y que el sueldo sea un valor númerico.

Validando el formulario

Para realizar estas comprobaciones podemos servirnos de la librería Form Validation, la cual nos permite introducir reglas de validación de la siguiente forma:

1
2
$this->load->library('form_validation');
$this->form_validation->set_rules('nombre', 'Nombre', 'required|min_length[3]');

En primer lugar cargamos la librería para poder usar la función “set_rules”, en la que le pasamos, en este mismo orden, el atributo “name” de la etiqueta, el nombre que tendrá en el mensaje de error, y las funciones de validación, separadas por el caracter “|”. De esta manera indicamos que el campo es obligatorio y que como mínimo debe tener 3 caracteres de largo (aquí se puede ver el resto de funciones disponibles).

Una vez establecidas las reglas, podemos comprobar si el formulario se ha enviado correctamente, usando la función “run()” después de la llamada a “set_rules()”:

1
2
3
4
if($this->form_validation->run() === true)
    //Los datos son correctos
else
    //Los datos no son correctos

Con esto ya podemos validar nuestro formulario y enviar los datos a la base de datos, la función quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function nuevo_empleado(){
    $this->load->helper('form');
    $this->load->library('form_validation');
    $this->form_validation->set_rules('nombre', 'Nombre', 'required|min_length[3]');
    $this->form_validation->set_rules('sueldo', 'Sueldo', 'required|numeric');
       
    if($this->form_validation->run() === true){
        //Si la validación es correcta, cogemos los datos de la variable POST
        //y los enviamos al modelo
        $nombre = $this->input->post('nombre');
        $sueldo = $this->input->post('sueldo');
           
        $this->load->model('empleados_model');
        $this->empleados_model->insertar_empleado($nombre, $sueldo);
    }
       
    $this->load->view("formulario");
}

Funcion insertar_empleado() (empleados_model.php):

1
2
3
4
5
6
7
function insertar_empleado($nombre, $sueldo){
    $data = array(
        'nombre' => $nombre,
        'sueldo' => $sueldo
    );
    return $this->db->insert('empleados', $data);
}

Para comprobar si los datos se insertan correctamente, se puede usar la función mostrar_pagina_principal que desarrollamos anteriormente.

Mensajes de error

Si el usuario se equivoca al insertar los datos, es buena idea informarle adecuadamente de su error, CodeIgniter automatiza esto con la función “form_error()”. Podemos usarla de la siguiente manera en la vista:

1
2
3
4
5
6
echo form_error('nombre');
echo form_label('Nombre', 'nombre');
echo form_input('nombre');echo '<br>';
echo form_error('sueldo');
echo form_label('Sueldo', 'sueldo');
echo form_input('sueldo');echo '<br>';

Así podemos ver los errores en el formulario:

formularios2

Todos los mensajes de error se encuentran en el fichero “system/language/english/form_validation_lang.php”. Estos mensajes se pueden cambiar directamente en el fichero o utilizando la función “set_message()”:

1
2
//%s se traduce por el nombre 'humano' del campo
$this->form_validation->set_message('required', 'El campo %s es obligatorio');

Funciones de validación propias

Por último, estudiaremos la manera de incluir funciones de validación propias. Digamos que queremos que el campo Nombre deba ser igual a “ADWE” para poder insertarlo. Para poder verificar esto podemos indicarle a la función “set_rules()” el método al que debe llamar para comprobarlo:

1
$this->form_validation->set_rules('nombre', 'Nombre', 'required|min_length[3]|callback_igualqueadwe');

Es importante añadir “callback_” antes del nombre de nuestra función. En nuestro método podemos establecer un mensaje de error personalizado, como hemos hecho anteriormente:

1
2
3
4
5
6
7
8
9
function igualqueadwe($nombre){
    if($nombre != "ADWE"){
        $this->form_validation->set_message("igualqueadwe", "El campo %s no es 'ADWE'");
        return false;
    }
    else{
        return true;
    }
}

formularios3

Eso es todo por hoy, espero que os haya sido de utilidad, en el siguiente tutorial seguiremos adentrándonos en el framework CodeIgniter, hasta la próxima.

Desarrollador web y aficionado al desarrollo de videojuegos.

Comentarios arrow 9 Comentarios
  1. Hola, estoy desarrollando un proyecto en codeigniter. El framework está bien pero a veces me da algunos problemas. En concreto, ahora tengo uno que me trae de cabeza con la paginación. Tengo configurada la paginación para que me muestre 1 registro por página. No sé por qué me sale marcada la página 2 de inicio, teniendo dos registros y sólo me muestra uno, y pinchando en la página 1 no se mueve de ese registro.

  2. Hola Jose, ¿estás usando la clase Pagination de CodeIgniter? ¿Cómo la has configurado? A ver si podemos solucionarlo, un saludo.

  3. Sí, el caso es que en otras partes ya he usado la clase pagination y me va bien, pero en una parte me estoy volviendo loco. Esta es la configuración:

    $pages = 1;
    $this->load->library(‘pagination’);
    $config[‘base_url’] = base_url() . ‘reservas_pendientes/pagina’;
    $config[‘total_rows’] = $this->book->num_diner_pending_booking($this->session_data[‘id’]);
    $config[‘per_page’] = $pages;
    $config[‘num_links’] = 2;
    $config[‘full_tag_open’] = ”;
    $config[‘full_tag_close’] = ”;

  4. Puede ser que no encuentre el segmento URI que corresponde a la página a mostrar, establece esta opción:

    $config[‘uri_segment’] = nº del segmento

    También sería buena idea revisar que el modelo devuelva la información paginada correspondiente, y que el controlador este recibiendo un número de página correcto.

    Ya me cuentas, saludos.

  5. Hola, estoy implementando codeigniter pero tengo problemas al momento de querer realizar un registro en la base de datos

  6. hola sabes estoy asiendo un proyecto en codeigniter y me gustaría saber como mostrar los errores de validación en un puro sector ej en un login o en un registro

  7. Gracias, me sirvió mucho!

Escribe un comentario

Tu e-mail no será publicado. Los campos marcados con un asterisco son obligatorios.