Foros del Web » Programando para Internet » PHP »

No funciona mi login

Estas en el tema de No funciona mi login en el foro de PHP en Foros del Web. Hola de nuevo chicos, lleva este código preocupando bastante y, a lo que iba, me preocupa que no me funcione el código. Básicamente, el código, ...
  #1 (permalink)  
Antiguo 25/02/2016, 04:36
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
No funciona mi login

Hola de nuevo chicos, lleva este código preocupando bastante y, a lo que iba, me preocupa que no me funcione el código. Básicamente, el código, lo que hace, es recoger los datos del usuario y la pw de la base de datos y insertar la ip en la misma. Lo que pasa, es que al intentarme loguear, no puedo y también, necesitaría meter unas cookies y configurar bien la $_SESSION porque, no está bien configurada ya que faltan parámetros que yo, personalmente desconozco.

Código PHP:
<?php
session_start
();
require_once(
'servidor.php');
conectar('****''****''****''****');

 
//Variables 
$username strip_tags($_POST['user']); 
$password strip_tags(sha1($_POST['pw']));
$ip $_SERVER['REMOTE_ADDR'];


$ip mysql_query("UPDATE usuarios SET ip='".$ip."' WHERE user='".mysql_real_escape_string($username)."' AND pw='".mysql_real_escape_string($password)."' LIMIT 1 "); 
$query = @mysql_query("SELECT * FROM usuarios WHERE user='".mysql_real_escape_string($username)."' AND pw='".mysql_real_escape_string($password)."' LIMIT 1 "); 

$data mysql_fetch_array($query);

  
if(
$password $data['pw'])  

{  

    
$_SESSION['logged'] = 'yes';    
    
$_SESSION['username'] = $username
    
header('Location: inicio.html');  
 
}
else
{
    echo 
'El usuario y/o pass son incorrectos.';   

}

?>
Saludos, y muchas gracias, atentamente.
-sergi
  #2 (permalink)  
Antiguo 25/02/2016, 09:52
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: No funciona mi login

Por qué ese "LIMIT 1" en las consultas? Imagino que solo puede haber un nombre de usuario único, así que no le veo sentido

Y qué parametros dices que te hacen falta? Por lo que veo estás haciendo bien la creación de sesiones.
  #3 (permalink)  
Antiguo 25/02/2016, 09:55
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: No funciona mi login

Tu lógica está mal implementada, se supone que en un Login revises si el usuario existe y la contraseña es válida (es decir un SELECT a la base de datos), pero estás haciendo un UPDATE primero actualizando TODO y un SELECT después, eso NO tiene sentido.

SI quieres actualizar la IP del usuario lo haces después de verificarlo (SELECT)
  #4 (permalink)  
Antiguo 26/02/2016, 00:28
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Respuesta: No funciona mi login

esta mal:
Código PHP:
Ver original
  1. if($password = $data['pw'])
es:
Código PHP:
Ver original
  1. if($password == $data['pw'])

Última edición por ginitofl; 26/02/2016 a las 00:29 Razón: zzz
  #5 (permalink)  
Antiguo 26/02/2016, 03:40
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: No funciona mi login

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Por qué ese "LIMIT 1" en las consultas? Imagino que solo puede haber un nombre de usuario único, así que no le veo sentido

Y qué parametros dices que te hacen falta? Por lo que veo estás haciendo bien la creación de sesiones.
Solo un apunte. El limit 1 es correcto si solo esperas un dato, no tienes necesidad de que el motor de la bd recorra todos los registros. Lo que consigues con el limit es que se detenga en el momento que encuentre 1 coincidencia.

Si tienes una tabla de 100 registros por decir algo y la coincidencia se produce en el registro 1 que necesidad tienes de recorrer los otros 99 buscando coincidencias. Así que sí yo diría que usar el limit es adecuado.
  #6 (permalink)  
Antiguo 26/02/2016, 03:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No funciona mi login

En el caso del UPDATE usar LIMIT sí es completamente innecesario, porque además de que primero debe hacerse el SELECT se debe usar el ID (primary_key) para que la actualización sea efectiva sólo para ese registro en particular (de paso se evitan look-ups excesivos).

Si dicha columna del ID no es primary_key, o bien, no está indexada entonces si valdría la pena usar LIMIT, de otra forma me parece una total falta de sentido común.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 26/02/2016, 03:51
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: No funciona mi login

Cita:
Iniciado por pateketrueke Ver Mensaje
En el caso del UPDATE usar LIMIT sí es completamente innecesario, porque además de que primero debe hacerse el SELECT se debe usar el ID (primary_key) para que la actualización sea efectiva sólo para ese registro en particular (de paso se evitan look-ups excesivos).

Si dicha columna del ID no es primary_key, o bien, no está indexada entonces si valdría la pena usar LIMIT, de otra forma me parece una total falta de sentido común.
Obviamente me refería al Select, pero gracias por el apunte.
  #8 (permalink)  
Antiguo 26/02/2016, 06:21
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No funciona mi login

Primero de todo, muchas gracias por las respuestas y ahora, seguimos. Me he dado cuenta de que la ip no la necesitaba para nada y entonces lo he borrado. Ahora, lo que me pasa es que me ha quedado el código siguiente (creo que está bien) pero a la hora de hacer el login no funciona correctamente.

Código PHP:
<?php
session_start
();
require_once(
'servidor.php');
conectar('mysql4.000webhost.com''a5612869_sergi''123456s''a5612869_camara');

 
//Variables 
$username strip_tags($_POST['user']); 
$password strip_tags(sha1($_POST['pw']));

$query = @mysql_query("SELECT * FROM usuarios WHERE user='".mysql_real_escape_string($username)."' AND pw='".mysql_real_escape_string($password)."' LIMIT 1 "); 

$data mysql_fetch_array($query);

  
if(
$password == $data['pw'])  

{  

    
$_SESSION['logged'] = 'yes';    
    
$_SESSION['username'] = $username
    
header('Location: inicio.html');  
 
}
else
{
    echo 
'El usuario y/o pass son incorrectos.';   

}

?>
Atentamente,
-sergi

Última edición por OfSerker; 26/02/2016 a las 06:22 Razón: código erróneo
  #9 (permalink)  
Antiguo 26/02/2016, 06:31
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: No funciona mi login

Y que error o problema te da?

Por otro lado strip_tags no creo que tenga sentido en este contexto
Sí quieres escapar con
mysqli.real-escape-string.php es suficiente

La arroba del query quitala para no esconder errores.

Utiliza mysqli_error para saber si la consulta da algún error
  #10 (permalink)  
Antiguo 26/02/2016, 06:49
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No funciona mi login

¿Así está bien? El error que tengo es que no me loguea porque me dice que el Usuario o la pass es incorrecto (es decir que no se cumple el if). No entiendo porque no se cumple está todo genial. ¿Que le puede ocurrir?


Código PHP:
<?php
session_start
();
require_once(
'servidor.php');
conectar('mysql4.000webhost.com''a5612869_sergi''123456s''a5612869_camara');

 
//Variables 
$username mysqli_real_escape_string($_POST['user']); 
$password mysqli_real_escape_string(sha1($_POST['pw']));

$query mysql_query("SELECT * FROM usuarios WHERE user='".mysql_real_escape_string($username)."' AND pw='".mysql_real_escape_string($password)."' LIMIT 1 ") or mysqli_error

$data mysql_fetch_array($query);

  
if(
$password == $data['pw'])  

{  

    
$_SESSION['logged'] = 'yes';    
    
$_SESSION['username'] = $username
    
header('Location: inicio.html');  
 
}
else
{
    echo 
'El usuario y/o pass son incorrectos.';   

}

?>
Atentamente,
-sergi.
  #11 (permalink)  
Antiguo 26/02/2016, 06:51
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No funciona mi login

Osea, era el error de antes. Pero ahora, lo que me pasa es que poniendo en la web cualquier nombre y cualquier contraseña, me entra a lo que viene a ser el inicio de la web. Es increible lo que me pasa... ¿Porque sucede esto?
  #12 (permalink)  
Antiguo 26/02/2016, 06:58
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No funciona mi login

Chicos, enserio, estoy probando mi código y veo que es una completa basura. Acabo de observar que no cumple ni los hechos, es decir que al hacer funcionar el código, ni me muestro los "echo". Me estoy empezando a mosquear porque veo que no funciona ni hace nada, sólo si le doy al botón te entra a la web y ya está .

Espero que me ayudéis, el código se ha quedado así. Atentamente:
-sergi

Código PHP:
<?php
session_start
();
require_once(
'servidor.php');
conectar('qq''fdsfsi''sss''dgsagds') or die;

 
//Variables 
echo $username;
echo 
$password
echo 
'hola';
 
$username mysqli_real_escape_string($_POST['user']); 
$password mysqli_real_escape_string(sha1($_POST['pw']));

$query mysql_query("SELECT * FROM usuarios WHERE user='".mysql_real_escape_string($username)."' AND pw='".mysql_real_escape_string($password)."' LIMIT 1 ") or mysqli_error

$data mysql_fetch_array($query);

  
if(
$password == $data['pw'])  

{  

    
$_SESSION['logged'] = 'yes';    
    
$_SESSION['username'] = $username
    
header('Location: inicio.html');  
 
}
else
{
    echo 
'El usuario y/o pass son incorrectos.';   

}

?>
  #13 (permalink)  
Antiguo 26/02/2016, 07:44
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: No funciona mi login

Bueno echemos un vistazo

Código PHP:
<?php 
session_start
(); 
require_once(
'servidor.php'); 
conectar('qq''fdsfsi''sss''dgsagds') or die; 

 
//Variables
$username=$_POST['user'];
$password=$_POST['pw'];

  
$username mysql_real_escape_string($username);  
$password mysql_real_escape_string(sha1($password)); 

$query mysql_query("SELECT * FROM usuarios WHERE user='".$username."' AND pw='".$password."' LIMIT 1 ");  
echo 
mysql_error();

$data mysql_fetch_array($queryMYSQL_ASSOC); 

   
if(
$password == $data['pw']){   

    
$_SESSION['logged'] = 'yes';     
    
$_SESSION['username'] = $username;  
    
header('Location: inicio.html');

else { 
    echo 
'El usuario y/o pass son incorrectos.'


?>
Prueba así y nos cuentas.

Qué campos tienes en tu base de datos?
  #14 (permalink)  
Antiguo 26/02/2016, 13:30
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No funciona mi login

Básicamente, el archivo no recibe los datos del servidor porque no hace el echo. ¡Es increíble! Esto es lo que sale cuándo acabo el formulario (el login) :



Ahora, os mando el archivo del server, no se si estará bien configurado todo o habrá algún error:

servidor.php

Código PHP:
<?php
function conectar($servidor$user$pass$name)
{
    
$con = @mysql_connect($servidor$user$pass);
    @
mysql_select_db($name$con);
}
?>
Si necesitas algo más para ayudarme, ¡ya sabes preguntamelo! Por cierto, muchas gracias por tu apoyo. Atentamente,
-sergi
  #15 (permalink)  
Antiguo 26/02/2016, 13:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No funciona mi login

Tres cosas muy importantes antes de que sigas divagando:

1. Es pésima practica usar @ en todas partes del código, eso sencillamente oculta los posibles errores y dificulta su análisis.

2. Siempre debes habilitar el reporte de errores al máximo mientras desarrollas, de otra forma igualmente es imposible entender nada.

3. Por último, por favor, revisa el log de errores de tu servidor: ahí puede que te indique el error actual porque una pantalla en blanco es sinónimo de "todo está mal".
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 26/02/2016, 13:51
 
Fecha de Ingreso: agosto-2008
Mensajes: 64
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: No funciona mi login

Aver chaval, prueba como te indico xerifandtomas, con eso no debes de batallar si a si no funciona...

sube tu proyecto y pasamelo por este foro, no por mensaje privado... para descargarlo y checarlo aver donde esta tu falla, y decirte como arreglarlo.
  #17 (permalink)  
Antiguo 27/02/2016, 15:40
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: No funciona mi login

A ver te voy a exponer un ejemplo completo y comentado para que lo analices he intentes comprnder como funciona y los pasos basicos.

Espero que te sea de ayuda.

Código PHP:
Ver original
  1. <?php
  2. /* inicializamos sesion */
  3. /* extraemos las variables de POST */
  4. extract($_POST, EXTR_SKIP);
  5. /* Creamos una bandera para los errores */
  6. $flag=0;
  7. /* Verificamos los datos */
  8. if (trim($user)==='' OR strlen($user)<3) {$flag=1;}
  9. if (trim($pw)==='' OR strlen($pw)<3) {$flag=1;}
  10. if ($flag===0){}else{echo '<p style="color:red">Usuario o PWD muy cortos. <a href="./login.php">Login</a></p>';exit;}
  11. /* Creamos conexion a la BD */
  12. $link = mysqli_connect("localhost","usuario","contrasena","mi_bd") or die("Error " . mysqli_error($link));
  13. /* Verificamos la conexión */
  14. if (mysqli_connect_errno()) {printf("Fall&oacute; la conexi&oacute;n: %s\n", mysqli_connect_error());exit;}
  15. /* Establecemos el conjunto de caracteres a utf8 */
  16. if (!mysqli_set_charset($link, "utf8")) {printf("Error cargando el conjunto de caracteres utf8: %s\n", mysqli_error($link));exit;}
  17.     mysqli_query($link, 'SET NAMES utf8') or die(mysql_error());
  18.     mysqli_query($link, 'SET CHARACTER SET utf8') or die(mysql_error());
  19.     mysqli_query($link, 'SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error());
  20. /* Escapamos los datos */
  21. $user=mysqli_real_escape_string($link, $user);
  22. $pw=mysqli_real_escape_string($link, $pw);
  23. /* Creamos la consulta */
  24. $sql="SELECT * FROM usuarios WHERE user='$user' AND pw='$pw' LIMIT 1";
  25. /* Ejecutamos la consulta */
  26. $resultado=mysqli_query($link,$sql);
  27. /* Imprimimos errores si los hubiera */
  28. echo mysqli_error($link);
  29. /* Comprobamos si devuelve algun resultado */
  30. if(mysqli_num_rows($resultado)>0){}else{$flag=1;}
  31. if ($flag===0){}else{echo '<p style="color:red">Error de usuario. <a href="./login.php">Login</a></p>';exit;}
  32. /* Creamos la variables de sesion necesarias */
  33. $row = mysqli_fetch_array($resultado, MYSQLI_ASSOC);
  34. $_SESSION['username']=$row['username'];
  35. $_SESSION['id_usu']=$row['id'] ;
  36. $_SESSION['privilegios']=$row['privilegios'];
  37. $_SESSION['tiempo']=time();
  38. /* Redirigimos a la pagina deseada */
  39. header('Location:./my_pagina.php');
  40. /* Cerramos la conexion */
  41. mysqli_close($link);
  42. ?>

Etiquetas: html, login, mysql, select, sql, usuarios, variable
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 21:25.