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

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