Foros del Web » Programando para Internet » PHP »

POrque si hago esto ...

Estas en el tema de POrque si hago esto ... en el foro de PHP en Foros del Web. Porque si hago esto para autentificar usuarios existentes en la BD solo me coje siempre la primera fila en vez de recorrer toda la tabla ...
  #1 (permalink)  
Antiguo 11/01/2004, 09:36
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
POrque si hago esto ...

Porque si hago esto para autentificar usuarios existentes en la BD solo me coje siempre la primera fila en vez de recorrer toda la tabla en busca de ese usuario en caso de que sea el segundo o el tercero.
Código PHP:
 <?php
 
require("../includes/config.inc.php");
 
conectadbsql();
 
$query mysql_query("SELECT login,passwdencriptado FROM administrador");
 
$resultado mysql_fetch_array($query);
 
$pass md5($passwduser);
 if ((isset(
$loginuser)) && ($loginuser == $resultado['login'])){
     if ((isset(
$passwduser)) && ($pass == $resultado['passwdencriptado'])){
     
session_start();
     
$_SESSION['adminlogin'] = md5($loginuser);
     
$_SESSION['adminpasswd'] = md5($passwduser);
     
$session session_id();
     
$_SESSION['admintype'] = $session;
     echo 
"<html>
             <head>
             <title>:: Entrando al Sistema de Administración ::</title>
                         <meta http-equiv='Refresh' Content='3 ;url=../admin/indexadmin.php?sid=$session'>
            </head>
             <script language='JavaScript' src='../includes/tinogrm.js'></script>
             <link href='../includes/tinogrm.css' rel=stylesheet type=text/css>
             <body  bgcolor=#becfdf><div align=center><span class=loginadmin>Entrando al Sistema de Administración ...<br>Por favor espere unos segundos.</span></div></body>
          </html>
   "
;
   }else{

           echo 
"<html>
           <head>
             <title>:: Error en datos de usuario ::</title>
                         <meta http-equiv='Refresh' Content='2 ;url=../index.php?modulo=administracion'>
           </head>
             <script language='JavaScript' src='../includes/tinogrm.js'></script>
             <link href='../includes/tinogrm.css' rel=stylesheet type=text/css>
             <body  bgcolor=#becfdf><div align=center><span class=loginadmin>No estas autorizado a acceder a esta página<br>Por favor espere unos segundos y será redireccionado al principio del Sitio.</span></div></body>
       </html>
   "
;
   }
  }
?>
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 11/01/2004, 10:19
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Suced eso porque utilizas solo una vez mysql_fetch_array(), por lo que solo te devolvera el resultado de la primera fila. Si lo llamas otra ves te devolvera la segunda, luego la tercera y asi sucesivamente hasta el final. Proceso que se realiza cuando utilizas el bucle while().

Te digo esto para despejarte de dudas, porque a la autentificacion la haces incorrectamente, o mejor dicho de una manera poco practica.
Lo que estas haciendo on ese select es devolver toda la lista de usuarios, y luego realizas la comparacion con PHP.
Lo mejor ( y mas optimo ) seria realizar esa validacion directamente con MySQL

Código PHP:
$query mysql_query("SELECT * FROM administrador WHERE login='$loginuser' AND passwdencriptado=MD5('$passwduser')");
if ( 
mysql_num_rows($query) > ) {
    
// se valido el usuario
} else {
    
// NO se valido el usuario

Saludos
  #3 (permalink)  
Antiguo 11/01/2004, 10:33
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Gracias por la aclaraciónm

Gracias por aclararme pues como tu dices solo comprobaba los datos en la primera fila. Lo he resuelto de esta forma aunque no se si sea la más óptima:
Código PHP:
 <?php
 
require("../includes/config.inc.php");
 
conectadbsql();
 
$query mysql_query("SELECT login,passwdencriptado FROM administrador");
 while (
$resultado mysql_fetch_array($query)){
 
$pass md5($passwduser);
 if ((isset(
$loginuser)) && ($loginuser == $resultado['login'])){
     if ((isset(
$passwduser)) && ($pass == $resultado['passwdencriptado'])){
     
session_start();
     
$_SESSION['adminlogin'] = md5($loginuser);
     
$_SESSION['adminpasswd'] = md5($passwduser);
     
$session session_id();
     
$_SESSION['admintype'] = $session;
     echo 
"<html>
             <head>
             <title>:: Entrando al Sistema de Administración ::</title>
                         <meta http-equiv='Refresh' Content='3 ;url=../admin/indexadmin.php?sid=$session'>
            </head>
             <script language='JavaScript' src='../includes/tinogrm.js'></script>
             <link href='../includes/tinogrm.css' rel=stylesheet type=text/css>
             <body  bgcolor=#becfdf><div align=center><span class=loginadmin>Entrando al Sistema de Administración ...<br>Por favor espere unos segundos.</span></div></body>
          </html>
   "
;
   }else{

           echo 
"<html>
           <head>
             <title>:: Error en datos de usuario ::</title>
                         <meta http-equiv='Refresh' Content='2 ;url=../index.php?modulo=administracion'>
           </head>
             <script language='JavaScript' src='../includes/tinogrm.js'></script>
             <link href='../includes/tinogrm.css' rel=stylesheet type=text/css>
             <body  bgcolor=#becfdf><div align=center><span class=loginadmin>No estas autorizado a acceder a esta página<br>Por favor espere unos segundos y será redireccionado al principio del Sitio.</span></div></body>
       </html>
   "
;
   }
  }
 }
?>
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 11/01/2004 a las 10:48
  #4 (permalink)  
Antiguo 11/01/2004, 10:50
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Claro que si!
Pero ya lo hice jejeje.

Con el query que te puse, se hace una cunsulta donde te devolvera todas las entadas que coincidan con la condicion WHERE login='$loginuser' AND passwdencriptado=MD5('$passwduser')
Entonces si el usuario y el password son correctos, mysql devolvera al menos una fila.
Y con mysql_num_rows se verifica que esto suceda: si se devuelva mas de 0 entonces quere decir que los datos son correctos.

Perdon si no me di a entender.

Saluditos!
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 14:46.