tienes razon dachux, ya lo corregi ;)
aqui pogo el codigo de la nueva version, para el que lo quiera usar y mas explicadito
Código PHP:
///////////////////////////////////////////////////////////////////////////
/// ///
/// SISTEMA DE LOGIN de usuarios ///
/// + bloqueo de cuentas ( evitando sacar pass por fuerza bruta ) ///
/// ///
/// by leven ( tambien conocido por finikini XD ) ///
/// ///
///////////////////////////////////////////////////////////////////////////
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("sql.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 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
/// 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 "Cotraseñ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 "nick no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: ../index.php"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario.
En las salidas se pueden usar header para redirigir a otra pagina, yo personalemte uso 'header' en vez de 'echo' porque uso un sistema de errores, solo tengo que enviar por $_GET[] el numero del error.
Cuando la cuenta se bloquea, se puede redirigir a un formulario, para luego enviarle un correo al usuario para que reactive la cuenta.
Aunque yo uso un sistema de verificacion por imagen, actualizando los intentos en 4 para darle un nuevo intento ( solo uno :) )
Para restringir zonas o areas de una pagina, solo basta con usar
ejemplo:
if($_SESSION['id_usuario']){ -> codigo de la zona restringida <- } else { echo "no tienes permiso"; }
Tambien puedes usar niveles de usuario, para ello tienes que crear un campo en la tabla que guarde el nivel y darle niveles a los usuarios,
luego guardar el nivel en una session por ejemplo: $_SESSION['nivel'] = $row['nivel']; y comprobarlo de esta manera:
if($_SESSION['id_usuario'] and $_SESSION['nivel'] == 'administrador'){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }
otro ejemplo:
if($_SESSION['id_usuario'] and $_SESSION['nivel'] > 2 ){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }