Foros del Web » Programando para Internet » PHP »

Problema con Mysql y usuarios

Estas en el tema de Problema con Mysql y usuarios en el foro de PHP en Foros del Web. saludos, tengo un codigo para un sistema de logeo (bastante sencillo) para usuarios, pero tengo cierto error: este es el codigo: Código PHP: $username = ...
  #1 (permalink)  
Antiguo 12/11/2003, 15:15
 
Fecha de Ingreso: noviembre-2002
Ubicación: http://localhost/
Mensajes: 195
Antigüedad: 22 años
Puntos: 1
Problema con Mysql y usuarios

saludos, tengo un codigo para un sistema de logeo (bastante sencillo) para usuarios, pero tengo cierto error:

este es el codigo:

Código PHP:
$username=$HTTP_POST_VARS["username"];
$password=$HTTP_POST_VARS["password"];

If (!(
$link=mysql_connect("localhost","$db_user","$db_pass"))) {
echo 
"Error conectando a la base de datos";
exit();
}

If (!(
$select=mysql_select_db("$db",$link))) {
echo 
"Error seleccionando la base de datos";
}

$result=Mysql_query("SELECT * FROM usuarios");
while(
$row=mysql_fetch_array($result)) {
$user=$row['nombre'];
$pass=$row['pass'];
$cat=$row['cat'];

If (
$username==$user AND $password==$pass) {

  if (
$cat=="1") {
  
header ("location: rockat.php?user=$username");
  } elseif (
$cat=="2") {
  
header ("location: rockat8.php?user=$username");
  } elseif (
$cat=="3") {
  
header ("location: rockatx5.php?user=$username");
  } elseif (
$cat=="4"){
  
header ("location: rockatxx2.php?user=$username");
  } elseif (
$cat=="5") {
  
header ("location: rockatxx9.php?user=$username");
  }

}
elseif(
$username==$user AND $password!=$pass) {
header ("location: login.php?error=1");
}elseif(
$username!=$user AND $password==$pass) {
header ("location: login.php?error=2");
}elseif(
$username!=$user AND $password!=$pass) {
header ("location: login.php?error=3");
}

El problema es el siguiente, cuando alguien se logea, aunque ponga su pass y su user bien se va a la pag "login.php?error=3"

pero si quito la parte del codigo que se encarga de redireccionarlo para esa pag, el codigo funciona bien :S por que hace esto??

O sea, si le quito esta parte:

elseif($username==$user AND $password!=$pass) {
header ("location: login.php?error=1");
}elseif($username!=$user AND $password==$pass) {
header ("location: login.php?error=2");
}elseif($username!=$user AND $password!=$pass) {
header ("location: login.php?error=3");

funciona bien, pero si la dejo, siempre se va para login.php?error=3, no se por que hace eso :S algun consejo??

y otra cosa, alguna idea sobre como hacer que funcione con sessiones (para evitar conflictos jeje) por que lo heintentado y como lo a veces me tira un error y aveces funciona sin los usuarios poner ningun user ni ningun pass :S

algun consejo??

  #2 (permalink)  
Antiguo 12/11/2003, 16:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

El uso correcto del header("Location") es:
Código PHP:
header("Location: la url");
exit;  
//ponerlo siempre 
Es porque el header("Location") NO PARA la ejecucion del script. Simplemente manda la cabecera y sigue con la siguiente linea de codigo.

¿Que es lo que pasaba con tu codigo? Pues que continuaba con el bucle, llegaba al ultimo registro de la tabla, y no coincide el user y pass y te redigia a error=3.

De todas formas, creo que tu logica esta mal. Porque recorres todos los registros, y para cada uno redireccionas tanto si esta bien como si esta mal. Asi que solo comprueba el primero.

Ademas, la forma tipica de haer esa comprobacion es dentro de la SQL, con el WHERE:
Código PHP:
$result=Mysql_query("SELECT * FROM usuarios WHERE nombre='$username' AND pass='$password'"); 
Y luego usar mysql_num_rows() (www.php.net/mysql_num_rows) para ver si ha devuelto un registro (si existe el usuario) o 0 (no existe el par username/password). Claro, con este sistema no puedes saber si no existe el userame, o no existe el password. Aunque podrias hacer en caso de que mysql_num_rows() devuelva 0, otras consultas para saber si existe el username y el password.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 12/11/2003, 16:51
 
Fecha de Ingreso: noviembre-2002
Ubicación: http://localhost/
Mensajes: 195
Antigüedad: 22 años
Puntos: 1
Pues gracias josemi, no sabia lo del exit; del header, ya habia intentado hacer la consulta con "where" pero como queria hacerlo para comprobar si es pass o si es user por eso la quite..


pero gracias por todo :D lo voy a probar !!!
gracias!!
__________________
http://www.ingenierosinc.com
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:51.