PHP foreach&在某个时间运行

时间:2012-02-02 16:00:24

标签: php mysql foreach

第一部分:

我正在尝试编写一个脚本,以便在未支付服务电话时向我们发送电子邮件。

继承人'我的开始:

$query = "SELECT * FROM service";
        $result = mysql_query($query);  

    while($row = mysql_fetch_row($result)){

                $id = $row[0];
                $dateEntered = $row[1];
                $type = $row[2];
                $account = $row[3];
                $dateCompleted = $row[4];
                $notes = $row[5];
                $status = $row[6];

                foreach($status == 'Unpaid'){
                mailBadAction($id, $account, $status);

                }
        }   

我不确定我是否正确编写了foreach(可能没有,并且我不在环境中我可以尝试它,因为它与其他所有内容相关联。)

但基本上,它会在我的while语句中加载所有服务调用。我想检查每个记录的$ status,并检查它是否为“Unpaid”,如果是,则运行函数mailBadAction()并将$ id,$ account,$ status,$ dateEntered传递给该函数。 我只希望这一天发生。

第二部分:

我需要每天一次,每天一次。我对cron的工作一无所知,所以我认为除非有人想帮我解决这个问题。但我所学到的是,如果我只是在索引或登录页面上包含此页面,它将在有人只是点击登录页面时运行。但是每当有人点击索引页面时,这都会运行它。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

由于您已经处于循环中,通过结果,因此您不需要foreach,只需if

  if($status == 'Unpaid'){
            mailBadAction($id, $account, $status);

    }

如果你在Linux环境中,你需要cron每天运行一次。

最简单的事情(如果你的系统有...),将php脚本添加到/etc/cron.daily并使其可执行。你的脚本看起来像(取决于环境......):

#!/usr/local/bin/php
<?php
// your script
?>

你真的应该测试一下......

答案 1 :(得分:0)

Jeroen的回答是正确的,您需要if声明。

您可以通过添加数据库检查来确保自上次发送电子邮件至少24小时以及更新该时间戳,从而绕过设置cron作业。但这确实比它的价值更麻烦。它会在处理数据和发送电子邮件时极大地阻塞和减速,而一些糟糕的傻瓜会坐在那里想知道为什么页面会永远消失。学习如何设置一个cron作业会更有价值。

答案 2 :(得分:0)

我认为你的foreach语法错误了:

foreach ($array as $value) {
    //here you can use $value as the current array field
}

但如前所述,您可以调整查询,只为您提供未支付的字段:

SELECT id,account,status FROM service WHERE status = 'Unpaid'

(我不知道你的桌子究竟是怎么样的,但我想这个结构)

现在,来自您的数据库的每个结果都是“未付”,因此不需要测试if(status=='Unpaid')

对于Cronjobs在“cron php”之后看谷歌,你可能会得到:

http://www.thegeekstuff.com/2011/07/php-cron-job/

这意味着您完全从主站点弹出脚本并将其作为独立系统运行,无需从Web访问。