bueno, lo hice asi...
esta es la estructura basica de mi BD.. no lo pongo todo para guardarme ciertos datos
Código SQL:
Ver originalCREATE TABLE `usuarios` (
`idcliente` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`email` VARCHAR( 100 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
`verificacion` VARCHAR( 10 ) NOT NULL ,
`ultimavisita` TIMESTAMP NOT NULL ,
`ultimointento` TIMESTAMP NOT NULL ,
`intentos` INT NOT NULL
) ENGINE = MYISAM ;
aqui el procesador PHP que recibe la clave y contraseña:
Código PHP:
<?php
//esto lo copie de algun post del foro
session_start(); // Se destruye cualquier
session_unset(); // session anterior antes de
session_destroy(); // comenzar con el scrip. Esto es opcional
include("../conn/conect.php");
//ahora si el codigo
if($_POST){
$email = $_POST["username"];
$clave = $_POST["password"];
//$fecha= date("d-m-y H:i");
//echo getdate();
unset($_POST); //Se destruye el array $_POST
if(preg_match("/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/", $email)){
$sql_login="SELECT * FROM usuarios WHERE email LIKE '".$email."'";
$resultado_login=pg_query($sql_login)or die("Error query ".pg_last_error());
if(pg_num_rows($resultado_login) == 1){
$fila_usuario=pg_fetch_array($resultado_login, null, PGSQL_ASSOC);
//obtener fecha actual para compararlo con el ultimo intento
$fecha = getdate();
$today=($fecha["year"]."-".$fecha["mon"]."-".$fecha["mday"]." ".$fecha["hours"].":".$fecha["minutes"].":".$fecha["seconds"]);
//genero una resta de la fecha actual contra el ultimo intento guardado en la BD
$datetime1 = new DateTime($today);
$datetime2 = new DateTime($fila_usuario['ultimointento']);
$intervalo = $datetime1->diff($datetime2);
if($fila_usuario['intentos'] < 5){
if($fila_usuario['pass']== $clave){
//validamos si la cuenta ya esta verificada
if($fila_usuario["verificacion"]=="si")
{
session_start();
$_SESSION["k_username"] = $fila_usuario["nombres"].", ".$fila_usuario["apellidos"];
$_SESSION["k_idcliente"] = $fila_usuario["idcliente"];
pg_query($conn2, "UPDATE usuarios SET ultimavisita='NOW()', intentos='0' WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
header("Location: ../clients/principal-clients.php");
}//caso contrario, tiramos un mensaje de que aun no ha sido verificada la cuenta
else
{
echo "<h1>Su cuenta aun no ha sido verificada.</h1>";
echo "<p>Si ya se ha registrado desde nuestro sitio Web:</p>";
echo "<ul>
<li>Por favor, revise su correo electrónico.</li>
<li>Siga las instrucciones que le hemos enviado.</li>
<li>Inicie Sesión.</li>
</ul>";
echo "<p>Caso contrario, puede <a href='registro.php'>registrarse</a> para acceder a los servicios</p>";
}
}else{
pg_query($conn2, "UPDATE usuarios SET ultimointento='NOW()', intentos=intentos+1 WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
echo "<p style='font-size:14px; color:#FF0000;'>El password no es valido!!</p>";
$cn = pg_query("SELECT * FROM usuarios WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
$rs= pg_fetch_array($cn);
echo "<p>Recuerde que sólo posee <strong>5 intentos</strong> para ingresar a su cuenta correctamente.</p>";
echo "<p>Este es su intento N°: <span style='font-size:15px;'>".$rs['intentos']."</span></p>";
}//fin verificacion de correcto logueo a traves del password
}else{
//primero comparamos si y han pasado mas de 24hs desde el ultimo intento fallido
if($intervalo->format('%a')>1){
pg_query($conn2, "UPDATE usuarios SET intentos='1' WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
echo "<h2>Hemos desbloqueado su cuenta nuevamente</h2>";
echo "<p>Han pasado 24hs. del bloqueo de su cuenta. Por favor, ingrese nuevamente el usuario y clave de ingresos</p>";
}else{
//caso contrario le decimos que la cuenta aun esta bloqueada
header("Location: ../pages/cuenta-bloqueada.php");
}
}//fin verificacion de numero de intentos
}else{
echo "<p>La direccion de email ingresada no esta registrada</p>";
}
}else{
echo "<p>Ingrese una direccion de email valida</p>";
}
}else{
header("Location: ../index.php");
}
?>
Bueno, yo uso postgres en vez de MySql.. pero es similar... en las funciones predeterminadas de php en vez de pg se utiliza el mysql.. o sea en
pg_query o
pg_fetch_array se lo cambian nomas a
mysql_query o
mysql_fetch_array... ya lo van a ir pillando.. seguro tiene alguno que otro defectito, pero si lo quieren mejorar bienvenido sea
espero les sirva