Php 当我在时间戳上使用“modify”时,它会给出错误的输出
我想阻止一个试图用错误密码登录4次的人 问题是:当我使用modify并将时间戳更改为15分钟时,我得到-1作为输出,两分钟后得到-2作为输出。我打了这么长时间的平手,在网上搜索了很多,但还是不起作用 我希望它如何工作: 数据库中有一列:falselog。如果访问者的用户名正确,但密码不正确,falselog将为+1。当falselog为4时,访客将被禁止15分钟。因此访问者可以尝试4次。15分钟后,访问者可以重试 这是我的对象和所有代码:Php 当我在时间戳上使用“modify”时,它会给出错误的输出,php,mysql,oop,Php,Mysql,Oop,我想阻止一个试图用错误密码登录4次的人 问题是:当我使用modify并将时间戳更改为15分钟时,我得到-1作为输出,两分钟后得到-2作为输出。我打了这么长时间的平手,在网上搜索了很多,但还是不起作用 我希望它如何工作: 数据库中有一列:falselog。如果访问者的用户名正确,但密码不正确,falselog将为+1。当falselog为4时,访客将被禁止15分钟。因此访问者可以尝试4次。15分钟后,访问者可以重试 这是我的对象和所有代码: public function logUser($use
public function logUser($username, $password) {
// query id = 2
$sql2_1 = "SELECT
id,
password,
falselog,
lastlogin
FROM users
WHERE username ='".$username."' ";
$result2_1 = $this->con->query($sql2_1);
$fetch2_1 = mysqli_fetch_array($result2_1);
$count2_1 = $result2_1->num_rows;
$now = new DateTime('now');
$blockedSince = new DateTime($fetch2_1['lastlogin']);
$fout = $fetch2_1['falselog'];
$date_old = date ("Y-m-d H:i:s", strtotime("now"));
$block = date("i", $fetch2_1['lastlogin']) + 16;
$current = date("i", strtotime("now"));
$wait = $block - $current ;
$dbtime = date ("Y-m-d H:i:s", strtotime($date_old));
// This is the code that doesn't work
if ($fetch2_1['falselog']>=4 AND $blockedSince->modify('+15 minutes') > $now) {
$error[] = 'This account has been banned, try again about '.$wait.' minutes';
$decline = true;
$date_old = $fetch2_1['lastlogin'];
}
elseif (!preg_match("/^[A-Za-z0-9-]+$/", $username)) {
$error[] = 'De input bevat ongeldige tekens (alleen cijfers en letters toegestaan)';
}
elseif ($count2_1 === 0) {
$error[] = 'Wrong login data';
}
elseif ($fetch2_1['password']!=sha1($password)) {
$error[] = 'wrong password';
$fout = $fetch2_1['falselog']+1;
}
if ((count($error) == 0) OR ($fetch2_1['falselog']==4 AND $blockedSince->modify('+15 minutes') < $now)) {
$fout = 0;
}
$sql2_2 = "UPDATE users SET
falselog='".$fout."',
lastlogin='".$dbtime."'
WHERE username='".$username."' ";
if ($this->con->query($sql2_2) === TRUE) {
if (count($error) == 0) {
return false;
}
else {
return $error;
}
}
else {
echo "Error: " . $sql2_2 . "<br>" . $this->con->error;
return true;
}
}
你应该在这里检查一下
$blockedSince = new DateTime($fetch2_1['lastlogin']);
如果您获得了DateTime的正确数据,请尝试var_dump$blockedSince;在该行之后,检查其内部是否有正确的值 试试这个
$blockedSince=mktime$fetch2_1['lastlogin'] 我正在尝试使我的网站登录安全-其中username='.$username.-sha1$password-也许你应该首先修复基本问题。你能向我解释一下吗?它工作正常,谢谢!仅此:此帐户已挂起,请在-50分钟左右重试。这是错误的输出。时间来自等待。我现在就自己来修!: