Blog
Los formularios son muy comunes entre los sitios webs que desarrollamos hoy en día, ya que permiten cargar todo tipo de información. En este tutorial aprenderemos a validar un formulario en CodeIgniter para evitar distintos problemas de seguridad que se puedan presentar, como por ejemplo datos inconsistentes, longitudes de datos inesperadas o tipos de datos incorrectos.
Es importante mencionar que para este tutorial vamos a utilizar la versión 3.0.3 de CodeIgniter.
Cómo validar un formulario en CodeIgniter
Para validar un formulario primero vamos a necesitar crear uno, en este caso dentro de la carpeta application/views vamos a crear el archivo formulario.php con el siguiente contenido HTML
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?><!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Welcome to CodeIgniter</title> <style type="text/css"> .error{ color: red; } </style> </head> <body> <div class="error"> <?php echo validation_errors(); ?> </div> <?php echo form_open('formulario/procesar'); ?> <h5>Nombre de usuario</h5> <input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /> <h5>Password</h5> <input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /> <h5>Confirmar Password</h5> <input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /> <h5>Email</h5> <input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /> <div><input type="submit" value="Submit" /></div> </form> </body> </html>
Del formulario anterior es importante mencionar que vamos a validar un nombre de usuario, un password con la confirmación y un email.
Con la función validation_errors() vamos a mostrar los errores que resulten de validar los campos, mientras que con la función form_open(‘formulario/procesar’) vamos a generar el tag form con el action apuntando al controlador ‘formulario/procesar’.
Luego de definir el formulario vamos a crear el controlar con las acciones para mostrar y procesar los datos enviados desde el formulario. Dentro del directorio application/controllers vamos a crear el archivo Formulario.php con el siguiente código:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Formulario extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper('form'); $this->load->helper('url'); } public function index() { $this->load->view('formulario'); } public function procesar() { $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[5]|max_length[12]'); $this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]'); $this->form_validation->set_rules('passconf', 'Confirmar Password', 'required'); $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); if ($this->form_validation->run() == FALSE) { $this->load->view('formulario'); } else { echo "Datos cargador correctamente"; } } }
La función index() va a ser la encargada de imprimir la vista del formulario, mientras que la función procesar() se va a encargar de obtener los datos cargados y enviados desde el formulario por el método post para luego validarlos.
Antes de comenzar con la validación necesitamos cargar la librería form_validation:
$this->load->library('form_validation');
Luego con la función set_rules() vamos establecer las reglas de validación para un campo determinado, en orden cascada.
El método tiene tres parámetros obligatorios y uno opcional:
- El nombre del campo, el que se indicó en el formulario.
- El nombre del campo para mostrar al usuario, que se insertará en el mensaje de error. Por ejemplo, si el campo se llama “usuario”, un mensaje de error podría ser “El campo usuario es obligatorio”.
- Las reglas de validación para el campo del formulario.
- Mensajes de errores personalizados (parámetro opcional) sobre las reglas dadas para el campo actual. Si no se proporciona utilizará el predeterminado.
Si en nuestro ejemplo tomamos las validaciones que definimos para el campo ‘username’:
$this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[5]|max_length[12]');
Vamos a ver que estamos definiendo 4 reglas:
- required: Para indicar que el campo es obligatorio.
- min_length[5]: Con longitud mínima de 5 caracteres.
- max_length[12]: Con longitud máxima de 12 caracteres.
Luego para ejecutar dichas validaciones utilizamos la función $this->form_validation->run(), la cual retorna FALSE en caso de que algún campo no cumpla con las reglas especificadas.
Al validar el formulario, el resultado en nuestros navegadores sería el siguiente:
Listado de reglas para validar un formulario
CodeIgniter ofrece muchas reglas de validación, a continuación un listado de las más interesantes:
- valid_email: Para validar un campo de tipo email.
- valid_url: Para validar una URL.
- valid_ip: Para validar una IP.
- is_natural: Para validar que un número sea natural.
- numeric: Para validar que el contenido de un campo sea numérico
- alpha: Para validar que el valor de un campo no contenga caracteres especiales (ideal para el nombre de usuario).
- matches: Para validar que 2 campos de un formulario tengan el mismo contenido (como en nuestro ejemplo).
- is_unique: Para validar que el contenido de un campo del formulario no exista en la base de datos (ideal para registro de usuarios)
Bueno gente, hemos llegado al fina de este tutorial en el cual explicamos cómo validar un formulario en CodeIgniter, si quieren saber un poco más los invito a pasar por la documentación oficial https://www.codeigniter.com/userguide3/libraries/form_validation.html. Ante cualquier problema no duden en dejar un comentario.
Felicitación a todos los que participaron en este material de enseñanza ,demuestran un claro conocimiento del tema, buen trabajo muchachos.
Buen día
Estoy probando el ejemplo dado.
(Por cierto muy bien explicado todo)
Pero me encuentro que al querer validar no hace nada.
O sea si cargo o no cargo datos no muestra los mensajes.
Hay que configurar algo más …!?
Saludos