PHP foreach & Run в определенное время - PullRequest
0 голосов
/ 02 февраля 2012

Первая часть:

Я пытаюсь написать сценарий для отправки нам электронного письма, когда сервисный звонок не оплачивается.

Вот что я начал:

$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 ]

3 голосов
/ 02 февраля 2012

Поскольку вы уже находитесь в цикле, просматривая результаты, поэтому вам не нужно foreach, вам просто нужно if:

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

    }

И если вы используете LinuxВ среде вам нужен cron для запуска чего-либо один раз в день.

Самое простое (если ваша система имеет это ...) - это добавить скрипт php в /etc/cron.daily и сделать его исполняемым.Ваш сценарий будет выглядеть примерно так (в зависимости от среды ...):

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

И вы действительно должны проверить его ...

0 голосов
/ 02 февраля 2012

Я думаю, вы неправильно указали синтаксис 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 посмотрите на Google после "cron php", и вы можете получить:

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

Это означает, что вы полностью извлекаете сценарий с основного сайта и запускаете его как автономную систему без доступа из Интернета.

0 голосов
/ 02 февраля 2012

Jeroen ответ правильный, вам нужен оператор if.

Вы можете обойти настройку задания cron, добавив проверку базы данных, чтобы убедиться, что прошло не менее 24 часов с момента последней отправкиэлектронные письма и обновление этой отметки времени.Но это, честно говоря, больше проблем, чем оно того стоит.Он будет блокировать и сильно тормозить, поскольку обрабатывает данные и отправляет электронные письма, и какой-то плохой сок будет сидеть и думать, почему страница берет навсегда.Изучить, как настроить работу cron, было бы гораздо ценнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...