出于某种原因,当用户注册时,不是以0 Wood,0 Stone,0 Gold开头,而是以时间戳作为他们的Wood,Stone和Gold(数字如1375674873)开始。我的错误在哪里?
$timeNow = time();
$timeExpire = $timeNow - 2;
$User = $con->query("SELECT * FROM players WHERE Username='".$_SESSION['Username']."'");
$UserInfo = $User->fetch_object();
$con->query("UPDATE players SET Time='$timeNow' WHERE Username='". $_SESSION['Username']."'");
$con->query("UPDATE players SET TimeExpire='$timeExpire' WHERE Username='". $_SESSION['Username']."'");
if(time() >= $UserInfo->TimeExpire) {
$getAmount = time() - $UserInfo->TimeExpire;
echo $getAmount;
$con->query("UPDATE players SET Wood=Wood+$getAmount WHERE Username='". $_SESSION['Username']."'");
$con->query("UPDATE players SET Stone=Stone+$getAmount WHERE Username='". $_SESSION['Username']."'");
$con->query("UPDATE players SET Gold=Gold+$getAmount WHERE Username='". $_SESSION['Username']."'");
}
使用 $ getAmount 我正在计算有多少次到期。因此,即使用户注销,当他们在2小时后重新登录时,他们仍然可以获得这段时间的钱。
答案 0 :(得分:0)
如果你去一个javascript控制台并运行new Date(1375674873)
它会给你这个(如果你在EST):
Fri Jan 16 1970 17:07:54 GMT-0500 (Eastern Standard Time)
这告诉我的是,当您在数据库中创建新用户时,他们对TimeExpire
列的值不是您认为的那样。检查列的默认值是什么,并确保在您的代码中,当您将用户添加到数据库时,您手动将其TimeExpire
列设置为time()
而不是依赖某些内容自动。如果数据库时间与服务器时间不完全匹配,那么使用now()
之类的内容将无法生成正确的数字。
另外,作为旁注,您可以按如下方式组合几个查询:
$con->query("UPDATE players SET Time='$timeNow', TimeExpire='$timeExpire' WHERE Username='". $_SESSION['Username']."'");
[...]
$con->query("UPDATE players SET Wood=Wood+$getAmount, Stone=Stone+$getAmount, Gold=Gold+$getAmount WHERE Username='". $_SESSION['Username']."'");
这是一件小事,但一般来说,查询越少意味着网站越快。