Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Potrzebny UTF-8/HTML w powiadomieniu na email
Forum PHP.pl > Forum > PHP
enimatto
Witam, mam problem z implementacją UTF-8/HTML do tego skryptu ponizej. Probowalem wiele sposobow, pare mixow ze zwyklymi formularzami (ktore dzialaja prawidlowo) ale niestety bez skutku. Gdzies robie jakis blad.
Skrypt ten przez cron'a co jakis czas wysyla raport na emaila o zblizajacych sie zadaniach. Funkcjonuje prawidlowo, ale te krzaki mnie przerazaja - zero polskich znakow. Ma ktos jakis pomysl? Z gory dzieki.

  1. <?php
  2.  
  3. $user="test";
  4. $password="test";
  5. $database="test";
  6. mysql_connect('localhost',$user,$password);
  7.  
  8. mysql_select_db($database) or die( "Unable to select database");
  9. #echo mysql_query("SET AUTOCOMMIT=0")?'':(mysql_error() . "\n");
  10. #echo mysql_query("START TRANSACTION")?'':(mysql_error() . "\n");
  11.  
  12. $query = "
  13. SELECT frk_item.title,
  14. frk_item.deadlineDate,
  15. CASE
  16. WHEN (deadlineDate <= date_add(now(), INTERVAL 5 day) )
  17. THEN 'critical'
  18. ELSE 'coming due'
  19. END critical
  20. FROM frk_item,
  21. frk_member
  22. WHERE 1 = 1
  23. AND deadlineDate <= date_add(now(), INTERVAL 10 day)
  24. AND frk_item.memberId = frk_member.memberId
  25. AND frk_member.email = 'mail@mail.pl'
  26. ORDER BY deadlineDate;";
  27.  
  28. $result = mysql_query($query);
  29. if (!$result)
  30. {
  31. $errors[] = "mysql query failed: " . mysql_error();
  32. $errors[] = $query;
  33. # echo "mysql query failed: " . mysql_error() . "\n";
  34. }
  35. else
  36. {
  37.  
  38.  
  39. $email = $email . "ĄĆĘŻŹ \n\n";
  40. $importance = '';
  41.  
  42.  
  43. while ($row = mysql_fetch_assoc($result))
  44. {
  45. if ($row['critical'] == 'critical')
  46. {
  47. $importance = "Importance: High\n";
  48. }
  49.  
  50. $email = $email . $row['deadlineDate'] . ' - ' . $row['title'] . "\n";
  51. }
  52.  
  53. mail ("mail@mail.pl", "Zadania", $email,
  54. $importance . "From: mail@mail.pl\n");
  55.  
  56. }
  57.  
  58. echo mysql_query("commit")?'':(mysql_error() . "\n");
  59.  
  60. ?>
krzysztof_kf
Dodać zaraz po połączeniu z bazą danych sposób kodowania polskich znaków .

  1. mysql_query('SET NAMES "utf8"');



Lub z tego skorzystaj

http://forum.php.pl/Wyszukiwarka.html?cx=p...;sa=Szukaj#1168
enimatto
Pokombinowalem i mam cos takiego:

  1. <?php
  2. $user="test";
  3. $password="test";
  4. $database="test";
  5. mysql_connect('localhost',$user,$password);
  6.  
  7. mysql_query('SET NAMES "utf8"');
  8.  
  9. mysql_select_db($database) or die( "Unable to select database");
  10. #echo mysql_query("SET AUTOCOMMIT=0")?'':(mysql_error() . "\n");
  11. #echo mysql_query("START TRANSACTION")?'':(mysql_error() . "\n");
  12.  
  13. $query = "
  14. SELECT frk_item.title,
  15. frk_item.deadlineDate,
  16. CASE
  17. WHEN (deadlineDate <= date_add(now(), INTERVAL 5 day) )
  18. THEN 'critical'
  19. ELSE 'coming due'
  20. END critical
  21. FROM frk_item,
  22. frk_member
  23. WHERE 1 = 1
  24. AND deadlineDate <= date_add(now(), INTERVAL 10 day)
  25. AND frk_item.memberId = frk_member.memberId
  26. AND frk_member.email = 'mail@mail.pl'
  27. ORDER BY deadlineDate;";
  28.  
  29. $result = mysql_query($query);
  30. if (!$result)
  31. {
  32. $errors[] = "mysql query failed: " . mysql_error();
  33. $errors[] = $query;
  34. # echo "mysql query failed: " . mysql_error() . "\n";
  35. }
  36. else
  37. {
  38.  
  39.  
  40. $to = "mail@mail.pl";
  41.  
  42. $subject = "Lista zadań";
  43.  
  44. $message = $message . '<html>'.
  45. '<head>'.
  46. '<style type="text/css">'.
  47. '#red {color:red;}'.
  48. '</style>'.
  49. '</head>'.
  50. '<body>'.
  51. '<p id="red">Lista zadań:&nbsp;&nbsp;'.'</p>'.
  52. '</body>'.
  53. '</html>';
  54. $importance = '';
  55.  
  56. while ($row = mysql_fetch_assoc($result))
  57. {
  58. if ($row['critical'] == 'critical')
  59. {
  60. $importance = "Importance: High\n";
  61.  
  62. }
  63.  
  64. $message = $message . $row['deadlineDate'] . ' - ' . $row['title'] . "\n";
  65. }
  66.  
  67. $headers = "MIME-Version: 1.0\r\n";
  68. $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  69.  
  70. mail ( $to, $subject, $message, $headers );
  71.  
  72. }
  73.  
  74. echo mysql_query("commit")?'':(mysql_error() . "\n");
  75.  
  76. ?>

Z tym powyzszym skryptem mam polskie znaki, ale bez wyników z bazy, bo odpowiada za to parametr: $importance

Jak go probuje dodac, czyli:
  1. mail ( $to, $subject, $message, $importance, $headers );

email w ogole nie dochodzi.

Z kolei wiadomo ze jak nie dodam $headers, to nici z polskich znakow.
Utknalem.... jak to przekombinowac?
krzysztof_kf
zmień na


  1.  
  2. @mail("adres@domena.pl","Wiadomosc ze strony WWW","$to","$subject","$message","$importance","$headers");
enimatto
Zamienilem i dalej glucho, email milczy.
Bez '@' z przodu tez probowalem, i mamy wtedy: Warning: mail() expects at most 5 parameters, 7 given in...
sad.gif Cos tu sie gryzie ale co?
krzysztof_kf
Hmmm robisz to na localhost ? masz skonfigurowanego klienta pocztowego .
enimatto
Tak, na localhost. Klient skonfigurowany poprawnie, bo jak tylko wyrzuce $headers i dam za to "$importance", to dane dochodza - tylko bez poprawnego kodowania. Jak z kolei zrobie na odwrot, to email dochodzi z polskimi znakami - ale bez danych z bazy. A jak dam wszystkie 5 elementow: mail ( $to, $subject, $message, $importance, $headers ); to na skrzynke w ogole nic dochodzi.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.