Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在执行另一个SQL查询x分钟后执行SQL查询?_Php_Database_Mysqli - Fatal编程技术网

Php 如何在执行另一个SQL查询x分钟后执行SQL查询?

Php 如何在执行另一个SQL查询x分钟后执行SQL查询?,php,database,mysqli,Php,Database,Mysqli,在输入数据5分钟后,如何使我放入数据库的信息自我更新 假设我有一张桌子: +--+--+-----+ |id|ip|count| +--+--+-----+ | 1|..|3 | +--+--+-----+ 当计数大于1时,我希望等待5分钟,然后将其更改回1 我想这样做,因为我想设置一个'超时'时,用户输入密码错误3次或以上 因此,我为用户输入错误密码编写了以下代码: $currentIP = $_SERVER['REMOTE_ADDR']; $ipchec

在输入数据5分钟后,如何使我放入数据库的信息自我更新

假设我有一张桌子:

   +--+--+-----+
   |id|ip|count|
   +--+--+-----+
   | 1|..|3    |
   +--+--+-----+
当计数大于1时,我希望等待5分钟,然后将其更改回1

我想这样做,因为我想设置一个'超时'时,用户输入密码错误3次或以上

因此,我为用户输入错误密码编写了以下代码:

$currentIP = $_SERVER['REMOTE_ADDR'];
$ipcheck = mysqli_query($con,"SELECT *
FROM ipcheck");
while($row = mysqli_fetch_array($ipcheck))
{
    if($currentIP == $row['ip']){
        if($row['count'] > 2){
            //attempted to log in too many times!
            header("Location: secure?err=2");
            exit;
        }else{
            $IPUsed = "YES";
        }
    }
}
if($IPUsed == "YES"){
    //They have failed to log in AGAIN!
    $updateIP = mysqli_query($con,"UPDATE ipcheck 
    SET count = count + 1
    WHERE ip = '".$currentIP."'");
}else{
    //first failed login attempt
    $insertNewIp = mysqli_query($con,"INSERT INTO ipcheck (ip)
    VALUES ('".$currentIP."')");
}

这就形成了上面的表格,但是什么是解决我的问题的最好方法呢?是通过使用cron吗?或者是MySQL预定的活动

不要使用1或0表示阻塞,而是使用时间戳。当用户尝试登录时,检查当前时间并将其与数据库中的时间戳进行比较,而不是手动重置计数。在表中添加一个时间戳列,指示上次尝试的时间

检测到无效尝试时,将当前时间与记录的时间进行比较:

  • 如果超过5分钟,则重置计数。
  • 如果小于5分钟,则在低于阈值时增加计数;如果超过阈值,则阻止尝试。