Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/02/2011, 10:23
nh2006
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 18 años
Puntos: 3
De acuerdo Respuesta: [APORTE] ¿Cómo hacer un login de usuarios en Php y CodeIgniter? Ver script

Excelente aporte, me funcionó pero con unas leves modificaciones, para ello vuelvo a publicar todos tu códigos ya con los comentarios en la parte superior.

Este post lo encontré porque desde hace ratos quiero saber cómo crear una web que soporte multiidiomas con el CI llevo ratos pero no encontré cómo, iba a publicar un post para ello, porque nada más encuentro explicaciones y no un ejemplo que funcione, sería bueno que alguien nos hiciera el favor a ver si le pueda agregar esa funcionalidad en el login, de aquí surge mi observación para el script presentado, resulta que si estoy viendo el login en español, cuando doy clic en Ingresar, los mensajes de error deberían ir en español, lo mismo para el inglés: si el login se encuentra en inglés, los mensajes de error en inglés. Esto como una mejora a incorporar al script

Aclaro que estoy empezando con CI y tratando de enteder el MVC, es una de esas leí que según este modelo, en el controlador tienes un echo, cosa que no deberías puesto que todas las salidas (echo) deben ser única y exclusivamente para las vistas, de lo contrario no estarías deacuerdo a la filosofía del MVC, razón por la cual he creado una vista llamada principal.php donde cae el usuario en caso de ingresar con éxito. Por cierto tu vista me generaba caracteres raros así que ya cambié los código html correspondientes.

Por favor vean el código de la vista principal.php será importante para mejorar el script.

Controlador php.php:

Código PHP:
Ver original
  1. <?PHP
  2. class Php extends CI_Controller {
  3.     function login()
  4.     {
  5.         $this->load->helper('form');
  6.         //Si no recibimos ningún valor proveniente del formulario, significa que el usuario recién ingresa:
  7.         if(!isset($_POST['maillogin'])){
  8.             //Por lo tanto le presentamos la pantalla del formulario de ingreso:        
  9.             $this->load->view('login');        
  10.         }
  11.         else{//Si el usuario ya pasó por la pantalla inicial y presionó el botón "Ingresar"
  12.            
  13.             //Configuramos las validaciones ayudandonos con la librería form_validation del Framework Codeigniter
  14.             $this->form_validation->set_rules('maillogin','e-mail','required|valid_email');        
  15.             $this->form_validation->set_rules('passwordlogin','password','required');
  16.            
  17.             //Verificamos si el usuario superó la validación
  18.             if(($this->form_validation->run()==FALSE)){
  19.                 //En caso que no, volvemos a presentar la pantalla de login
  20.                 $this->load->view('login');
  21.             }
  22.             else{//Si ambos campos fueron correctamente rellanados por el usuario,
  23.                 $this->load->model('usuarios_model');
  24.                
  25.                 //Comprobamos que el usuario exista en la base de datos y la password ingresada sea correcta
  26.                 $ExisteUsuarioyPassoword=$this->usuarios_model->ValidarUsuario($_POST['maillogin'],$_POST['passwordlogin']);
  27.                
  28.                 //La variable $ExisteUsuarioyPassoword recibe valor TRUE si el usuario existe y FALSE en caso que no. Este valor lo determina el modelo.
  29.                 if($ExisteUsuarioyPassoword){
  30.                     /*Si el usuario ingresó datos de acceso válido,
  31.                       Muestro la vista principal de lo que sería mi aplicación,
  32.                       enviándole como dato el usuario
  33.                     */
  34.                     $data['usuario']=$_POST['maillogin'];
  35.                     //Lo regresamos a la pantalla de login y pasamos como parámetro el mensaje de error a presentar en pantalla
  36.                     $this->load->view('principal',$data);  
  37.                 }
  38.                 else{//Si no logró validar
  39.                     $data['error']="E-mail o password incorrecta, por favor vuelva a intentar";
  40.                     //Lo regresamos a la pantalla de login y pasamos como parámetro el mensaje de error a presentar en pantalla
  41.                     $this->load->view('login',$data);
  42.                 }
  43.             }
  44.         }
  45.     }
  46. }
  47. ?>

Vista: loging.php:

Código PHP:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title>Blogdephp.com, &iquest;c&oacute;mo hacer un login de usuarios en php? Ver script y demo!</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6. <link rel="stylesheet" href="http://www.blogdephp.com/script/php-login.css" type="text/css" media="screen">
  7. <!--<link rel="stylesheet" href="../../php-login.css" type="text/css" media="screen">-->
  8. </head>
  9.  
  10. <body style="margin-top:0px">
  11. <?php echo form_open('php/login'); ?>
  12. <div class="Info">
  13.     <p class="Titulo">Demo: &iquest;c&oacute;mo hacer un login de usuarios en php?</p>
  14.     <p>&nbsp;</p>    
  15. </div>
  16. <div id="LoginUsuarios">
  17.     <div class="fila">
  18.         <div class="LoginUsuariosCabecera">E-mail:</div>
  19.         <div class="LoginUsuariosDato"><input type="text" name="maillogin" value="<?PHP set_value('maillogin'); ?>" size="25" /></div>
  20.         <div class="LoginUsuariosError">
  21.         <?PHP
  22.         if(isset($error)){
  23.             echo "<p>".$error."</p>";
  24.         }
  25.         echo form_error('maillogin');
  26.         ?>
  27.         </div>
  28.     </div>        
  29.     <div class="fila">
  30.         <div class="LoginUsuariosCabecera">Contrase&ntilde;a:</div>
  31.         <div class="LoginUsuariosDato"><input type="password" name="passwordlogin" value="<?PHP set_value('passwordlogin'); ?>" size="25" /></div>
  32.         <div class="LoginUsuariosError"><?PHP form_error('passwordlogin');?></div>
  33.     </div>
  34.     <div class="fila">
  35.         <div class="LoginUsuariosCabecera"></div>
  36.         <div class="LoginUsuariosDato"></div>
  37.     </div>        
  38.     <div class="fila">
  39.         <div class="LoginUsuariosCabecera"><input type="submit" value="Ingresar"></div>
  40.         <div class="LoginUsuariosDato"></div>
  41.     </div>        
  42. </div>
  43. <p>&nbsp;</p>    
  44. <p>&nbsp;</p>    
  45. </form>
  46. <div class="Info">
  47.     <p><strong><u>Datos de acceso</u></strong> (correspondiente a un usuario ya ingresado en la base de datos)</p>
  48.     <p><strong>e-mail</strong>: [email protected]</p>
  49.     <p><strong>password</strong>: blogdephp</strong></p>
  50. </div>
  51. <p>&nbsp;</p>    
  52. <p>&nbsp;</p>    
  53. <div class="Info">
  54.     <p><strong><u>Requerimientos</u></strong></p>
  55.     <p>Para poder implementar este script de login, se requiere el framework de php "Codeigniter"</p>
  56.     <p>(esta maravillosa herramienta nos ayuda a ahorrar mucho tiempo y esfuerzo en nuestros trabajos de programación php).</p>
  57.     <p>&nbsp;</p>
  58. </div>
  59. <div class="Info">
  60. </div>
  61. </body>
  62. </html>

Modelo: usuarios_model.php

Código PHP:
Ver original
  1. <?php
  2. class Usuarios_model extends CI_Model{
  3.     //Consulta Mysql para buscar en la tabla Usuario aquellos usuarios que coincidan con el mail y password ingresados en pantalla de login
  4.     function ValidarUsuario($email,$password){
  5.         //La consulta se efectúa mediante Active Record. Una manera alternativa, y en lenguaje más sencillo, de generar las consultas Sql.
  6.         $query = $this->db->where('Usuario',$email);
  7.         $query = $this->db->where('Password',$password);
  8.         $query = $this->db->get('Usuarios');
  9.        
  10.         //Devolvemos al controlador la fila que coincide con la búsqueda. (FALSE en caso que no existir coincidencias)
  11.         return $query->row();
  12.     }
  13. }
  14. ?>

Vista: principal.php
Código PHP:
Ver original
  1. <?PHP
  2. /*De momendo solamente sería mostrar el mensaje
  3. Aunque como toda Web seria de hoy en día, lo ideal sería verificar también
  4. que tipo de usuario es, ya sea un administrador o un usuario normal y de ahí
  5. la información que verá cada, si alguien lo puede continuar y lo publica
  6. se agradecería para ver que otras funcionaliadades le podemos dar.
  7. */
  8. echo "Bienvenido a mi aplicaci&oacute;n ".$usuario;
  9. ?>

De primas a primera me mandó error porque no reconocía "form_validation" la razón es porque no se cargaba la libreria (form_validation) , así que lo único que deben de hacer es agregar la librería necesaria al autoload.php en el directorio 'application/config' como sigue:

Código PHP:
Ver original
  1. $autoload['libraries'] = array('database','form_validation');

Por alguna razón tampoco me funcionó el <?= así que por eso ocupo el <?PHP echo...

Última edición por nh2006; 25/02/2011 a las 11:08