Foros del Web » Programando para Internet » PHP »

Login de usuarios

Estas en el tema de Login de usuarios en el foro de PHP en Foros del Web. Hola, estoy tratando de hacer unos arreglos a un formulario de login y después de varios cambios no he conseguido los resultados esperados,llevo horas y ...
  #1 (permalink)  
Antiguo 31/08/2012, 13:32
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Login de usuarios

Hola, estoy tratando de hacer unos arreglos a un formulario de login y después de varios cambios no he conseguido los resultados esperados,llevo horas y horas y ya no se como arreglarlo.
Esta es la página formlogin.php

Código PHP:
Ver original
  1. <script language="JavaScript">
  2.  
  3. function validarlogin(form){
  4.  
  5. form.submit()
  6. }
  7. </script>
  8.   <form action="./login.php" method="post" name="form2">
  9.     Usuario:
  10.       <input name="user_name"  type="text">
  11.   Contraseña:        
  12. <input name="password" type="password">
  13.              
  14.       <input name="" type="submit" onClick="validarlogin(this.form)" value="Enviar">
  15.           <input type="hidden" name="submit" value="validate" />
  16.                     <input type="hidden" name="typeLogin" value="1" />
  17.    
  18.   </form>


Página login.php

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.    
  5. $myDB = db_connect();
  6.  
  7. if ( logIn( $_POST["user_name"],  $_POST["password"]) )
  8. {  
  9.  
  10.     $user =  $_POST["user_name"];
  11.     $id = $_SESSION['visita'];
  12.     $query = "UPDATE visitas SET nombreUsuario = '$user' WHERE id_visita = '$id'";
  13.     $result = mysql_query($query,$myDB);
  14.    
  15.            
  16.     $gbl['user_name'] =  $_POST["user_name"];
  17.     $gbl['password'] =  $_POST["password"];
  18.    
  19.    
  20.     $_SESSION["autentificado"]= "SI";
  21.     $_SESSION['login'] = true;
  22.    
  23.     $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  24.    
  25.     $_SESSION['global'] = $gbl;
  26.     $_SESSION['login'] = true;
  27.    
  28.    
  29.     db_disconnect($myDB);
  30.        
  31. ?>

El login funciona siempre y cuando ingrese un usuario válido, si los datos son erróneos me dice que los datos son incorrectos pero si envío los campos vacíos se loguea igual, cómo hago para corregir este problema, quiero que se validen los campos y que no envie nada sino se ingresaron datos.

Agradezco a todos los que me puedan colaborar
  #2 (permalink)  
Antiguo 31/08/2012, 13:44
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Login de usuarios

el problema es que no muestras el código de login, como tal la función logIn, así que estamos a ciegas para poder ayudarte
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 31/08/2012, 13:45
 
Fecha de Ingreso: agosto-2012
Mensajes: 21
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Login de usuarios

¿Función logIn?
Debes de ponerla si quieres que te hechemos una mano :)
  #4 (permalink)  
Antiguo 31/08/2012, 14:15
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

La función logIn? no entiendo a cual función se refieren, en el código no veo sino la función validarlogin
  #5 (permalink)  
Antiguo 31/08/2012, 14:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Login de usuarios

Cita:
Iniciado por anamilena9 Ver Mensaje
La función logIn? no entiendo a cual función se refieren, en el código no veo sino la función validarlogin
a esto se refieren:
Código PHP:
Ver original
  1. if ( logIn( $_POST["user_name"],  $_POST["password"]) )
  #6 (permalink)  
Antiguo 31/08/2012, 15:02
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Esto es lo que hacía falta del código, lo que iría en el else.
Debo aclarar que este código no lo hice, me lo entregaron para que arreglara ciertos detalles, y aunque le he hecho varias modificaciones no he podido solucionarlo, no lo entiendo bien.

Código PHP:
Ver original
  1. if ($_POST['typeLogin'] == '1'){
  2.         header("Location: ".cnfgi('deHome').'?login=yes');
  3.         exit;
  4.     }
  5.     if ($_POST['typeLogin'] == '2'){
  6.         header("Location: ".cnfgi('deHome').'?pgx=elegir.php&login=yes');
  7.         exit;
  8.     }else{
  9.         header("Location: ".cnfgi('deHome').'?&login=yes');
  10.         exit;
  11.     }
  12. }
  13. else
  14. {  
  15.     db_disconnect($myDB);
  16.    
  17. }
  #7 (permalink)  
Antiguo 31/08/2012, 15:07
 
Fecha de Ingreso: agosto-2010
Mensajes: 44
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: Login de usuarios

Por lo q veo me parece q lo q falta es que compares los datos q recibes, con los usuarios almacenados en tu bd ..

Código PHP:
Ver original
  1. if ( logIn( $_POST["user_name"],  $_POST["password"]) )
  2. {  
  3.  
  4.     $user = $_POST["user_name"];
  5.     $pass = $_POST["password"];
  6. }

tendrías q hacer una consulta mas o menos así ..

Código PHP:
Ver original
  1. $sql = "SELECT * FROM "TU_TABLA_DE USUARIOS" WHERE nombreUsuario = '".$user."' AND claveusuario = '".$pass."';";
  2.   $result = mysql_query($sql, $myDB);
  3.   if($row = mysql_fetch_assoc($result)){
  4.     if($row["nombreUsuario"] == $user){
  5.        $query = "UPDATE visitas SET nombreUsuario = '$user' WHERE id_visita = '$id'";
  6.        $result = mysql_query($query,$myDB);  
  7.        $gbl['user_name'] =  $_POST["user_name"];
  8.        $gbl['password'] =  $_POST["password"];
  9.        $_SESSION["autentificado"]= "SI";
  10.        $_SESSION['login'] = true;
  11.        $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  12.     }else{
  13.          echo "USUARIO O CLAVE INCORRECTO .. VERIFIQUE E INTENTE NUEVAMENTE"."<br>";
  14.     }
  15.    mysql_close($myDB);
  16. }

Así debería de funcionar ... asignando claro, los nombres correctos de los campos de tu tabla a las respectivas variables ....

Dos concejos .. es recomendable q uses solo minúsculas en tus variables ....

.. y tb te recomiendo q realices un filtrado o limpiezas de la cadena q ingresa a través del imput el usuario y envías a través de $_POST .. esto con la finalidad de evitar q te hackeen introduciendo código malicioso... a mi me pasó hace un par de días .. si te interesa .. publiqué un post donde puse el ejemplo q usé para limpiar las cadenas ... puedes verlo aquí: http://www.forosdelweb.com/f18/sitio-hackeado-1010630/ ..

Espero te sea de ayuda ...
  #8 (permalink)  
Antiguo 31/08/2012, 19:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Hola fher, hice los cambios pero no me ha servido. Está interesante como resolviste lo del hackeo. En eso pensaré luego, por ahora necesito resolver lo del login.

Lo único que no funciona es si se dejan los campos vacíos, si se ingresa datos de un usuario que existe en la base de datos se loguea bien, y si se ingresan datos erróneos no deja entrar y muestra un mensaje, el problema está cuando los dos campos estan en blanco.
  #9 (permalink)  
Antiguo 31/08/2012, 22:19
 
Fecha de Ingreso: agosto-2010
Mensajes: 44
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: Login de usuarios

mmm .. pos creo q te falta esto al inicio del script para validar q se estén pasando datos

porque no pruebas lo siguiente:

Código PHP:
Ver original
  1. if (isset($_POST['user_name'], $_POST['password'])) {
  2.     $usr = $_POST['user'];
  3.     $pass = $_POST['pass'];
  4.      
  5.     //el resto del código ....
  6.  
  7. }

me avisas cualquier novedad .. a mi me funciona sin problemas .. tanto si pongo o no usuarios ..
  #10 (permalink)  
Antiguo 01/09/2012, 06:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Gracias fher, voy a probar y luego te cuento
  #11 (permalink)  
Antiguo 01/09/2012, 07:28
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Login de usuarios

Fher, a tu if se le puede implementar lo siguiente:
Código PHP:
Ver original
  1. if (isset($_POST['user_name'], $_POST['password']) && ($_POST['user_name']!="") && ($_POST['password']!="")) {...}
Si le pones esto si que funcionará 100%. Asegurado porque además de comprobar si se crean, se comprueba que no contengan nada, es decir, que lleven algo.
  #12 (permalink)  
Antiguo 01/09/2012, 07:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.  
  5. $myDB = db_connect();
  6.  
  7. if(isset($_POST['user_name']) && !empty($_POST['user_name']) &&
  8. isset($_POST["password"])&& !empty($_POST['password']))
  9. {
  10.     $user =  $_POST["user_name"];
  11.     $pass =  $_POST["password"];
  12.     $id = $_SESSION['visita'];
  13.    
  14.        
  15. $sql = "SELECT * FROM "std_users" WHERE nombreUsuario = '".$user."' and  password = '".$pass."';";
  16.        
  17.     $result = mysql_query($sql, $myDB);
  18.      if($row = mysql_fetch_assoc($result)){
  19.         if($row["nombreUsuario"] == $user){
  20.           $query = "UPDATE visitas SET nombreUsuario = '$user' WHERE id_visita = '$id'";
  21.            $result = mysql_query($query,$myDB);  
  22.           $gbl['user_name'] =  $_POST["user_name"];
  23.           $gbl['password'] =  $_POST["password"];
  24.          
  25.           $_SESSION["autentificado"]= "SI";
  26.            $_SESSION['login'] = true;
  27.            $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  28.         }else{
  29.              echo "USUARIO O CLAVE INCORRECTO .. VERIFIQUE E INTENTE NUEVAMENTE"."<br>";
  30.         }
  31.        mysql_close($myDB);
  32.        $_SESSION["autentificado"]= "SI";
  33.     $_SESSION['login'] = true;
  34.    
  35.     $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
  36.    
  37.     $_SESSION['global'] = $gbl;
  38.     $_SESSION['login'] = true;
  39.        
  40.     db_disconnect($myDB);
  41.     if ($_POST['typeLogin'] == '1'){
  42.         header("Location: ".cnfgi('deHome').'?login=yes');
  43.         exit;
  44.     }
  45.     if ($_POST['typeLogin'] == '2'){
  46.         header("Location: ".cnfgi('deHome').'?pgx=elegir.php&login=yes');
  47.         exit;
  48.     }else{
  49.         header("Location: ".cnfgi('deHome').'?&login=yes');
  50.         exit;
  51.     }
  52.  
  53.  
  54.  
  55. else
  56.  
  57. {  
  58.  
  59.  
  60. db_disconnect($myDB);
  61. header("Location: ".cnfgi('deHome').'?crpx=log_error');
  62.     exit;
  63. }
  64.      }
  65.  
  66.        
  67. ?>

Hola fher, este es el código, me marca error en:
$sql = "SELECT * FROM "std_users" WHERE nombreUsuario = '".$user."' and password = '".$pass."';";

Implementé algo paracecido a lo que sugiere legomolina para la validación
  #13 (permalink)  
Antiguo 01/09/2012, 08:44
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Login de usuarios

Creo que std_users debe ir dentro de las comillas, en rojo.
Compruébalo y comenta.
  #14 (permalink)  
Antiguo 01/09/2012, 09:19
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Pero si std_users está entre comillas, no entiendo lo que quieres decir
  #15 (permalink)  
Antiguo 01/09/2012, 10:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

Después de rebuscar bastante encontré la dichosa funcion LogIn, sucede que al principio del script hay una serie de archivos que son requeridos y no los había mirado, así que fui a cada uno de estos y encontré la función.
Esto sería lo que hace la función, remitanse al primer código que publiqué, ya que en los otros omití esta función e hice cambios que no me han servido.

Código PHP:
Ver original
  1. function logIn($user_name, $password)
  2. {
  3.     GLOBAL $myDB ;
  4.  
  5.     srand((double)microtime()*1000000);
  6.  
  7.     $the_rand = rand(1, 10000);
  8.     $the_rand2 = rand(1, 10000);
  9.     $the_rand3 = rand(1, 10000);
  10.     $the_rand = ''.$the_rand.''.$the_rand2.''.$the_rand3;
  11.  
  12.     $query = "UPDATE std_users SET cookie_id='$the_rand'
  13.              WHERE usuario='$user_name' AND password='$password' " ;
  14.  
  15.     $result = mysql_query($query,$myDB) ;
  16.    
  17.     if ( mysql_affected_rows($myDB)==1 ){  
  18.        
  19.        
  20.     $query2 = "SELECT * from std_users WHERE usuario='$user_name' AND password='$password' " ;
  21.     $result2 = mysql_query($query2,$myDB);
  22.     $_SESSION['user'] = mysql_fetch_array($result2);
  23.         $_SESSION["autentificado"]= "SI";
  24.         return true;
  25.     }
  26.     else
  27.     {   return false;
  28.     }
  29.  
  30. }
  #16 (permalink)  
Antiguo 01/09/2012, 11:08
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 8 meses
Puntos: 72
Respuesta: Login de usuarios

¿No será que en la tabla std_users de la base de datos hay un registro con los campos usuario y password en blanco?
  #17 (permalink)  
Antiguo 01/09/2012, 12:27
 
Fecha de Ingreso: agosto-2012
Mensajes: 28
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Login de usuarios

wow lubtufano! ese era el gran problema, muchísimas gracias, ya no sabía que mas hacer, me estaba mareando con tanto código y pruebas sin obtener nada.

Gracias por alumbrar mi camino.

Etiquetas: formulario, login, mysql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:52.