Php 阻止用户提交24小时,并显示块上还剩多少小时

Php 阻止用户提交24小时,并显示块上还剩多少小时,php,mysql,Php,Mysql,在下面的代码中,datesubmitted是一个时间戳。如果一个给定的$uid在24小时内提交,我希望他们不能提交,并看到一条消息,显示他们需要多少小时才能再次提交 下面的代码至少在最初几个小时内有效(第一个小时显示24,第二个小时显示23)。但当我今天查看时,预计邮件上还有4-6个小时,邮件根本就没有 我的代码有问题吗 $queryuidcount = "select loginid from submission where TO_DAYS(datesubmitted) = TO_DAYS(

在下面的代码中,
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 {
$queryuidcount=“从提交中选择loginid,其中TO_DAYS(datesubmitted)=TO_DAYS(NOW())和loginid='$uid';
$uidresult=mysql\u查询($queryuidcount);
if(mysql\u num\u rows($uidresult)>=1){
$queryuidhours=“选择loginid,24小时(TIMEDIFF(NOW(),datesubmitted))作为提交后的小时数,其中loginid='$uid'按小时数顺序描述”;
$hourresult=mysql\u查询($queryuidhours);
$hourcount=1;
while($row=mysql\u fetch\u数组($hourresult)){
echo“您将无法为“$row[“hours”]”再次提交。'hours';
打破
$hourcount++;
}
mysql\u free\u结果($hourresult);
}否则{

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

(在第一次迭代的中间,“<代码> > <代码>循环”是无条件地发生的?)< /P>


另外:您的查询看起来对数据库的要求不必要。如果您首先计算截止时间戳为“24小时前”,然后简单地选择比该时间戳新的行,可能会更高效。一旦您得到一行(如果您这样做),您可以计算PHP端还剩多长时间。(甚至只是检索最近的提交时间,然后在数据库之外进行整个禁运计算).

FYI,您可能对SQL注入非常开放,这取决于您如何填充
$uid
。您应该转义所有要在查询中使用的变量。更好的是,使用PDO进行准备好的查询。@Brad,$uid是一个会话变量。我还需要通过mysql\u real\u escape\u string()运行吗这取决于你是如何填充会话变量的。如果你强制它是一个
int
,那么你应该没问题。作为一项规则,我在查询中使用它时会对所有内容进行转义,这样就没有什么可担心的了,如果该变量中出现了一些不好的数据。转义不会有什么坏处。@Henning。好的,谢谢。我怎样才能使它成为一个变量呢24小时时间戳?取当前时间并减去24小时?不,在PHP端,然后将其作为查询参数提供给SQL。@Henning,我不担心数据库的负担。我想你对午夜后第一个查询不返回任何内容的见解就是我所需要的全部信息。