我想要做的是讓用戶每24小時訪問一次應用程序。 註銷後,他們必須再等24小時才能登錄。 但我注意到的是,如果它已經超過了一小時的工作時間。 但是,如果它已經少於一個小時,它仍然給他們訪問,我不想發生。 我能做些什麼來解決這個問題?允許用戶每24小時登錄一次
$dsn = 'mysql:dbname=DBNAME;host=127.0.01';
$user = 'USER';
$password = 'PASSWORD';
try {
$dbh = new PDO($dsn, $user, $password); }
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
function currentMysqlTime($dbh) {
$sql = $dbh->prepare("SELECT CURRENT_TIMESTAMP()");
$sql->execute();
$x = $sql->fetchAll();
return $x[0][0];
}
function lastLoginTime($dbh, $id) {
$sql = $dbh->prepare("SELECT * FROM userpoints WHERE uid = ? AND pid = 2 ORDER BY timestamp desc LIMIT 1");
$sql->execute(array($id));
$y = $sql->fetchAll();
return $y[0][3];
}
function mysqlTimeDiff($dbh, $x, $y) {
$sql = $dbh->prepare("SELECT TIMEDIFF(?, ?)");
$sql->execute(array($x, $y));
$z = $sql->fetchAll();
return $z[0][0];
}
function daysSinceLastLogin($x) {
$parts = explode(':',$x);
return $parts[0];
}
$currentMysqlTime = currentMysqlTime($dbh);
$lastLoginTime = lastLoginTime($dbh, $id);
$timeDiff = mysqlTimeDiff($dbh, $currentMysqlTime, $lastLoginTime);
$daysSinceLastLogin = daysSinceLastLogin($timeDiff);
if($daysSinceLastLogin < 0) {
//NO ACCESS AS THE USER HAS ALREADY LOGGED IN
} else {
//GRANT ACCESS AS IT IS THERE FIRST TIME LOGGING IN TO THE APPLICATION
}
這是功能
報名時輸出2011-09-16 7時10分04秒
當前Mysql的時間2011-09-17 5時41分22秒
最後登錄時間2011-09-14 5時00分07秒
時差72:41:15
的時間差3
您是否嘗試過調試此代碼?例如,你是否證實'mysqlTimeDiff'和'daysSinceLastLogin'給出了正確的結果? –
就像@Oli說的那樣,這需要先進行適當的調試。當你知道*問題出在哪裏時,再來詢問* * –
是的mysqlTimeDiff使用了一個mysql函數來比較兩個日期的時間差異並以HH:MM:SS返回它們, 自登錄以來的天數採取這種格式並爆炸字符串,以便我可以將小時數除以24以查看自上次登錄時間以來的多少天。 – Aaron