php - 阻止用户提交 24 小时,并显示阻止的时间

标签 php mysql

在下面的代码中,datesubscribed 是一个时间戳。如果给定的 $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 循环是怎么回事?)

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

关于php - 阻止用户提交 24 小时,并显示阻止的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195205/

相关文章:

javascript - 为什么我的编辑页面在 Laravel 中不起作用?我使用了 vue.js

php - Laravel Mail 与 swiftmailer 之间的区别

php - 打开和关闭与数据库的连接或保留它

javascript - 如果 MySQL 获得新的最高 ID,如何触发 PHP?

javascript - 如何根据我单击的菜单按钮更改图像的路径

MySQL 2个查询组合成1个查询

c# - 如何将sql多个LEFT JOIN转换为linq

mysql - Wordpress 后期同步/发布到生产环境

cmd 粘贴时出现 MYSQL 错误

mysql - 从 SQL Server 到 MySQL 的每日更新