[英]PHP foreach & Run at certain time
第一部分:
我試圖編寫一個腳本,以便在未支付服務電話時給我們發送電子郵件。
這是我開始的事情:
$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工作沒有零了解,所以除非有人想幫助我,否則我認為那是不可能的。 但是,我了解到的是,如果我僅將此頁面包括在索引或登錄頁面中,它將在有人單擊登錄頁面時運行。 但這將在有人點擊索引頁面時每次運行它。
有人可以幫忙嗎?
由於您已經處於循環中,因此要foreach
結果,所以您不需要foreach
,您只需要if
:
if($status == 'Unpaid'){
mailBadAction($id, $account, $status);
}
而且,如果您使用的是Linux環境,則需要cron每天運行一次。
最簡單的操作(如果您的系統具有此功能...)是將php腳本添加到/etc/cron.daily
並使其可執行。 您的腳本看起來像(取決於環境...):
#!/usr/local/bin/php
<?php
// your script
?>
你真的應該測試一下...
Jeroen的答案是正確的,您需要一個if
語句。
您可以通過添加數據庫檢查以確保它距離上次發送電子郵件至少24小時,然后更新該時間戳,來設置cron作業。 但這實在是麻煩多於其價值。 在處理數據和發送電子郵件時,它將極大地阻止和放慢速度,並且一些可憐的汁液會坐在那里,想知道為什么頁面永遠占用了它。 學習如何設置Cron工作將更有價值。
我認為您弄錯了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”之后在Google上查找,您可能會得到:
http://www.thegeekstuff.com/2011/07/php-cron-job/
這意味着您可以完全從主站點彈出腳本並將其作為獨立系統運行,而無需網絡訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.