策略游戏定时资源

时间:2013-09-11 13:21:45

标签: php mysql

出于某种原因,当用户注册时,不是以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小时后重新登录时,他们仍然可以获得这段时间的钱。

1 个答案:

答案 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']."'");

这是一件小事,但一般来说,查询越少意味着网站越快。