第一部分:
我正在尝试编写一个脚本,以便在未支付服务电话时向我们发送电子邮件。
继承人'我的开始:
$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的工作一无所知,所以我认为除非有人想帮我解决这个问题。但我所学到的是,如果我只是在索引或登录页面上包含此页面,它将在有人只是点击登录页面时运行。但是每当有人点击索引页面时,这都会运行它。
有人可以帮忙吗?
答案 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访问。