Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Рассылка данных из БД
 
 автор: k567   (11.12.2007 в 11:49)   письмо автору
 
 

Товарищи, подскажите пожалуйста, каким образом можна реализовать вот такое:
необходимо в определенное время брать из БД информацию и рассылать ее в определенной форме на определенные емайлы. Например, существует база данных сотрудников, в ней внесена различная информаци типа: дата рождения, семейное положение ФИО и т.д. и т.п. Необходимо каждое 25 число месяца рассылать письмо (с данными на следующий месяц) типа в этом месяце будут дни рождения у следующих сотрудников и табличка с ДР и ФИО.
Очень буду благодарен за помощь! =)))

   
 
 автор: cheops   (11.12.2007 в 11:53)   письмо автору
 
   для: k567   (11.12.2007 в 11:49)
 

Что вызывает затруднение?
1) Вычисление у кого в следующем месяце день рождение?
2) Отправка e-mail
3) Выборка пользователей из базы данных?
4) Автоматический запуск скрипта в определённый день?

   
 
 автор: k567   (11.12.2007 в 13:54)   письмо автору
 
   для: cheops   (11.12.2007 в 11:53)
 

1,4 и формирование определенной формы рассылаемого письма

   
 
 автор: cheops   (12.12.2007 в 14:24)   письмо автору
 
   для: k567   (11.12.2007 в 13:54)
 

1) У вас день рождение в базе данных в каком формате хранится? Используете календарный тип данных?
4) Для этого как правило используют cron http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3861.

   
 
 автор: k567   (13.12.2007 в 16:56)   письмо автору
 
   для: cheops   (12.12.2007 в 14:24)
 

У меня нет доступа к крону. =( Хотя в принципе это можно решить!
Поле в базе, куда записываются даты рождения, содержит текстовый тип данных, а формат вот такой: 31.10.1976

   
 
 автор: k567   (14.12.2007 в 11:35)   письмо автору
 
   для: k567   (13.12.2007 в 16:56)
 

Так, в принципе со всем разобрался! Только вот осталось непонятно как сделать так что бы скрипт брал информацию о днях рождения с 1 по последнее число следующего месяца!

   
 
 автор: cheops   (14.12.2007 в 12:33)   письмо автору
 
   для: k567   (13.12.2007 в 16:56)
 

А нельзя исправить формат на 1976-10-31 и использовать поле DATE? Было бы гораздо удобнее решить эту задачу средствами MySQL?

   
 
 автор: k567   (14.12.2007 в 12:56)   письмо автору
 
   для: cheops   (14.12.2007 в 12:33)
 

Дело в том что эта БД существовала за долго до моего появления на этом месте и человек который это делал почему то решил это сделать именно так, и как следствие давности существования базы, там уже очень много информации... боюсь что это не возможно! =((( Да и БД не mysql а postgresql!
Есть вот такой скрипт, который за некоторое время до дня рождения высылает инфу о сотрудниках у которых близится др.


<?php 
$skip_check 
1;
include(
'../include/header.php');
include(
'../include/functions.inc');

//error_reporting(E_ALL);
$conn $con;
if (!
$conn) {
    echo 
"An error occured.\n";
    exit;
}
$result pg_Exec ($conn"SELECT state,
 name, surname, date, id, vocation, 
stucture, company, photo, mail from 
information where state<>4 and state<>8 and 
date<>'' order by date;"
);
if (!
$result) {
    echo 
"&#207;&#240;&#238;&#232;&#231;
&#238;&#248;&#235;&#224; &#238;&#248;&#232;
&#225;&#234;&#224;.\n"
;
    exit;
}
?>
<TABLE border=0> 
<CAPTION>&#196;&#237;&#232; &#240;&#238;
&#230;&#228;&#229;&#237;&#232;&#255;</
CAPTION> 
<TR><TH>name</TH><TH>surname</TH><TH>date</
TH></TR>
<?
$real_month
=date('m');
settype($real_month"integer");
$str.="<html><body>&#209;&#234;&#238;&#240;
&#238; &#228;&#237;&#232; &#240;&#238;
&#230;&#228;&#229;&#237;&#232;&#255; &#243;
:<br><br><table width=100% border=\"0\">"
;
$month=array(0,31,29,31,30,31,30,31,31,30,
31,30,31);
$rows pg_numrows($result);
$str .= "<tr><td>&#196;&#224;&#242;&#224;</
td><td>&#200;&#236;&#255;</td><td>&#204;
&#229;&#241;&#242;&#238; &#240;&#224;&#225;
&#238;&#242;&#251;/&#237;&#224;&#245;&#238;
&#230;&#228;&#229;&#237;&#232;&#255;</
td><td>&#196;&#238;&#235;&#230;&#237;&#238;
&#241;&#242;&#252;</td><td>E-Mail</td></
tr>"
;
$havebirthdays=0;
for (
$row 0$row $rows$row++) {
  
$r pg_fetch_array($result$row);
  
$where decode_structure($r["stucture"]);
  if(
strcmp($r["stucture"], $r["company"])){
   
$where .= "/".decode_structure($r["company"]);
  }
  if(
$r["mail"]){
      
$mail "<a href=\"mailto:".
$r["mail"]."\">".$r["mail"]."</a>";
  }else{
      
$mail "&#237;&#229;&#242;";
  }
  
$tok strtok($r['date'],".");
  
$t=$tok-date('d');
  
$tok strtok(".");
  
$tt=$tok-date('m');
  
$v1=strtok($r['date'],".")+$month[$real_month]-date('d');
   if (
$tt==and $t==or $tt==and $t==
or $tt==and  $v1==or $tt==and  $v1==){
    
$havebirthdays=1;
    
$adat split("\."$r['date']);
    
$mydate $adat[0].".".$adat[1].".".
$adat[2];
  
?>
    <TR><td><?echo $r['name']?></td><td><?
echo $r['surname']?></td><Td><?echo 
$r['date']?></Td></TR> 
    <?
    $str
.= "<tr><td>$mydate</td><td><a 
href=\"http://internal.ru/information_main.
php?id="
.$r['id']."\">".$r['name']." ".
$r['surname']."</a></td><td>$where</
td><td>"
.$r['vocation']."</td><td>".$mail.
"</td></tr>";
   }
}
if (
$havebirthdays) {
$str .= "</table>";
$theme "&#209;&#238;&#242;&#240;&#243;
&#228;&#237;&#232;&#234;&#232;: &#193;
&#235;&#232;&#230;&#224;&#233;&#248;&#232;
&#229; &#228;&#237;&#232; &#240;&#238;
&#230;&#228;&#229;&#237;&#232;&#255;"
;
//error_reporting(E_ALL);
include("Mail.php");
include(
"Mail/mime.php");
$mime = new Mail_mime("\r\n");
$hdrs = array('From'    => '&#200;&#237;
&#242;&#229;&#240;&#237;&#224;&#235; - 
&#196;&#237;&#232; &#208;&#238;&#230;&#228;
&#229;&#237;&#232;&#255; &#234;&#238;&#235;
&#235;&#229;&#227;<websrv@fw.internal.ru>'
,
              
'Subject' => $theme);
$params = array("text_encoding"=>"quoted-printable",
                
"html_encoding"=>"quoted-printable",
                
"html_charset"=>"windows-1251",
                
"text_charset"=>"windows-1251");
$mime->setHTMLBody($str);
$body $mime->get($params);

$hdrs $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send('members@internal.ru, admin@internal.ru'$hdrs$body);
}
mail('admin@internal.ru'$PHP_SELF'Working...');
 
?>


Все это дело работает на внутреннем сайте, так называемом internal.ru. Возможно ли переделать этот скрипт под мои нужды?

   
 
 автор: k567   (17.12.2007 в 10:03)   письмо автору
 
   для: k567   (14.12.2007 в 12:56)
 

Ну что, совсем идей нет?

   
 
 автор: Trianon   (17.12.2007 в 11:54)   письмо автору
 
   для: k567   (14.12.2007 в 12:56)
 

Может быть для начала Вы приведете скрипт нормально, без дряни (&#207;&#240;...)на месте русских букв?

to cheops: помните, я предлагал Вам сделать кнопку, которая бы устраняла этот венигрет?
И даже код вроде бы привел.
Вы сказали - никто пользоваться не будет.
Угу. Зато все читают эту прелесть.

   
 
 автор: cheops   (17.12.2007 в 12:38)   письмо автору
 
   для: Trianon   (17.12.2007 в 11:54)
 

>to cheops: помните, я предлагал Вам сделать кнопку, которая бы устраняла этот венигрет?
>И даже код вроде бы привел.
Не помню.

   
 
 автор: Trianon   (17.12.2007 в 20:25)   письмо автору
 
   для: cheops   (17.12.2007 в 12:38)
 

Вот в этой теме:
http://softtime.ru/forum/read.php?id_forum=2&id_theme=27390

   
 
 автор: k567   (18.12.2007 в 12:41)   письмо автору
 
   для: Trianon   (17.12.2007 в 20:25)
 

Да, конечно. Вот более читабельный вариант:


<?php 
$skip_check 
1;
include(
'../include/header.php');
include(
'../include/functions.inc');

//error_reporting(E_ALL);
$conn $con;
if (!
$conn) {
    echo 
"An error occured.\n";
    exit;
}
$result pg_Exec ($conn"SELECT state, name, surname, date, id, vocation, stucture, company, photo, mail from information where state<>4 and state<>8 and date<>'' order by date;");
if (!
$result) {
    echo 
"Произошла ошибка\n";
}
?>
<TABLE border=0> 
<CAPTION>Дни рождения</CAPTION> 
<TR><TH>name</TH><TH>surname</TH><TH>date</TH></TR>
<?
$real_month
=date('m');
settype($real_month"integer");
$str.="<html><body>Скоро дни рождения:<br><br><table width=100% border=\"0\">";
$month=array(0,31,29,31,30,31,30,31,31,30,31,30,31);
$rows pg_numrows($result);
$str .= "<tr><td>Имя</td><td>&#200;&#236;&#255;</td><td>Место работы\ нахождения</td><td>Должность</td><td>E-Mail</td></tr>";
$havebirthdays=0;
for (
$row 0$row $rows$row++) {
  
$r pg_fetch_array($result$row);
  
$where decode_structure($r["stucture"]);
  if(
strcmp($r["stucture"], $r["company"])){
   
$where .= "/".decode_structure($r["company"]);
  }
  if(
$r["mail"]){
      
$mail "<a href=\"mailto:".$r["mail"]."\">".$r["mail"]."</a>";
  }else{
      
$mail "Нет";
   }
$tok strtok($r['date'],".");
  
$t=$tok-date('d');
  
$tok strtok(".");
  
$tt=$tok-date('m');
  
$v1=strtok($r['date'],".")+$month[$real_month]-date('d');
   if (
$tt==and $t==or $tt==and $t==or $tt==and  $v1==or $tt==and  $v1==){
    
$havebirthdays=1;
    
$adat split("\."$r['date']);
    
$mydate $adat[0].".".$adat[1].".".$adat[2];
  
?>
    <TR><td><?echo $r['name']?></td><td><?echo $r['surname']?></td><Td><?echo $r['date']?></Td></TR> 
    <?
$str
.= "<tr><td>$mydate</td><td><a href=\"http://internal.ru/information_main.php?id=".$r['id']."\">".$r['name']." ".$r['surname']."</a></td><td>$where</td><td>".$r['vocation']."</td><td>".$mail."</td></tr>";
   }
}
if (
$havebirthdays) {
$str .= "</table>";
$theme "Сотрудники: Ближайшие дни рождения";
//error_reporting(E_ALL);
include("Mail.php");
include(
"Mail/mime.php");
$mime = new Mail_mime("\r\n");
$hdrs = array('From'    => 'Интернал - Ближайшие дни рождения<websrv@fw.internal.ru>',
              
'Subject' => $theme);
$params = array("text_encoding"=>"quoted-printable",
                
"html_encoding"=>"quoted-printable",
                
"html_charset"=>"windows-1251",
                
"text_charset"=>"windows-1251");
$mime->setHTMLBody($str);
$body $mime->get($params);

$hdrs $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send(' admin@internal.ru, users@internal.ru'$hdrs$body);
}
mail('admin@internal.ru'$PHP_SELF'Working...');

   
 
 автор: k567   (19.12.2007 в 10:31)   письмо автору
 
   для: k567   (18.12.2007 в 12:41)
 

Ну что? Есть идеи? Я че то совсем в тупик забрел! =(

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования