Bloquear usuario con php y mysql 30 días

Necesito que un usuario cuando llega a los 3 puntos sea bloqueado por unos 15 días y luego reactivada su cuenta, ¿cómo puedo lograrlo? Uso php y mysql.
1

1 respuesta

Respuesta
1
Envía la estructura de las tablas que utilizaremos para esta función y así ayudarte con un ejemplo, tal vez requieras también de un CRON JOB o una Tarea Programada según sea el sistema operativo que utilizas para que ejecute un proceso a diario y desbloquee las cuentas que ya tienen 15 días bloqueadas según entiendo, también se puede desbloquear la cuenta cuando el usuario intente loguearse solo verificas cuantos días tiene bloqueado y así no necesitaras ningún proceso alterno.
Hola, la tabla usuarios tiene los datos comunes, user, pass etc y la tabla donde debería bloquearlo se llama bloqueos, tiene id, usuario y puntos_encontra, cuando un usuario llega a 3 puntos debería darlo de baja por 15 días .
Supongo que tienes un campo estatus en la tabla de usuarios para determinar si esta activo o inactivo, en tu función donde actualizas el campo puntos_encontra deberías posteriormente ejecutar otra función que verifique cual es la cantidad que tenemos después de la actualización y si es igual a 3 entonces realizar el llamado a otra función que actualize el campo estatus de la tabla usuarios para bloquearlo, también deberías tener un campo en la misma tabla usuarios o si lo prefieres en otra para llevar una bitácora de bloqueos donde indique la fecha del ultimo bloqueo.
Para desbloquearlo lo ideal seria que en la función donde hacen el login realices una consulta para verificar primero si el usuario esta bloqueado de ser así entonces haz un llamado a una función que verifique la fecha del ultimo bloqueo en la tabla que hayas decidido almacenar ese dato y comparalo contra la fecha actual para posteriormente actualizar el campo estatus si ya han pasado 15 días.
Una sugerencia es que tus preguntas sean más especificas para poder ayudarte si necesitas algo de código fuente, estamos en contacto.
Ok
Claro, eso es lo que tengo, lo que pensé pero no tengo idea en forma de código como hacerlo, como le digo de acá a 15 días actívalo, saludos
Me gustaría saber que es lo que ya esta desarrollado, es decir si ya tienes la ventana de login, si puedes compartir algo de lo que ya tienes funcionando seria ideal para darme una idea de tu experiencia para haci mostrarte código que puedas entender y no aventarte con un proyecto que resulte muy complejo.
Hola, si te paso el código del ingreso, los tags vacíos de php es porque saque el código html para que sea más fácil interpretar, no es que están vacíos, ahí van las validaciones, por ej su contraseña no coincide
<?
session_start();
$usuario = $_POST['usuario'];
$password = $_POST['password'];
include('conexion.php');
if($HTTP_POST_VARS){
if($usuario=="" or $password==""){
?>
<?
}else{
$ingreso = mysql_query("SELECT usuario,password FROM usuarios WHERE usuario = '$usuario' and password= '$password'") or die("No se pudo ingresar a la base de datos");
$arreglo = mysql_fetch_array($ingreso);
if($arreglo['password'] != $password and $arreglo['email'] != $usuario) {
?>
<?
}else{
$lla=mysql_query("SELECT llamada_atencion FROM llamadas WHERE usuario='$_SESSION[usuario]'");
$vall = mysql_fetch_array($lla);
if ($vall[llamada_atencion] >= 3 ){
?>
<?
}else{
//guardo la bandera
session_register("logueado");
$logueado = "SI";
$_SESSION['usuario'] = $usuario;
echo"entro";
?>
<?
}
}   
}
}
?>
Bien mi chavo esto es lo que creo que debería funcionar, analízalo y haz los cambios que requieras si tienes dudas aquí estaré pendientes, saludos:
<?php
    session_start();
    $usuario = $_POST['usuario'];
    $password = $_POST['password'];
    include 'conexion.php';
    if($HTTP_POST_VARS){
        if($usuario=="" or $password==""){
        }else{
            $ingreso = mysql_query("SELECT usuario, password, estatus, ultimo_bloqueo FROM usuarios WHERE usuario = '$usuario' and password= '$password'") or die("No se pudo ingresar a la base de datos");
            $arreglo = mysql_fetch_array($ingreso);
            /////Aqui se realiza el desbloqueo o se deja tal cual de la siguiente manera/////
            if($arreglo['estatus'] == 0){ //Significa que esta bloqueado hay que verificar desde cuando
                $fechaActual = date("d/m/Y");
                $ultimoBloqueo = $arreglo['ultimo_bloqueo'];
                $ultimoBloqueo = substr($ultimoBloqueo,8,2).'/'.substr($ultimoBloqueo,5,2).'/'.substr($ultimoBloqueo,0,4);
                if(compararFechas($fechaActual, $ultimoBloqueo) > 30){
                    $desbloquear = mysql_query("UPDATE usuarios SET estatus = 1 WHERE usuario = '$usuario'");
                    $atenciones = mysql_query("UPDATE llamadas SET llamada_atencion = 0 WHERE usuario = '$usuario'");
                }else{
                    echo 'Su cuenta ha sido bloqueada.';
                    exit();
                }
            }
        }
        if($arreglo['password'] != $password and $arreglo['email'] != $usuario){
        }else{
            $lla = mysql_query("SELECT llamada_atencion FROM llamadas WHERE usuario='$_SESSION[usuario]'");
            $vall = mysql_fetch_array($lla);
        }
        if ($vall[llamada_atencion] >= 3 ){
            /////Aqui se realiza el bloqueo de la siguiente manera/////
            $bloquear = mysql_query("UPDATE usuarios SET estatus = 0 WHERE usuario = '$usuario', ultimo_bloqueo = LOCALTIME()");
        }else{
            session_register("logueado");
            $logueado = "SI";
            $_SESSION['usuario'] = $usuario;
            echo"entro";
        }
    }
    function compararFechas($fechaActual, $ultimoBloqueo)
    {
        $valoresPrimera = explode ("/", $fechaActual);
        $valoresSegunda = explode ("/", $ultimoBloqueo);
        $diaPrimera    = $valoresPrimera[0];
        $mesPrimera  = $valoresPrimera[1];
        $anyoPrimera   = $valoresPrimera[2];
        $diaSegunda   = $valoresSegunda[0];
        $mesSegunda = $valoresSegunda[1];
        $anyoSegunda  = $valoresSegunda[2];
        $diasPrimeraJuliano = gregoriantojd($mesPrimera, $diaPrimera, $anyoPrimera);
        $diasSegundaJuliano = gregoriantojd($mesSegunda, $diaSegunda, $anyoSegunda);
        if(!checkdate($mesPrimera, $diaPrimera, $anyoPrimera)){
            return 0;
        }elseif(!checkdate($mesSegunda, $diaSegunda, $anyoSegunda)){
            return 0;
        }else{
            return  $diasPrimeraJuliano - $diasSegundaJuliano;
        }
    }
?>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas