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


Информирование о днях рождениях


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

#1 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 12 Март 2015 - 00:58

Задача: в день рождения сотрудника посылать директору письмо с напоминанием в 12-00 через КРОН. КРОН настрое на выполнение в 12-00 такого вот задания:

$result = data_select(281, "status=0 "); // цикл по всем активным записям таблицы 281
while ($line= sql_fetch_assoc($result)) // помещаем в $line текущую запись на очередном проходе цикла
{
  if ((month(`День рождения`) = month(curdate())) AND (day(`День рождения`) = day(curdate()))) {
    $txt="Сегодня.  День рождения празднует ".$line['Фамилия И.О.'].". Не забудьте поздравить. Телефон: ".$line['Телефон +7'].". Автоинформатор.";
    sendmail ("День рождения у ".$line['Фамилия И.О.'],$txt,"******@rambler.ru");
    echo "".$line['Фамилия И.О.']." информация о Дне рождения отправлена на *****@rambler.ru";
  }
}

Но пишет ошибку. Я так понимаю, что условия фильтра тут не сработают и надо как-то извращаться типа $m1=date("d.m.Y", $line['День рождения']); Но это тоже не помогает.
Что я делаю не так?

#2 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 12 Март 2015 - 08:14

Просмотр сообщенияАлександр Пономарев (12 Март 2015 - 00:58) писал:

Задача: в день рождения сотрудника посылать директору письмо с напоминанием в 12-00 через КРОН. КРОН настрое на выполнение в 12-00 такого вот задания:

$result = data_select(281, "status=0 "); // цикл по всем активным записям таблицы 281
while ($line= sql_fetch_assoc($result)) // помещаем в $line текущую запись на очередном проходе цикла
{
  if ((month(`День рождения`) = month(curdate())) AND (day(`День рождения`) = day(curdate()))) {
	$txt="Сегодня.  День рождения празднует ".$line['Фамилия И.О.'].". Не забудьте поздравить. Телефон: ".$line['Телефон +7'].". Автоинформатор.";
	sendmail ("День рождения у ".$line['Фамилия И.О.'],$txt,"******@rambler.ru");
	echo "".$line['Фамилия И.О.']." информация о Дне рождения отправлена на *****@rambler.ru";
  }
}

Но пишет ошибку. Я так понимаю, что условия фильтра тут не сработают и надо как-то извращаться типа $m1=date("d.m.Y", $line['День рождения']); Но это тоже не помогает.
Что я делаю не так?
Вы перепутали функции PHP с функциями mySQL - это главное.
И потом, написав month(`День рождения`) - что Вы ожидаете получить?
Ну и еще несколько огрехов

Предположим, что fXXX - поле с днем рождения сотрудника
Измените условия отбора в запросе на
month(`fXXX`) = month(curdate()) and day(`fXXX`) =day(curdate()) AND `status` = 0
и получите только те записи, в которых день рождения равен текущей дате

Далее, в Вашем случае массив $line не будет содержать элементов $line['Фамилия И.О.'] и т.д.
В нем будут элементы с истинным наименованием полей, например $line['fYYY'] где 'fYYY - поле с фамилией

Сообщение отредактировал maksn: 12 Март 2015 - 08:55

"...Сижу, паяю. CRM починяю..."
Мои разработки

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 12 Март 2015 - 09:17

Просмотр сообщенияАлександр Пономарев (12 Март 2015 - 00:58) писал:

Задача: в день рождения сотрудника посылать директору письмо с напоминанием в 12-00 через КРОН.
А почему не использовать встроенный механизм напоминаний с отправкой на e-mail для конкретного сотрудника в определенное время?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 12 Март 2015 - 15:23

Просмотр сообщенияandibrag (12 Март 2015 - 09:17) писал:

А почему не использовать встроенный механизм напоминаний с отправкой на e-mail для конкретного сотрудника в определенное время?

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

Решение задачи тут:

$result = data_select(281, "status=0 "); 
while ($line= sql_fetch_assoc($result)) {
  $m1=date("m", strtotime($line['f3941'])); // Вычленяем месяц из даты рождения
  $m2=date("m"); // Вычленяем месяц из текущей даты
  $d1=date("d", strtotime($line['f3941']));  // Вычленяем день из дня рождения
  $d2=date("d");  // Вычленяем день из текущей даты
  $d3=date("d.m.Y", strtotime($line['f3941'])); // Формируем дате рождения в привычном формате DD.MM.GGGG
  $d4=date("d.m.Y");  // То же для текущей даты
  $y1=date("Y", strtotime($line['f3941']));  // Вычленяем год из дня рождения
  $y2=date("Y");  // Вычленяем год из текущей даты
  $y3=$y2-$y1;  // Определяем возраст в годах
  if (($m1==$m2) AND ($d1==$d2)) {
    $text="<b>СЕГОДНЯ, $d4  ДЕНЬ РОЖДЕНИЯ <br>У НАШЕГО ТОВАРИЩА ".$line['f3911'].". Ему (ей) исполнилось $y3. Поздравить можно по телефону <b>".$line['f16021']."</b>.";
    sendmail ("$d4 День рождения у ".$line['f3911'],$text,"adres1@rambler.ru");
    sendmail ("$d4 День рождения у ".$line['f3911'],$text,"adres2@rambler.ru");
    echo date("d.m.Y H:i:s")." отправлено: <br><br>".$text;
  }
}


где 281 - номер таблицы, adres1@rambler.ru, adres2@rambler.ru - список адресов для отправки, f3911 - Ф.И.О., f16021 - телефон, f3941 - день рождения

Все замечательно работает и отправляет в 12-00 напоминание всем, чьи адреса указаны в списке. Аналогично можно организовать и отправку автосмс и автопочты самому имениннику





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

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