我插入日期(最后一次尝试),尝试使用计数器和ip进入mysql数据库,以便在我的登录页面中控制登录尝试,如下所示:
| id | ip | date | attempts |
| 1 | 192.168.1.2 | 1412932824 | 5 |
现在在登录页面中,如果用户尝试= 5,我需要删除表单30分钟。
mycode的:
$checkip = Access::FETCH("SELECT * FROM " . LOGIN_ATTEMPTS . "
WHERE
ip = ? AND panel = ? ", _IS_GET_IP_ADDRESS_() , '1');
if (count($checkip > 0))
{
$time = new DateTime();
$time->setTimestamp($checkip[0]['date']);
$time->modify('+30 minutes');
$timeattempts = $time->format('U');
if ($checkip[0]['attempts'] <= 5 && $timeattempts < time())
{
// FORM SHOW
}
else
{
// SHOW ONLY ERROR
}
}
但是这段代码对我和$timestamp > time().
如何修复我的代码以防止登录尝试?
注意:在行动中我更新日期(最后一次尝试)并尝试每次登录尝试。
答案 0 :(得分:2)
您只能在查询中执行此操作:
$timestamp = strtotime("-30 minutes");
$checkip = Access::FETCH("SELECT * FROM " . LOGIN_ATTEMPTS . "
WHERE
ip = ? AND panel = ? AND attempts >= ? AND date <= ? ",
_IS_GET_IP_ADDRESS_() , '1', 5, $timestamp);
if (empty($checkip))
{
// FORM SHOW
}
else
{
// SHOW ONLY ERROR
}
基本上,您搜索5个或更多的尝试,时间戳不超过30分钟。 如果找到了,那么您不想显示登录表单。