Buenas a todos, en este nuevo post voy a continuar con CodeIgniter, pero en esta oportunidad vamos a guardar el contenido del formulario creado en el post anterior.
Para recordar un poco lo que hicimos en el post antes mencionado, creamos un formulario con tres campos: nombre, usuario y clave. Y el submit del formulario redirecciona a prueba/guardar, que como vimos, es el controlador prueba, la función guardar.
Ahora vamos a hacer unos cambios en configuración para que las actividades de este post puedan funcionar.
Primero nos vamos al archivo config/autoload.php, y en el vamos a buscar la posición en el arreglo de nombre libreries, y en el vamos a colocar array('form_validation','database','session').
Con esto estamos cargando la librería para validar nuestro formulario, guardar sesiones y poder conectarnos a base de datos.
Luego, nos vamos a config/config.php, y buscamos la posición en el arreglo de nombre global_xss_filtering, y cambiamos su valor de false a true; y $config['encryption_key'] = 'prueba', en donde prueba puede ser cualquier valor. En internet se pueden encontrar diferentes paginas que te generan esta clave, una que usado en oportunidades y me ha funcionado, es http://jeffreybarke.net/tools/codeigniter-encryption-key-generator/.
Con estos pequeños cambios, por ahora, estamos bien.
Como vamos a guardar en base de datos, necesitamos tener una, por lo tanto, creamos una base de datos llamada blog (pueden usar cualquier nombre), y en ella ejecutan el siguiente script:
CREATE TABLE `usuarios` (
`id_usuarios` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(45) NOT NULL,
`clave` varchar(45) NOT NULL,
PRIMARY KEY (`id_usuarios`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Adicionalmente, necesitamos un usuario que tenga permisos sobre esta base de datos, yo me cree un usuario llamado blog, con clave 123456 y con permisos de select, insert, update y delete.
Ahora bien, una vez que hemos creado la base de datos y hemos hechos los cambios de configuración, procedemos a crear la función guardar, la cual se va a encargar de validar que los datos que llegan están correctos, y de ser así son almacenados en BD.
Este es el código de la función:
public function guardar(){
$datos['titulo'] = "Prueba en CodeIgniter"; // titulo de la pagina
$this->form_validation->set_rules('txtnombre','Nombre','trim|required');
$this->form_validation->set_rules('txtusuario','Usuario','trim|required');
$this->form_validation->set_rules('txtclave','Clave','trim|required|md5');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('formulario_view',$datos);
}else{
$this->load->model('db_model');
$sql = "Insert into blog.usuarios values (default,'" . $this->input->post('txtnombre') . "','" . $this->input->post('txtusuario') . "','" . $this->input->post('txtclave') . "')";
$return = $this->db_model->ejecutar($sql);
if($return){
$this->session->set_userdata('mensaje','El usuario fue agregado correctamente');
redirect('prueba/formulario');
}else $datos['error'] = "Ocurrió un error al insertar el usuario en el sistema";
$this->load->view('formulario_view',$datos);
}
}
Vamos a analizar un poco el código.
Con set_rules, establecemos las reglas de validación, en nuestro caso le estoy diciendo que el campo txtnombre, en caso de que exista un error, se llama Nombre, y voy a validar, que sea obligatorio y quitando los espacios en blanco al comienzo y al final. En el caso de clave es igual, pero le agrego que aparte de validar lo convierta a md5.
Un dato importante, el idioma por defecto de CodeIgniter es el ingles, es decir, todos los mensajes, eso incluye los de error, son en ingles; por lo tanto, si queremos que los mensajes de error que produzca el form_validation, sean en español (o en otro idioma), podremos hacerlo de cualquiera de estas dos formas ( son las que conozco, no se si existen otras):
- La primera es colocando después o antes de nuestras rules (es indiferente)
('required' es la regla a la que le estamos creando un mensaje; y el %s es para que sea sustituido por el nombre del campo; el segundo parámetro colocado en el rules)
- La segunda forma, es descargando el paquete "Download all" de https://github.com/EllisLab/CodeIgniter/wiki/Language-Translation. Dentro del archivo descargado, esta una carpeta de nombre "es", la cual vamos a colocar en system/language, y vamos a renombrar por spanish. Una vez hecho esto, vamos a config.php, y cambiamos nuestro idioma a español $config['language'] = 'spanish'.
Luego de aplicar las reglas, preguntamos por el resultado de la validación, esto lo hacemos con $this->form_validation->run() == FALSE, de ser correcto en que hubo un error (en el caso de cuando inicia la pagina, no hay error pero igual ingresa por aquí), redirigimos a la vista formulario_view para que muestre los errores; en caso contrario almacenamos en BD, esto lo hacemos cargando el modelo "db_model", el cual va estar colocado en la carpeta model, y en nuestro ejemplo se va a llamar db_model.php, y tiene el siguiente código:
class Db_model extends CI_Model{
public function __construct()
{
$this->load->database();
}
public function ejecutar($sql){ $query = $this->db->query($sql);
return $query;
}
}
En caso de que falle la inserción en BD ($this->db_model->ejecutar($sql)) , guardamos un mensaje de error y llamamos a la vista para que lo muestre. De estar todo correcto, guardamos en una variable de sesión un mensaje, e invocamos al controlador formulario (el cual creamos en el post anterior) pero ahora le vamos a agregar las siguientes lineas antes de invocar a la vista
$mensaje = $this->session->userdata('mensaje');
if($mensaje != '') $datos['exito'] = $mensaje;
$this->session->sess_destroy();
Con esto guardamos el mensaje antes escrito en la sesión, y despues la destruimos.
Por ultimo, nos falta agregarle las siguientes lineas a la vista formulario_view, antes de hacer el form_open
echo validation_errors('<div id="error">','</div>');
if(isset($exito))
echo "<div id=\"exito\">" . $exito . "</div>";
if(isset($error))
echo "<div id=\"error\">" . $error . "</div>";
Con esto, hemos almacenado en BD el contenido de nuestro formulario.
Para poder obtener mas información de form_validation, podemos visitar la página
http://codeigniter.com/user_guide/libraries/form_validation.html
Y en español http://books.openlibra.com/pdf/CodeIgniter_Guia_Usuario_2_0.pdf (en la página 152 habla de form_validation)
No hay comentarios:
Publicar un comentario