私がやっていることは、ユーザーが24時間に1回アプリケーションにアクセスできるようにすることです。 ログアウトすると、ログインするまでにさらに24時間待たなければなりません。 しかし、私が気づいているのは、それが1時間以上経過していれば動作するということです。 しかし、時間が1時間未満であれば、それでも私は起こりたくないアクセスを提供しています。 このコードを修正するにはどうすればよいですか?ユーザーが24時間に1回ログインできるようにする
$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年9月17日午前5時41分22秒
最終ログインの
時間です時間ご利用については2011年9月14日5時00分07秒
時差72:41:15
日違い3
このコードをデバッグしようとしましたか?たとえば、 'mysqlTimeDiff'と' daysSinceLastLogin'が正しい結果を出していることを確認しましたか? –
@Oliと同様に、これは最初に適切なデバッグを要求します。 *正確に問題がどこにあるか知っていれば、もう一度やり直してください* –
はいmysqlTimeDiffは、2つの日付の時差を比較し、HH:MM:SS、 ログイン日からの経過時間を比較するmysql関数を使用していますそのフォーマットを採用し、文字列を爆発させるので、最後のログイン時刻から何日を表示するかを24で分けることができます。 – Aaron