我是PHP的新手,我希望制作一个脚本,用户每小时都会得到一个"硬币",他们去页面上。例如,如果用户在同一小时内登录两次,他们只能获得一枚硬币。但如果他们在接下来的一个小时内刷新页面,他们就会得到另一枚硬币。然而,当他们不刷新页面时,他们不会得到硬币,即使许多小时过去了。
我该怎么开始做这件事呢?
轻松…:)如果你正在使用MySQL或其他东西来存储硬币,也要获得时间,当硬币被记入信用时。每次调用页面时,检查时间。伪代码应该是这样的:
load(coins);
timeDiff = timeNow - timeLastCredited;
if (timeDiff > 1 hour)
coins++;
save(coins);
对于PHP,我猜你可能会这样做:
$coins = getCoins(); // Assuming this function will load the current coins count from DB.
$lastCredit = getLastCoinCreditedTime(); // Should return a DateTime integer.
$timeDiff = microtime() - strtotime($lastCredit);
if ($timeDiff > 60*60*60*1000)
saveCoins($coins+1); // Assuming this function saves the new number of coins.
我会这样做:
在每次页面加载(刷新,登录,等等)时,检查用户是否已经收到当前小时的硬币。要做到这一点,您需要知道当前的小时数:
$hour = (new DateTime())->format("Y-m-d-h");
这将在11:00时给出一个类似"2013-03-25-11"的值。我把日期也算进去了,因为我们不想因为他们昨天11点05分在网上就不给钱了。
则可以:
每当你有一个新的
$hour
值(即:它不记录在您的数据库中)并保存$hour
值,或将
$hour
值保存在数据库中,并使用SELECT COUNT(DISTINCT hour) FROM table;
等查询计算所赚取的硬币总数
第一种方法是有用的,如果他们花硬币的东西(如:你可以从他们的"硬币账户"中加减);如果你只想知道金币的总数,那么第二种方法就很有用。
假设数据库中有一个users表。
如果是这种情况,您可以使用数据库中的列来更新用户使用php访问该页面的最新时间和该页面的查询。然后,您可以设置一个每小时运行一次的cron作业,该作业将查询users表,并查看用户是否在过去一小时内查看了该页。如果用户在过去一小时内浏览过该页面,则增加与该用户关联的硬币数量。