在下面的代码中,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 {
第一个SQL查询是什么?一旦午夜过去,它将不返回任何内容,即使提交发生在午夜前几分钟。
(while
循环是怎么回事,在第一次迭代的中间被无条件地打破?)
Also Also:你的查询对数据库的要求看起来是不必要的。如果首先将截止时间戳计算为"24小时前",然后简单地选择更新的行,可能会更有效。一旦返回了一行(如果返回了),就可以计算PHP端还剩下多长时间。(或者甚至只是检索最近的提交时间,然后在数据库之外执行整个禁运计算)。