Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP] Jednorazowe wysłanie maila, mail wysyłany po spełnieniu warunku dat
zaworek
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.06.2006

Ostrzeżenie: (0%)
-----


Witam. Nie mam pomysłu jak skrypt ma sprawdzić czy wiadomość mailowa została już raz wysłana do odbiorcy.
Kod który obecnie posiadam wysyła mi maila przy każdorazowym odświeżeniu strony.

  1. // kod powyżej nieistotny
  2.  
  3. $mailto = "adres mailowy";
  4. $mailsubj = "temat wiadomosci";
  5. $mailhead = "MIME-Version: 1.0\n";
  6. $mailhead .= "Content-type: text/html; charset=UTF-8\n";
  7. $mailhead .= "From: adres mailowy\n";
  8. $uchwyt=mysql_connect('host','login','pass') or die ('Błąd połączenia');
  9. mysql_select_db('zur') or die('Nie można wybrać bazy');
  10. mysql_set_charset('utf8'); //ustawiam kodowanie znaków z bazy na UTF-8
  11. $all=mysql_query("SELECT * FROM zur ORDER BY workshop");
  12. while($wiersz=mysql_fetch_array($all))
  13. {
  14. $data['dzis'] = date('Y-m-d');
  15. $data['termin'] = date('Y-m-d',strtotime('30 day')); //30 dni od dziś
  16. if($wiersz['done'] == $data['dzis'])
  17. {
  18. $style = 'style="background-color: #F2F246;"';
  19. $mailbody = '<html><body>
  20. <FONT face=verdana size=2><p>Dziś mija termin dla poniższego sprzętu:</p></FONT>
  21. <table border=1>
  22. <tr>
  23. <th><FONT face=verdana size=2>Obiekt: '.$wiersz['workshop'].'</FONT></th>
  24. <th><FONT face=verdana size=2>TYP : '.$wiersz['typ'].'</FONT></th>
  25. <th><FONT face=verdana size=2>MODEL : '.$wiersz['model'].'</FONT></th>
  26. <th><FONT face=verdana size=2>SN : '.$wiersz['sn'].'</FONT></th>
  27. <th><FONT face=verdana size=2>DO : '.$wiersz['done'].'</FONT></th>
  28. </tr>
  29. </table>
  30. <FONT face=verdana size=2><p>Proszę nie odpowiadać na tego maila.</p></FONT>
  31. </body></html>';
  32. mail($mailto, $mailsubj, $mailbody, $mailhead);
  33. }// wysyła maila i koloruje wiersz tabeli na zółto jeżeli data w done = dacie dzisiejszej
  34. elseif($wiersz['done'] <= $data['termin'] || $wiersz['done'] < $data['dzis']){ $style = 'style="background-color: #FF5F5F;"'; }
  35. elseif($wiersz['done'] > $data['termin']){ $style = 'style="background-color: #9ACD32;"' ; }
  36. echo '<tr>
  37. <td align="center" '.$style.'>'.$wiersz['workshop'].'</td>
  38. <td align="center" '.$style.'>'.$wiersz['typ'].'</td>
  39. <td align="center" '.$style.'>'.$wiersz['model'].'</td>
  40. <td align="center" '.$style.'>'.$wiersz['sn'].'</td>
  41. <td align="center" '.$style.'>'.$wiersz['done'].'</td>
  42. </tr>';
  43. }
  44. //kod poniżej nieistotony


Ten post edytował zaworek 10.05.2011, 12:30:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zaworek
post
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.06.2006

Ostrzeżenie: (0%)
-----


Czy w tabeli jest 0 czy 1 i tak wysyła maila. Pewnie zrobiłem prosty błąd którego nie widzę.

  1. // część kodu sprawdzająca wrunek
  2.  
  3. if($wiersz['done'] == $data['dzis']){
  4. $style = 'style="background-color: #F2F246;"';
  5. if ($wiersz['mail'] == 0) //sprawdzam czy w tabeli jest 1 czy 0
  6. $mailbody = '<html><body>
  7. <FONT face=verdana size=2><p>Dziś mija termin dla:</p></FONT>
  8. <table border=1>
  9. <tr>
  10. <th><FONT face=verdana size=2>Cel: '.$wiersz['workshop'].'</FONT></th>
  11. <th><FONT face=verdana size=2>TYP : '.$wiersz['typ'].'</FONT></th>
  12. <th><FONT face=verdana size=2>MODEL : '.$wiersz['model'].'</FONT></th>
  13. <th><FONT face=verdana size=2>SN : '.$wiersz['sn'].'</FONT></th>
  14. <th><FONT face=verdana size=2>DO : '.$wiersz['done'].'</FONT></th>
  15. </tr>
  16. </table>
  17. <FONT face=verdana size=2><p>Proszę nie odpowiadać na tego maila.</p></FONT>
  18. </body></html>';
  19. mail($mailto, $mailsubj, $mailbody, $mailhead);
  20. mysql_query("UPDATE zur SET mail = '1' WHERE done = '$data[dzis]'"); //update pola mail na 1 - mail wyslany
  21. }



edit:

ok znalazłem problem, brakowało otwartej klamry po if ($wiersz['mail'] == 0) oraz drugiej zamykającej po mysql_query, po zmianie wygląda że jest ok.
dziękuję za wszystkie sugestie

Jednak nie jest dobrze. O ile kolorowanie wierszy funkcjonuje tak jak chciałem to wysyłanie powiadomień już nie.
Status czy wysłany (1) czy nie (0) działa poprawnie tylko dla ostatniego wyświetlanego rekordu z bazy danych. Zmiana innych uzależniona jest właśnie od niego.
Czemu skrypt się tak zachowuje?

  1. $mailto = "adres mailowy";
  2. $mailsubj = "Kalibracja sprzętu";
  3. $mailhead = "MIME-Version: 1.0\n";
  4. $mailhead .= "Content-type: text/html; charset=UTF-8\n";
  5. $mailhead .= "From: zur@sbe-online.pl\n";
  6. $uchwyt=mysql_connect('host','login','pass') or die ('Błąd połączenia');
  7. mysql_select_db('zur') or die('Nie można wybrać bazy');
  8. mysql_set_charset('utf8'); //ustawiam kodowanie znaków z bazy na UTF-8
  9. $all=mysql_query("SELECT * FROM zur ORDER BY workshop");
  10. while($wiersz=mysql_fetch_array($all))
  11. {
  12. $data['dzis'] = date('Y-m-d');
  13. $data['termin'] = date('Y-m-d',strtotime('30 day')); //30 dni od dziś
  14. if($wiersz['done'] == $data['dzis']){
  15. $style = 'style="background-color: #F2F246;"';
  16. if ($wiersz['mail'] == 0) { //sprawdzam czy mail był już wysłany 0 - nie, 1 - tak
  17. $mailbody = '<html><body>
  18. <FONT face=verdana size=2><p>Dziś mija termin kalibracji poniższego sprzętu:</p></FONT>
  19. <table border=1>
  20. <tr>
  21. <th><FONT face=verdana size=2>MIEJSCE: '.$wiersz['workshop'].'</FONT></th>
  22. <th><FONT face=verdana size=2>TYP : '.$wiersz['typ'].'</FONT></th>
  23. <th><FONT face=verdana size=2>MODEL : '.$wiersz['model'].'</FONT></th>
  24. <th><FONT face=verdana size=2>SN : '.$wiersz['sn'].'</FONT></th>
  25. <th><FONT face=verdana size=2>DO : '.$wiersz['done'].'</FONT></th>
  26. </tr>
  27. </table>
  28. <FONT face=verdana size=2><p>Proszę nie odpowiadać na tego maila.</p></FONT>
  29. </body></html>';
  30. mail($mailto, $mailsubj, $mailbody, $mailhead); //wysłanie maila na zdefiniowany adres
  31. mysql_query("UPDATE zur SET mail = '1' WHERE done = '$data[dzis]'"); //jeżeli mail wysyłany po raz pierwszy dopisuje 1 do kolumny mail w tym konkretnym rekordzie - działa tylko dla ostatniego rekordu z tabeli
  32. }
  33. }
  34. elseif($wiersz['done'] <= $data['termin'] || $wiersz['done'] < $data['dzis'])
  35. {
  36. $style = 'style="background-color: #FF5F5F;"';
  37. }
  38. elseif($wiersz['done'] > $data['termin']) //warunek kiedy termin jest odległy
  39. {
  40. $style = 'style="background-color: #9ACD32;"' ;
  41. mysql_query("UPDATE zur SET mail = '0'"); //zmienia status na 0 w kolumnie mail jeżeli data jest odległa od terminu (działa tylko jeżeli warunek dotyczy ostatniego rekordu w tabeli)
  42. }


Ten post edytował zaworek 10.05.2011, 14:32:09
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 20:51