1小时后和24小时后改变状态

时间:2017-10-30 18:39:17

标签: php mysql cron

我已经安装了一个自动运行的cron作业。它会检查数据库中的作业,一小时后它应该从私有状态更改为公共状态,24小时后应该从公共状态更改为过期状态。 cron作业运行顺利但下面的代码没有带来预期的结果。数据库数据没有变化,当我自己运行时,没有任何内容显示为消息。

如何扭转它以达到目的?

我的代码:           

      // Check and do something: private to public
      $now=date("Y-m-d H:i:s");
      $timeBefore=strtotime($now-3600);
      $check=mysqli_query($con,"SELECT * FROM ibirakas WHERE status='private' AND added<'$timeBefore'") or die(mysql_error());
      while($exe_check=mysqli_fetch_assoc($check)){
        $id=$exe_check['kiraka_id'];
        $query=mysql_query("UPDATE ibirakas SET status='public' WHERE id='$id'") or die(mysql_error());
        if($query==true){
          echo "CRON_1_DONE";
        } else {
          echo "CRON_1_FAIL";
        }
      }
      //check and do something: public to expired
      $now=date("Y-m-d H:i:s");
      $timeBefore=strtotime($now-86400);
      $check=mysqli_query($con,"SELECT * FROM ibirakas WHERE status='public' AND added<'$timeBefore'") or die(mysql_error());
      while($exe_check=mysqli_fetch_assoc($check)){
        $id=$exe_check['kiraka_id'];
        $query=mysql_query("UPDATE ibirakas SET status='expired' WHERE id='$id'") or die(mysql_error());
        if($query==true){
          echo "CRON_2_DONE";
        } else {
          echo "CRON_2_FAIL";
        }
      }

我已经包含了connect.php文件,而且我已经打开了php打开和关闭标签(这里没有包含) 我们将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

我认为如果没有那么多PHP,你可以更轻松地使用MySQL功能。有许多功能,例如TIMEDIFF,因此您可以检查从NOW()到保存日期的差异是否大于90分钟。这是一个很好的问题,如何从差异中获得分钟。

Difference in minutes from two time fields in MySQL

然后您不需要这样选择并更新所有行。您可以直接更新符合条件的所有行。

答案 1 :(得分:0)

我能够找到这个问题的相关答案。由于我想首先使用MySQL,这个简单的解决方案就做到了。

      <?php
      include("connect.php");
      date_default_timezone_set("Africa/Kigali");
      // Change from private to public
      $query=mysqli_query($con,"SELECT * FROM ibirakas WHERE TIME_TO_SEC(TIMEDIFF(now(),`added`))>3600 AND status='private'");
      while($row=mysqli_fetch_assoc($query)){
        $change=mysqli_query($con,"UPDATE ibirakas SET status='public'");
      }
      // Change from public to expired
      $query=mysqli_query($con,"SELECT * FROM ibirakas WHERE TIME_TO_SEC(TIMEDIFF(now(),`added`))>86400 AND status='public'");
      while($row=mysqli_fetch_assoc($query)){
        $change=mysqli_query($con,"UPDATE ibirakas SET status='expired'");
      }
      ?>

由于