Ayuda PHP: Autentificación

keco

Hola, estoy haciendo un sistema de logeo y eso, y la verdad estoy un poco verde en eso. Mi problema es la autentificacion, he mirao unos cuantos manuales, xo ninguno me lo aclara mucho. He exo el script, xo me da error, alguien me puede decir que le pasa?(Seguramente sera una tonteria, o que habre puesto alguna burrada):


<?php

mysql_connect("localhost","X");

if ($user==""):
printf("Introduce tu nick de usuario");
else:
if ($pass==""):
printf("Débes poner tu contraseña");
else:
$resultado = mysql_query("SELECT * FROM admins");
$Row = myqsl_fetch_array($resultado);
$usuario = $Row["user"];
$contraeña = $Row["pass"];
if (($usuario == $user) && ($contraseña == $pass)):
printf("<br><br>Bienvenido $user!<br><br>Pulsa <a href=\"?mod=menu\">aquí</a> para continuar.");
else:
printf("Datos mal introducidos. Prueba de nuevo: <a href=\"?mod=admin\">Volver</a>");
?>

Podría alguien decirme el error, o darme algun link a una buena guia de sistema de usuarios, o simplemente de logeo y manejo de sesiones.

Otra cosa, en las páginas cuando ya estas logeado, como se hace el script para que si el que no esta logeado no le muestre nada, y si si lo está que le muestre el contenido?

Weno espero alguna ayuda. Gracias dew

r2d2rigo

Tienes mal los bloques if y else. Tras estas sentencias nunca van dos puntos, sino que se utilizan las llaves para abrir y cerrar el bloque de codigo que habra tras la condicion, como por ejemplo

if ($tal=true)
{
hazesto();
}
else
{
hazlootro();
}

Abreu

$contraeña = $Row["pass"]; esta un poco mal escrito, ademas de que la ñ no debes usarla.

keco

Uiii, ya he visto que tng unos cuantos errores, y lo he cambiado, xo no me funciona del todo bien, voy a probar quitando la ñ. Thx.

keco

Lo he cambiado y ha terminado asi:


<?php
mysql_connect("localhost","X");

$user = $POST["user"];
$pass = $
POST["pass"];

$r = mysql_query("SELECT * FROM x");
$row = mysql_fetch_array($r);
$usuario = $row["user"];
$contrasena = $row["pass"];
if (($usuario == $user) && ($contrasena == $pass))
{
echo("<br><br>Bienvenido $user!<br><br>Pulsa <a href=\"?mod=menu\">aquí</a> para continuar.");
}
else
{
echo("Datos mal introducidos. Prueba de nuevo: <a href=\"?mod=admin\">Volver</a>");
}
?>

Pero me pasa uba cosa, solo me funciona con la 1ª fila de mi base de datos, alguien sabe xq?

A ver, si alguien me ayuda. Gracias dew.

IS4kO

$row = mysql_fetch_array($r);

Deberias meter un bucle para que te pille todos los registros de la tabla.

O al menos eso creo :d

keco

y como se hace eso?

wExO

a mi tambien me interesa esto --> el script para que si el que no esta logeado no le muestre nada, y si si lo está que le muestre el contenido. Solo me falta eso para terminarlo :D

sh4ck

cambia unas cuantas cosillas.
en vez de todo ese rollo que has puesto pon esto:
<?php
mysql_connect("localhost","X");
if ($pass_ok = mysql_query("SELECT * FROM x")) {
echo 'Bienvenido '.$_POST["user"].'!'.'Pulsa <a href="?mod=menu">aquí</a> para continuar.';
} else {
echo 'Datos mal introducidos. Prueba de nuevo: <a href="?mod=admin">Volver</a>';
}
?>

Te explico el If que he hecho:
si el query retorna algun dato, osea existe una fila con ese nick y esa contraseña, devolverá true, sino existe, devuelve false. Y asi fácilmente puedes mirar si existe!
Nota: Para poner varios WHERE en un query, pone WHERE tal = tal AND talotro = talotro !!!
Te habria hecho el query, pero como no lo has dicho, no sabria hacertelo bien. Si tienes algun problema, pon el query entero, y te ayudo :P!

Seria algo asi, y luego para cojer los datos del que ha iniciado sesion, usa mysql_fetch_row o bien mysql_fetch_array.
la diferencia entre las dos funciones es que una (row) hace que para llamarlo pones el nombre del campo, osea por ejemplo nick, y te dirá la valor del campo nick. Y en el array, pones el nombre del campo con un numero.

Buena suerte ;)

PD: revisa mi codigo, que puede haber un fallo tontito por ahi XD!!!

O

si solo te funciona con la 1º linea, es pq solo recorre esa. Necesitas tener un while, para k recorra todos los registros de la base de datos. Mientras siga encontrando resultados, q compruebe si el user pass es correcto.
Tb soy novato pero creo q con eso puedes solucionarlo, si me equivoco que lo digan ^^

gl

eXistencial

while ($row = mysql_fetch_array($result))
{
loquequierashacer
}

Asi te recorre todas

eXistencial

mejor este codigo

$connect = mysq_connect(...);
$select_db = mysql_select_db(...);
$result = mysql_query("SELECT pass from usuarios WHERE user = '$user'");

if ($result)
{
$contar = mysql_numrows($result); // Creo que era asi
if ($contar == "1")
{
while($row = mysql_fetch_array($result))
{
if ($row['pass'] == "$pass")
print "Bienvenido ".$user."!";
else
print "Lo sentimos el password introducido es incorrecto";
}
}
else
print "Lo sentimos el password introducido es incorrecto";
}
else
print "No se pudo realizar la consulta";

mysql_close($connect);

Asi tiene que funcionar

sh4ck

os complicais la vida con el while.

eXistencial

Umh, el while() es una de las mejores herramientas a la hora de trabajar con datos de BBDD.

El que coja el código que quiera, yo seguiré haciendolo asi, por supuesto mas complejo, pero en su base asi, nunca me ha fallado :)

sh4ck

tu hazlo si quieres... pero te digo yo que es mejor que dejes que el mysql valla haciendolo solo, tu poniendo solamente;
if ($lelo = mysql_query("SELECT * FROM nosedonde WHERE noseque = nosecuantos")) {
lelo
} else {
lala
}

Y asi automaticamente, el mysql te va mirando todos los campos, hasta que lo encuentre cuando lo hace, va a lelo, sino lo encuentra, va a lala :D!!!

Y ya se que el while, va muy bien en los sitios donde tiene que estar, pero aqui simplemente no hace falta y es complicarse la vida...

keco

Al final lo he exo con el WHERE ***** AND ****** ); y funciona de pm gracias a todos por vuestra ayuda ;).

sh4ck

jeje :P

Usuarios habituales