Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/07/2006, 11:06
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por guiweb
bueno la verdad es que no te deberia dar la tarea hecha, pero es molesto no saber como hacer las cosas, asi que aqui va, te doy un codigo que te permite validar en MySQL si el usuario existe, tambien si ha introducido incorrectamente su constraseña 3 veces se bloquea el usuario en la base de datos, y ademas trabaja con sesiones.
bueno espero que te sirva

Código PHP:
<?
#Conectamos con MySQL
                        
$conexion mysql_connect("localhost","root","")
                        or die (
"Fallo en el establecimiento de la conexión");

                        
#Seleccionamos la base de datos a utilizar
                        
mysql_select_db("mi_DB")
                        or die(
"Error en la selección de la base de datos");
                        
                        
$nom_get $_POST["user"];
               
$pass_get $_POST["oculto"];

                        if(
$nom_get == ""){
                        
header("Location: principal.php?errorusuario=si");
                        }

                        else{
                        
$resulta mysql_query("select * from login");
                        while(
$rowd mysql_fetch_array($resulta))
                         {
                          
$id_usuarioa $rowa["id_usu"];
                          
$usera $rowa["nombre"];
                          if(
$user != nom_get )
                          {
                           
header("Location: principal.php?errorusuario=si");
                          }
                          }
                        }

      
/*******valido si la contraseña es incorrecta para un usuario valido y sumo 1 intento y bloqueo si tiene 3 intentos******/
                        
$result3 mysql_query("select * from login where nombre='$nom_get'" );
                        while(
$rowb mysql_fetch_array($result3))
                         {
                          
$id_usuariob $rowb["id_usu"];
                          
$user $rowb["nombre"];
                          
$pass $rowb["contra"];
                          
                          if(
$id_usuariob ==""){
                          
header("Location: principal.php?errorusuario=si");
                          }
                          else
                          {
                          if(
$pass != $pass_get){
                          
//si la contraseña es incorrecta para user, se incrementa el intento
                          
$sql mysql_query("update login set intentos = intentos + 1 where id_usu = '$id_usuariob'");
                          
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           while(
$rowx mysql_fetch_array($sql2)){
                           
$intentox $rowx["intentos"];
                           
//si esta escribiendo un user valido y una pass incorrecta, valida los intentos y si tiene mas de
                           //3, bloquea la cuenta, si tiene menos, arroja un error de usuario
                          
if($intentox >=3){header("Location:bloqueado.htm");}
                          if(
$intentox 3){header("Location: principal.php?errorusuario=si");}
                          }
                           }
                          if(
$pass == $pass_get){
                           
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           
                           while(
$rowc mysql_fetch_array($sql2)){
                           
$intento $rowc["intentos"];
                           }
                           if(
$intento >=3){header("Location:bloqueado.htm");}
                           if(
$intento <3){
                           
// si antes de los 3 intentos el usuario esta correcto, reseteo los intentos a 0
                           
$sql mysql_query("update login set intentos = 0 where id_usu = '$id_usuariob'");
                           
session_start();
           
session_register('usuario');
                           
$usuario $id_usuariob;

                           
header ("Location: principal.php?usuariovalido=si");
                           }
                          }
                          }
                         }
                        
/*************FIN VALIDACION Contraseña incorrecta, user correcto***********/
                        
mysql_close($conexion);

                       
?>
La Password viene encriptada en MD5, por eso la paso por un campo oculto, pero eso te toca a ti, haciendo crujir las neuronas las cosas salen mejor
ojala que te sirva, Saludos
Tel faltó para completar .. la estructura de las tablas de tu BBDD implicadas.

podrías simplificar algo el código sin tanto uso de "else" en los "if()" asumiendo que cuando tu redireccionas (con header() de tipo Location) la ejecución del script continua .. pero el "objetivo" no es ese sino que se termine la ejecución del script en ese punto pues a continuación le das la orden al "navegador" que cambie el URL por el que le indicas (vía cabecera HTTP), por ende .. podrías hacer cosas como:

Código PHP:
if($nom_get == ""){ 
                        
header("Location: principal.php?errorusuario=si"); 
                         exit;
                        } 
Y me ahorro el "else" y sus } cierre y demás control del mismo .. En general despues de cada "header() de tipo Location" .. hacer un "exit" para terminar la ejecución del script en ese punto y no esperar otro "if()" o else que valide lo contrario de lo que el primer IF dijo ...

Otro detalle .. podrías usar empty() en lugar de validaciones tipo $variable == '' .. Empty() valida la existencia de la variable y su valor (distinto de NULL o cadena vacia ..o 0)

Otro detalle más .. El uso de sesiones que haces NO ES RECOMENDABLE .. no deberías usar session_register() sino los arrays superglobales $_SESSION .. Tendrás problema con ese código en servidores con register_Globals a OFF (como desde hace un montón de versiones atras PHP viene por defecto así ..) además que NO es seguro el uso de sesiones vía session_register() y asumiento las variables como globales.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.