簡體   English   中英

PHP foreach並在特定時間運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM