Ve si te sirve este, saludos
Código PHP:
<?
session_start(); // Se destruye cualquier
session_unset(); // session anterior antes de
session_destroy(); // comenzar con el scrip. Esto es opcional
if($_POST){ /// Se comrpueba si $_POST tiene algun valor
/// Valores enviados por POST ///////////////////////////////////////
$nick = $_POST['nick']; // pasamos $_POST['nick'] a $nick
$pass = md5($_POST['pass']); // pasamos $_POST['pass'] a $pass codificado en MD5 que es como estan guardadas la pass en la BD.
/////////////////////////////////////////////////////////////////////
unset($_POST); /// Se destruye el array $_POST que ya no lo necesitamos
/////////////////////////////////////////////////////////////////////
if(eregi("^[-_A-Z0-9]{3,20}$",$nick)){ // Se comprueba si el nick es valido. ( Valido: entre 3 y 20 caracteres que sean '-', '_', de la 'A' a la 'Z' y 0 al 9 )
/// SQL ////////////////////////////////////////////////////////////////////
include("conexion.php"); // Conexion a la BD.
/// Buscamos el registro en la BD que conincida con $nick. Solo buscamos un registro, por eso LIMIT 1
$resp = mysql_query("SELECT id_usuario,nick,pass,intentos,nivel,direccion,mail,celular,telefono,fax FROM usuarios WHERE nick='$nick' LIMIT 1",$conexion);
////////////////////////////////////////////////////////////////////////////
if(mysql_num_rows($resp) == 1){ /// Se comprueba si dio un resultado
/// Si da un resultado es que existe tal usuario ...
$row = mysql_fetch_assoc($resp); /// ... guardamos los valores del registro en la variable $row
if($row['intentos'] < 5){ /// Ahora comprobamos si tiene menos de 5 intentos fallidos de conexion.
/// En el caso de tener menos de 5 intentos, se comprueba si la contraseña es correcta
if($pass == $row['pass']){
/// Si la contraseña es correcta ...
session_start(); /// Se inicia la session
$_SESSION['id_usuario'] = $row['id_usuario']; /// Variable de session que contiene la ID del usuario, ideal para autorizar a zonas restringidas
$_SESSION['usuario'] = $row['nick']; /// Variable de session que contiene el nombre del usuario
$_SESSION['usuario_nivel'] = $row['nivel'];
/// Ahora actualizamos el registro del usuario, con la fecha de la ultima conexion y la ultima ip,
/// ademas sumamos en +1 las conexiones que lleva el usuario en total desde su resgitro y ponemos los intentos fallidos a 0
$fecha = time(); // fecha en formato timestamp.
$ip = "xxx.xxx.xxx.xxx"; /// Ip del usuario, esto en si no vale de nada es un hueco para poner
/// una funcion que obtenga la ip mas adelante cuando haga la funcion, pero mientras tengo que usar un IP
/// SQL ///////////////////////////////////////////////////////////
mysql_query("UPDATE usuarios SET uconexion_fecha='$fecha', uconexion_ip='$ip' , conexiones=conexiones+1, intentos=0 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
///////////////////////////////////////////////////////////////////
header("Location: /index.php"); /// una vez logueado redirigimos al usuario al index de la pagina o a su panel de control.
} else {
/// Si la contraseña es incorrecta le sumamamos a los intentos +1
/// SQL ///////////////////////////////////////////////////////////
mysql_query("UPDATE usuarios SET intentos=intentos+1 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
///////////////////////////////////////////////////////////////////
echo "Contraseña incorrecta.";
}
} else { echo "Cuenta bloqueada ..."; } /// Salida para cuando supere los intentos de conexion fallidos
} else { echo "No existe tal usuario."; } /// Salida para cuendo no encuentre ningun usuario en la bd con el $nick enviado
} else { echo "Usuario no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: /principal.html"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario.
?>