entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

comprobar que el usuario existe en la BBDD

Ya tengo conectada con la bbdd .
Ahora me dispongo a comprobar que el usuario esta en la bbdd

if(trim($_POST['email']) != "" && trim($_POST['password']) != "")
{
    $email = htmlentities($_POST['email']);
    $password = sha1($_POST["password"]);   
    $result = mysql_query('SELECT password, email, username FROM usuarios WHERE email=\''.$email.'\'');
    if($row = mysql_fetch_array($result)){      
        if($row['password'] == $password){
            $_SESSION['fp_username'] = $row['username'];
            $_SESSION['email'] = $row['email'];
            echo 'Has sido logueado correctamente '.$_SESSION['fp_username'].' <p>';
            echo '<a href="pruebacoach.php">Index</a></p>Ingreso exitoso, ahora sera dirigido a la pagina principal.
            <SCRIPT LANGUAGE="javascript">
            location.href = "pruebacoach.php";
            </SCRIPT>';
        }else{
            echo 'Datos incorrectos ;)';
        }
    }else{
        echo 'datos incorrectos :)';
    }
    mysql_free_result($result);
}else{
    echo 'Debe especificar un usuario y password';
}

Siempre me dice que los Datos son incorrectos y el email y contraseña que le introduzco existen en la bbdd
¿ Podríais ayudarme ?

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola gonzalss,

te sugiero para encontrar el error que muestres (con print() o con var_dump()) que el sha1() de la clave coincida con el guardado. A veces pasa que el campo es demasiado chico para contener un SHA1 y al estar recortado, nunca coincide con el ingresado.

Por otra parte, no es buena estrategia hacer una query para traer al usuario y luego comparar la contraseña, ya que se puede hacer todo junto en la propia query:

SELECT password, email, username FROM usuarios WHERE email='$email' AND password='$password'

Si esto devuelvo 1 solo registro, el usuario y clave con válidos.

Saludos!

0voto

gonzalss comentado

Te he echo caso y he puesto todo junto ,

$result = mysql_query('SELECT password, email, username FROM usuarios WHERE email=\''.$email.'\'  and password=\'' .$password. '\'  ');

Después he metido dos variables para depurar

var_dump($result);
echo $result;

me da los siguientes errores
resource(2) of type (mysql result) Resource id #2

El email y password que he metido existen en la BBDD

Muchas gracias

Editado: movido a comentario de la pregunta y puesto enl código como tal

0voto

Leonardo-Tadei comentado

Pero gonzalss!

La salida de la función mysql_query() es un manejador (handler) a la respuesta de la DB! Por eso obtenés "resource" como salida.

Para ver el registro tenés que usar mysql_fetch_array($result) como seguramente siempre usaste para mostrar datos obtenidos de una query.

Luego, recordá mirar el contenido de $password y compararlo con el contenido del campo que obtengas.

0voto

gonzalss comentado

Estoy poniendo esto

$email = htmlentities($_POST['email']);
    $password = sha1($_POST["password"]);   

    $result = mysql_query('SELECT password, email, username FROM usuarios WHERE email=\''.$email.'\'  and password=\'' .$password. '\'  ');

    var_dump($result);

    if($row = mysql_fetch_array($result)){  
        var_dump($row, $password);

        if($row['password'] == $password){
          var_dump($row, $password);

            $_SESSION['fp_username'] = $row['username'];
            $_SESSION['email'] = $row['email'];

            echo 'Has sido logueado correctamente '.$_SESSION['fp_username'].' <p>';
            echo '<a href="pruebacoach.php">Index</a></p>Ingreso exitoso, ahora sera dirigido a la pagina principal.
            <SCRIPT LANGUAGE="javascript">
            location.href = "pruebacoach.php";
            </SCRIPT>';
        }else{

            echo 'Datos incorrectos ;)';
        }
    }else{
        echo 'datos incorrectos :)';
    }
    mysql_free_result($result);
}else{
    echo 'Debe especificar un usuario y password';
}

Siempre se va a Datos incorrectos .Estoy atascado :(

0voto

Peter comentado

@gonzalss movi la respuesta a comentario y le di formato al código, lo mismo que hizo leonardo con tu comentario anterior :) Por favor publica los comentarios como tal, las respuestas son para responder la Pregunta principal únicamente. Para el código lo seleccionas y aprietas el botón { }.

Saludos.

0voto

Leonardo-Tadei comentado

Hola @gonzalss,

sacá el var_dump($result) que no dará nada útil y poné acá la salida de var_dump($row, $password)

Como en caso de error hacés una redirección, para poder ver la salida poné:

var_dump($row, $password); die();

para que aborte el script y poder ver lo que muestra antes de ser redirigido. Hacé esto en el primero, porque por el 2do no pasará salvo que coincidan las contraseñas.

Luego copiá u pegá la salida respondiendo a este comentario, así podemos ver de qué se trata...

0voto

gonzalss comentado

Tal como me has comentado he puesto :

$result = mysql_query('SELECT password, email, username FROM usuarios WHERE email=\''.$email.'\'  and password=\'' .$password. '\'  ');

        var_dump($row, $password); die ();

dándome el siguiente resultado

NULL string(40) "0d908d9b09c577f3ac0674fd4892181666471f69"

He metido tanto un email y una contraseña correcta ( que existe en la bbdd)

Muchas gracias por tu ayuda

A ver si lo logro sacar .....

0voto

Leonardo-Tadei comentado

Fijate que el primer valor NULL corresponde al registro de la DB, lo que significa que la query no devuelve ningún resultado, así que el usuario y la contraseña no se corresponden con ningún dato guardado.

Te sugiero ver los registros con alguna herramienta externa (como PHPMyAdmin) y ver qué datos hay guardados ahi para compararlos.

Sospecho que la contraseña almacenada no es la misma, o que por ejemplo la DB respeta mayúsculas y minúsculas y el nombre de usuario no coincide.

Fijate y contanos!

0voto

gonzalss comentado

Acabo de probar con otro email y otra contraseña y lo mismo
NULL string(40) "7c4a8d09ca3762af61e59520943dc26494f8941b

Lo estoy comprobando con el phpmyAdmin

Que será ??

0voto

gonzalss comentado

Te pongo el código por si te puede ayudar

if(trim($_POST['email']) != "" && trim($_POST['password']) != "")
{
    $email = htmlentities($_POST['email']);
    $password = sha1($_POST["password"]);   

    $result = mysql_query('SELECT password, email, username FROM usuarios WHERE email=\''.$email.'\'  and password=\'' .$password. '\'  ');

        var_dump($row, $password); die ();

    if($row = mysql_fetch_array($result)){  

        if($row['password'] == $password){

            $_SESSION['fp_username'] = $row['username'];
            $_SESSION['email'] = $row['email'];

            echo 'Has sido logueado correctamente '.$_SESSION['fp_username'].' <p>';
            echo '<a href="pruebacoach.php">Index</a></p>Ingreso exitoso, ahora sera dirigido a la pagina principal.
            <SCRIPT LANGUAGE="javascript">
            location.href = "pruebacoach.php";
            </SCRIPT>';
        }else{

            echo 'Datos incorrectos ;)';
        }
    }else{
        echo 'datos incorrectos :)';
    }
    mysql_free_result($result);
}else{
    echo 'Debe especificar un usuario y password';
}

0voto

Leonardo-Tadei comentado

Si estás probando el código tal cual se ve arriba, nunca llegarás a ver el resultado, porque die() termina la ejecución del script antes del $row = mysql_fetch_array($result) que es el valor que hace falta ver...

0voto

gonzalss comentado

Como estoy atascado he probado a meter directamente los datos en la select

enter code here

$result = mysql_query('SELECT password, email, username FROM usuarios WHERE email="[email protected]" and password="lololo" ');

    var_dump($row, $password);

if($row = mysql_fetch_array($result)){  
echo 'Entro en el primer if ';  ENTRA

    if($row['password'] == $password){

      echo 'compruebo que las contraseñas sean igualicas';
        $_SESSION['fp_username'] = $row['username'];
        $_SESSION['email'] = $row['email'];

        echo 'Has sido logueado correctamente '.$_SESSION['fp_username'].' <p>';
        echo '<a href="pruebacoach.php">Index</a></p>Ingreso exitoso, ahora sera dirigido a la pagina principal.
        <SCRIPT LANGUAGE="javascript">
        location.href = "pruebacoach.php";
        </SCRIPT>';
    }else{

        echo 'Datos incorrectos o contraseñas incorrectas;)';  SE VA POR AQUI
    }
}else{
    echo 'datos incorrectos :)';
}

Por el motivo que sea el select no le gusta.
¿Qué podrá ser ?

0voto

Leonardo-Tadei comentado

Es lo que et decía al principio: la query no devuelve ningún valor.

Ejecutá por ejemplo en PHPMyAdmin esto:

SELECT password, email, username FROM usuarios WHERE email="[email protected]" and password="lololo"

y vas a ver que obtenés o un error de sintaxis o cero resultados. Si no se devuelve ningún resultado, es porque el par usuario/clave no existe en la tabla...

0voto

gonzalss comentado

Lo raro es que me da bien el resultado .
Si pongo la select enPHPMyAdmin me da el registro con el email y la contraseña

¿Que podríamos hacer ahora ?

0voto

Leonardo-Tadei comentado

Si la quert devuelve un valor: el texto en la columna "password" es el mismo que el contenido de la variable $password que le llega al script???

Porque el ELSE por dónde sale elcódigo es justamente el que compara la clave ingresada con la clave guardada en la tabla...

0voto

gonzalss comentado

¿ Dónde puedo poner otro punto de control ?
O dónde puedo encontrar un ejemplo parecido. Estoy implementando que sólo los usuarios que están registrados y dados de alta en mi BBDD puedan ver una serie de artículos que voy a publicar en la web.
En caso de no estar registrados lo puedes hacer ( eso me funciona perfectamente [INSERT)
Pero estoy atascado aquí , cuando el usuario introduce el email y la contraseña y tengo que comprobar que esta en la bbdd.

Alguna idea.

Muchas gracias por tu tiempo y ayuda

0voto

Leonardo-Tadei comentado

Hacé el siguiente cambio al principio:

$sql = 'SELECT password, email, username FROM usuarios WHERE email="[email protected]" and password="lololo" ';
$result = mysql_query($sql);

Eeto no cambia nada, salvo que ahora se puede ver el contenido de la query a ejecutar.
Luego poné

var_dump($sql, $row, $password); die("Saliendo");

antes de

if($row['password'] == $password)

para ver lo que contiene la query, el registro y la variable $password y copialo y pegalo acá.

Preguntás por un ejemplo parecido... pero ejecutar una query y hacer una comparación es algo extremadamente básico como para basarse en ejemplos que hagan solo esto. La lógica de tu código no está mal, así que el error tiene que ser que la query no devuelve nada o que el contenido de la variable $password no coincide con el registro.

Lo más probable es que tu problema no sea tanto de código, que es sobre lo que estás preguntando, sino sobre algún concepto que te estás pasando por alto y que tenemos que descubir en base al código y tus comentarios.

Saludos!

0voto

gonzalss comentado

Recupera la misma contraseña que hemos puesto , la que estaba en la base de datos - buena señal-

Tengo ya la base de datos

string(105) "SELECT password, email, username FROM usuarios WHERE
email="[email protected]" and password="lololo" " NULL string(8)
"lololo"

Saliendo

Lo raro es que no entra en el primer if

if($row = mysql_fetch_array($result)){  
    echo 'Entro en el primer if ';

EDITADO: Para mostrar bien el código. (Seleccionar código y apretar { })

0voto

gonzalss comentado

Que tontería . No avanza más porque hemos metido el die ...

Ahora funciona. ¿ El error era porque no declarabamos la variable sql ? Que raro , no ?

0voto

gonzalss comentado

SOLUCIONADA .Tenía que declarar la consulta en una variable sql

0voto

Leonardo-Tadei comentado

No, tu problema no es que la consulta no estaba en una variable, sino que tu query no tenía código SQL válido.

Si te fijás, te pedía la salida de 3 variables con:

var_dump($sql, $row, $password); die("Saliendo");

y el resultado que nos dabas es:
1) un string con la query
2) un NULL
3) el string "lololo"

El segundo valor que te da NULL es el contenido de la variable $row indicando que la query devolvía cero resulatdos (un registro nulo)

Luego la comparación con la password fallará siempre, salvo que la contraseña sea NULL.

Si se solucionó es porque cambiaste de alguna manera la query... pero tal vez no puedas saberlo porque al no estar en una variable por separado, no podías verla.

En cualquier caso, me alegra que lo hayas solucionado!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta