Перейти к содержимому


Ошибка в вычислении кроном: если слово не содержится в поле, то отправить письмо


Сообщений в теме: 7

#1 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 06 Декабрь 2018 - 22:24

Пожалуйста, помогите найти ошибку, почему крон выполняется некорректно.

Описание текстом последовательности действий:
1 действие: изменение значение в поле f8281 при выполнении условия. оно отрабатывает корректно. после его выполнения нужно выполнять 2 действие.
2 действие. ищем в поле f21750 слово "Оплатить" или "оплатить" в любом регистре. ищем не полное совпадение, а упоминание.
3 действие. если во 2 действии упоминание не находится, нужно отправить шаблон письма и шаблон смс
4 действие. после отправки шаблона нужно проставить текст "Авто-email-смс: оплатить" в поле f21750, т.к. при следующем срабатывании крона он опять будет искать в поле f21750 текст "оплатить", а когда найдет, то уже не будет отправлять шаблоны

текущий код:
//1 действие: изменение значение в поле f8281 при выполнении условия. оно отрабатывает корректно. после его выполнения нужно выполнять 2 действие
if($line['f10791'] == 0 && $line['f11201'] == 0) {
$data['f8281'] = "Оплатить";
  //2 действие. ищем в поле f21750 слово "Оплатить" или "оплатить" в любом регистре. ищем не полное совпадение, а упоминание.
  if(mb_strpos($line['f21750'], 'оплатить') != false) {
   //3 действие. если во 2 действии упоминание не находится, нужно отправить шаблон письма и шаблон смс
   send_template(3050, "`status`=0 AND `id` =" . $line['id']);
   sendsms("Выставлен счет на оплату", $pupil['f3731']);
  }
//4 действие. после отправки шаблона нужно проставить текст "Авто-email-смс: оплатить" в поле f21750, т.к. при следующем срабатывании крона он опять будет искать в поле f21750 текст "оплатить", а когда найдет, то уже не будет отправлять шаблоны
$data['f21750'] = "Авто-email-смс: оплатить";
}


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 680 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Декабрь 2018 - 12:19

А что за $line у вас в кроне? Что в этой переменной у вас находится?

#3 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 07 Декабрь 2018 - 13:15

Просмотр сообщенияCbCoder (07 Декабрь 2018 - 12:19) писал:

А что за $line у вас в кроне? Что в этой переменной у вас находится?

там данные для вычисления.
в начале крона идет код. все вместе вот так выглядит

$result = data_select(541, 'status = 0 and id = 4209');
while($line = sql_fetch_assoc($result)) {
pr($line);
    $pupil = data_select_array(341, "id = {$line['f8341']}");
    $data = [];

   if($line['f10791'] == 0 && $line['f11201'] == 0) {
        echo "3<br>";
        $data['f8281'] = "Оплатить";
        $data['f21750'] = "Авто-email-смс: оплатить";        
        //письмо и смс отправлять, если в поле $line['Рассылки'] нет слова "оплатить"
            if(mb_strpos($line['f21750'], 'оплатить') != false) {
                send_template(3050, "`status`=0 AND `id` =" . $line['id']);
//              sendsms("Выставлен счет на оплату", $pupil['f3731']);
            echo "4<br>";
            }
    } 


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 680 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Декабрь 2018 - 17:22

Какая ошибка то в логах крона?

#5 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 07 Декабрь 2018 - 20:02

не ошибка. он неправильно работает

должно быть так:
2 действие. ищем в поле f21750 слово "Оплатить" или "оплатить" в любом регистре. ищем не полное совпадение, а упоминание.
3 действие. если во 2 действии упоминание не находится, нужно отправить шаблон письма и шаблон смс

происходит:
слово "оплатить" есть в тексте этого поля, но шаблон все равно отправляется

#6 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 07 Декабрь 2018 - 20:08

либо не в той последовательности все происходит. с текущим вычислением сначала отправляются шаблоны, а потом ищется или проставляется текст в логи. нужно наоборот:
сначала ищем текст (упоминание слова в поле), если не находим - отправляем шаблон и пишем в в лог

#7 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 08 Декабрь 2018 - 10:57

А вообще в 1 кроне возможно это делать, чтобы искалось в логе, отправлялось и писалось в лог? Ты говорил, что вычисление сразу отрабатывает, а потом пишет. Значит, это невозможно? Проще сделать рассылку через фильтр. Правильно думаю?

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 680 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 12 Декабрь 2018 - 14:36

Цитата

3 действие. если во 2 действии упоминание не находится, нужно отправить шаблон письма и шаблон смс

У вас в условии стоит наоборот: "!= false" (правильнее "!== false", кстати) означает что результат поиска успешен.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных