阻止用户提交24小时,并显示块上剩余的小时数

时间:2011-08-25 18:13:14

标签: php mysql

在下面的代码中,datesubmitted是一个时间戳。如果给定的$uid已在24小时内提交,我希望他们无法提交,并看到一条消息,显示他们可以再提交多少小时。

以下代码似乎至少在前几个小时起作用(第一个小时显示24个,第二个小时显示23个)。但是当我今天检查并预计会在消息上看到4-6小时后,消息根本就没有了。

我的代码有问题吗?

$queryuidcount = "select loginid from submission where TO_DAYS(datesubmitted) = TO_DAYS(NOW()) AND loginid = '$uid'"; 
$uidresult = mysql_query($queryuidcount);

if (mysql_num_rows($uidresult) >= 1) {
    $queryuidhours = "select loginid, 24 - HOUR(TIMEDIFF(NOW(), datesubmitted)) as hours from submission where loginid = '$uid' ORDER BY hours DESC"; 
    $hourresult = mysql_query($queryuidhours);
    $hourcount = 1;
    while($row = mysql_fetch_array($hourresult)) {
        echo '<div class="submittitle">You will not be able to submit again for '.$row["hours"].' hours.</div>';
        break;
        $hourcount++;
    }
    mysql_free_result($hourresult);
} else {

1 个答案:

答案 0 :(得分:2)

第一个SQL查询是什么?一旦午夜过去,即使在午夜前几分钟发生了提交,它也不会返回任何内容。

(在第一次迭代过程中无条件断开的while循环是怎么回事?)

另外:您的查询对数据库的要求不必要。如果您首先将截止时间戳计算为“24小时前”,然后只选择比此更新的行,那么效率可能更高。一旦你返回一行(如果你这样做),你就可以计算PHP方面剩余的时间。 (或者甚至只是检索最近的提交时间,然后在数据库外进行整个禁运计算)。