Ver Mensaje Individual
  #12 (permalink)  
Antiguo 01/03/2011, 11:39
nh2006
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: [APORTE] ¿Cómo hacer un login de usuarios en Php y CodeIgniter? Ver script

Nuevamente muchas gracias por tus valiosos aportes, en especial por el de las sesiones, ya tengo implementado el multiidiomas en el formulario web (solamente me faltó ponerle banderitas). dejo el código para una mejora.

Primero, en la ruta system/language/english crear el archivo english_lang.php y su contenido es:

Código PHP:
Ver original
  1. <?php
  2.    $lang['email'] = "E-mail:";
  3.    $lang['password'] = "Password:";
  4.    $lang['login'] = "Log in";
  5. ?>

Segundo, en la ruta system/language/spanish crear el archivo spanish_lang.php y su contenido es:

Código PHP:
Ver original
  1. <?php
  2.    $lang['email'] = "Correo electr&oacute;nico:";
  3.    $lang['password'] = "Contrase&ntilde;a";
  4.    $lang['login'] = "Ingresar";
  5. ?>

Publico el código del controlador y la vista nuevamente ya que los modifiqué, los demás archivos están iguales:

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

En la vista (login.php) tengo:
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/'.$idioma); ?>
  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.     <a href="<?php echo site_url("/php/login/es");?>">Espa&ntilde;ol</a>
  18.     <a href="<?php echo site_url("/php/login/en");?>">English</a>
  19.     <div class="fila">
  20.         <div class="LoginUsuariosCabecera"><?php echo $this->lang->line('email'); ?></div>
  21.         <div class="LoginUsuariosDato"><input type="text" name="maillogin" value="<?PHP set_value('maillogin'); ?>" size="25" /></div>
  22.         <div class="LoginUsuariosError">
  23.         <?PHP
  24.         if(isset($error)){
  25.             echo "<p>".$error."</p>";
  26.         }
  27.         echo form_error('maillogin');
  28.         ?>
  29.         </div>
  30.     </div>        
  31.     <div class="fila">
  32.         <!--<div class="LoginUsuariosCabecera">Contrase&ntilde;a:</div>-->
  33.         <div class="LoginUsuariosCabecera"><?php echo $this->lang->line('password'); ?></div>
  34.         <div class="LoginUsuariosDato"><input type="password" name="passwordlogin" value="<?PHP set_value('passwordlogin'); ?>" size="25" /></div>
  35.         <div class="LoginUsuariosError"><?PHP form_error('passwordlogin');?></div>
  36.     </div>
  37.     <div class="fila">
  38.         <div class="LoginUsuariosCabecera"></div>
  39.         <div class="LoginUsuariosDato"></div>
  40.     </div>        
  41.     <div class="fila">
  42.         <div class="LoginUsuariosCabecera"><input type="submit" value="<?php echo $this->lang->line('login'); ?>"></div>
  43.         <div class="LoginUsuariosDato"></div>
  44.     </div>        
  45. </div>
  46. <p>&nbsp;</p>    
  47. <p>&nbsp;</p>    
  48. </form>
  49. <div class="Info">
  50.     <p><strong><u>Datos de acceso</u></strong> (correspondiente a un usuario ya ingresado en la base de datos)</p>
  51.     <p><strong>e-mail</strong>: [email protected]</p>
  52.     <p><strong>password</strong>: blogdephp</strong></p>
  53. </div>
  54. <p>&nbsp;</p>    
  55. <p>&nbsp;</p>    
  56. <div class="Info">
  57.     <p><strong><u>Requerimientos</u></strong></p>
  58.     <p>Para poder implementar este script de login, se requiere el framework de php "Codeigniter"</p>
  59.     <p>(esta maravillosa herramienta nos ayuda a ahorrar mucho tiempo y esfuerzo en nuestros trabajos de programación php).</p>
  60.     <p>&nbsp;</p>
  61. </div>
  62. <div class="Info">
  63. </div>
  64. </body>
  65. </html>

Como dije, en la vista solo me faltaron las banderitas XD.

CodeIgniter, vi tu respuesta sobre cómo trabajar con sesiones cuando recién terminaba las modificaciones según tus indicaciones, ¿qué opinas de trabajrlo así? ¿siempre quedaría mejor con sesiones?.

Nuevamente muchas gracias