Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] formularz na mail dla kilku adresów
Forum PHP.pl > Forum > Przedszkole
cybul7
Witam.
W temacie PHP dopiero raczkuje, mam następujący problem.
Robię formularz, który będzie działał jako jeden z artykułów w joomli.
Chodzi o formularz w którym odwiedzający wypełni sobie kilka pól + wybierze z checkboxa adresata maila, warunek jest taki, że może wybrać np 2 checkboxy, i wtedy mail musi dotrzeć do dwóch odbiorców.

Sam mechanizm wysyłania działa, ponieważ udało mi się wykonać wybór adresata za pomocą rozwijanej listy, ale tam niestety nie wybierzemy dowolnej ilości odbiorców.
Nie mam pomysłu jak wykonać przekazanie do funkcji @mail ma wykonać się kilka razy dla kilku różnych adresatów.
Zapewne jakieś wywołanie w pętli, czy coś w tym rodzaju. Proszę o pomoc, dzięki.

  1. <?php
  2. if (empty($_POST['submit'])) {
  3. echo "<table border=\"0\"><form method=\"post\">
  4.  
  5. <b>Wybierz adresata: </b>
  6.  
  7. "; ?>
  8.  
  9.  
  10. <tr><?php echo "
  11.  
  12. <td width='25%'><input type=checkbox name=adresat1 value=\"email1@domena1.pl\"></td>
  13. <td width='25%'>&nbsp;Adresat1</td>
  14. <td width='25%'><input type=checkbox name=adresat2 value=\"email2@domena2.pl\"></td>
  15. <td width='25%'>&nbsp;Adresat2</td>
  16. <td width='25%'><input type=checkbox name=adresat3 value=\"email3@domena3.pl\"></td>
  17. <td width='25%'>&nbsp;Adresat3</td>
  18.  
  19. </tr>
  20.  
  21. "; ?>
  22.  
  23.  
  24. <td><b>Twoje dane:</b></td><td><?php echo "<span style=COLOR:red>* pola obowiązkowe</span>"; ?><?php
  25. echo "</td>
  26.  
  27.  
  28.  
  29.  
  30. <tr>
  31. <td>imię i nazwisko</td>
  32. <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  33. echo "</td>
  34.  
  35. </tr>
  36.  
  37.  
  38. <tr>
  39. <td>nazwa firmy</td>
  40. <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  41.  
  42. </tr>
  43.  
  44. <tr>
  45. <td>miejscowość</td>
  46. <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  47. echo "</td>
  48. </tr>
  49.  
  50.  
  51. <tr>
  52. <td>e-mail</td>
  53. <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  54. echo "</td>
  55. </tr>
  56.  
  57. <tr>
  58. <td>nr telefonu</td>
  59. <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  60. echo "</td>
  61. </tr>
  62.  
  63.  
  64. <tr>
  65. <td>fax</td>
  66. <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  67. </tr>
  68.  
  69.  
  70. <tr>
  71. <td>&nbsp;</td>
  72. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  73. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  74. </tr>
  75. </table>";
  76. }
  77.  
  78. elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu'])) {
  79.  
  80.  
  81. $message = "Nadesłał: $_POST[imie_nazwisko]\nFirma: $_POST[nazwa_firmy]\nMiejscowość: $_POST[miejscowosc]\nE-mail: $_POST[email]\nNumer telefonu: $_POST[numer_telefonu]\nFax: $_POST[fax]";
  82.  
  83.  
  84. $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';
  85.  
  86.  
  87. @mail($_POST['adresat'],"Formularz","$message","$header")
  88. or die('Nie udało się wysłać wiadomości'); // wyświetlenie komunikatu w przypadku powodzenia
  89. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie! Dziękujemy.</strong></div>";
  90. }
  91.  
  92. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  93.  
  94. ?>
lukaszgolder
W przypadku checkboxów zrobiłbym mniej więcej tak:

1) Checkboxy w postaci: name="mails[0]" value="adres@email.pl"
2) W PHP
  1. $mails = $_POST['mails'];

3)
  1. foreach($mails as $mail) {
  2. // tutaj wysyłasz maila
  3. // adres email adresata zawiera się w zmiennej $mail
  4. }
cybul7
Niestety ale to rozwiązanie nie wysyła maili.
W którym miejscu popełniam błąd?

  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit'])) {
  4. // wyświetlamy formularz
  5. echo "<table border=\"0\"><form method=\"post\">
  6.  
  7. <td><b>Twoje dane:</b></td><td>"; ?><?php echo "<span style=COLOR:red>* pola obowiązkowe</span>"; ?><?php
  8.  
  9. $mails = $_POST['mails'];
  10. echo "</td>
  11.  
  12. <tr>"; ?>
  13. <td width='25%'><input type=checkbox name="mails[0]" value="m@domena.pl"></td>
  14. <td width='25%'>&nbsp;Dział handlowy</td>
  15. <td width='25%'><input type=checkbox name="mails[0]" value="mp@domena.pl"></td>
  16. <td width='25%'>&nbsp;Serwis</td>
  17. </tr>
  18.  
  19. <?php
  20.  
  21.  
  22. <tr>
  23. <td>imię i nazwisko</td>
  24. <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  25. echo "</td>
  26.  
  27. </tr>
  28.  
  29.  
  30. <tr>
  31. <td>nazwa firmy</td>
  32. <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  33.  
  34. </tr>
  35.  
  36. <tr>
  37. <td>miejscowość</td>
  38. <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  39. echo "</td>
  40. </tr>
  41.  
  42.  
  43. <tr>
  44. <td>e-mail</td>
  45. <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  46. echo "</td>
  47. </tr>
  48.  
  49. <tr>
  50. <td>nr telefonu</td>
  51. <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  52. echo "</td>
  53. </tr>
  54.  
  55.  
  56. <tr>
  57. <td>fax</td>
  58. <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  59. </tr>
  60.  
  61.  
  62. <tr>
  63. <td>&nbsp;</td>
  64. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  65. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  66. </tr>
  67. </table>";
  68. }
  69. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  70. elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu'])) {
  71. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  72.  
  73.  
  74. // zmienna $message zawiera treść wiadomości
  75. $message = "Nadesłał: $_POST[imie_nazwisko]\nFirma: $_POST[nazwa_firmy]\nMiejscowość: $_POST[miejscowosc]\nE-mail: $_POST[email]\nNumer telefonu: $_POST[numer_telefonu]\nFax: $_POST[fax]";
  76.  
  77.  
  78.  
  79. // zmienna $header zawiera przede wszystkim adres zwrotny
  80.  
  81.  
  82. $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';
  83.  
  84.  
  85.  
  86.  
  87. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  88. foreach($mails as $mail){
  89. @mail("$mail","Formularz serwisowy","$message","$header")
  90. or die('Nie udało się wysłać wiadomości');
  91. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie! Dziękujemy.</strong></div>";
  92. }}
  93. // lub w przypadku nie wypełnienia formularza do końca
  94. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  95.  
  96. ?>



A może inne rozwiązanie, które działa.
Jako parametr "do" wpisać:

  1. $to = 'aidan@example.com' . ', '; // zwróćmy uwagę na przecinek
  2. $to .= 'wez@example.com';


Tylko jak w tym przypadku przekazać w miejsce aidan@example.com jakieś value z danego checkboxa.
I czy jeśli parametr będzie pusty tzn, nie zaznaczymy checkboxa to czy dla pozostałych mail się wyśle?
Burned
  1. <td width='25%'><input type=checkbox name="mails[]" value="m@domena.pl"></td>
  2. <td width='25%'><input type=checkbox name="mails[]" value="mp@domena.pl"></td>
cybul7
Nadal nie działa.
W ogóle po zmianie, jak i przed po kliknięciu wyślij otwiera się nowa strona (tak jak powinna), ale bez komunikatu "Wiadomość została wysłana poprawnie! Dziękujemy.".
Burned
Zobacz co masz w $mails - możliwe, że nic i powinieneś się odwoływać do tej zmiennej jako $_POST['mails']
Volume
Strasznie "brudny" i nieczytelny masz ten kod

W ogole w zlym miejscu zapodales $mails = $_POST['mails']; - to wysylasz postem wiec powinienes to zdeklarowac tam gdzie pola zalozyles ze nie sa puste....

Troche po swojemu poukladalem Ci, u mnie teraz dziala...
  1. <?php
  2. if (empty($_POST['submit']))
  3. {
  4. echo "<table border=\"0\"><form method=\"post\"><td><b>Twoje dane:</b></td><td>";
  5. echo "<span style=COLOR:red>* pola obowizkowe</span>";
  6. echo '</td>
  7. <tr>
  8. <td width="25%"><input type=checkbox name="mails[]" value="m@domena.pl"></td>
  9. <td width="25%"> DziaB handlowy</td>
  10. <td width="25%"><input type=checkbox name="mails[]" value="mp@domena.pl"></td>
  11. <td width="25%"> Serwis</td>
  12. </tr>';
  13.  
  14. echo "
  15. <tr>
  16. <td>imi i nazwisko</td>
  17. <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  18. echo "</td></tr><tr>
  19. <td>nazwa firmy</td>
  20. <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  21. </tr>
  22. <tr>
  23. <td>miejscowo[</td>
  24. <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  25. echo "</td>
  26. </tr>
  27. <tr>
  28. <td>e-mail</td>
  29. <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  30. echo "</td>
  31. </tr>
  32. <tr>
  33. <td>nr telefonu</td>
  34. <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  35. echo "</td>
  36. </tr>
  37. <tr>
  38. <td>fax</td>
  39. <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  40. </tr>
  41. <tr>
  42. <td> </td>
  43. <td><input type=\"submit\" name=\"submit\" value=\"Wy[lij\"
  44. <input type=\"reset\" value=\"Wyczy[\"></td></form>
  45. </tr>
  46. </table>";
  47. }
  48.  
  49. elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu']))
  50. {
  51. $mails = $_POST['mails'];
  52. $message = 'NadesBaB: '.$_POST['imie_nazwisko']."\nFirma: ".$_POST['nazwa_firmy']."\nMiejscowo[: ".$_POST['miejscowosc']."\nE-mail: ".$_POST['email']."\nNumer telefonu: ".$_POST['numer_telefonu']."\nFax: ".$_POST['fax'];
  53. $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';
  54. foreach($mails as $mail)
  55. {
  56. @mail("$mail","Formularz serwisowy","$message","$header")
  57. or die('Nie udaBo si wysBa wiadomo[ci');
  58. echo "Wiadomo[ zostaBa wysBana poprawnie! Dzikujemy.";
  59. }
  60. }
  61. else echo "WypeBnij wszystkie pola formularza!";
  62.  
  63. ?>


ps. sorki za kodowanie
cybul7
Dzięki właśnie miałem się zapytać czy to jest we właściwym miejscu.
Kod działa poprawnie, tzn wyświetlają się komunikaty o prawidłowym wysłaniu itd.
Niestety na skrzynkę nic nie otrzymuje.
Volume
  1. <td width="25%"><input type=checkbox name="mails[]" value="m@domena.pl"></td>
  2. <td width="25%"> DziaB handlowy</td>
  3. <td width="25%"><input type=checkbox name="mails[]" value="mp@domena.pl"></td>
zobacz czy nie popelniles bledu w mailach, oczywiscie masz dostepna funkcje mail()? U mnie kod dziala - wyslal mi maile..
cybul7
Niestety nie działa :/.
Maile są dobrze wpisane.
Tak mail() działa, ponieważ wysyłanie na maila wpisanego na sztywno zrobiłem i działa.
Volume
A oczywiscie zaznaczasz checkboxy przed wyslaniem?
Hmm dziwne powinno dzialac, u mnie jak mowilem dziala, moze masz troche inaczej skonfigurowany serwer i cos mu nie pasi z tego kodu...

Mozesz jezcze o ile tego nie zrobiles przekopiowac moj kod i jeszcze raz sprawdzic. Jak nic nie pomoze daj znac moze ktos wpadnie co moze byc nie tak....
cybul7
Tak zaznaczam.

Jak zaznaczę 2 check boxy to na końcu wyświetlają się dwa komunikaty, jak 1 to jeden komunikat, więc rozpoznaje ile razy ma zrobić pętlę foreach, ale niestety nie wysyła.
Spróbuje wpisać teraz na sztywno jeden adres i sprawdzę czy dostane 2 maile.


EDIT:

W całym kodzie nadesłanym przez Ciebie zmieniłem tylko w @mail na sztywno adres. Następnie zaznaczyłem 2 checkboxy i otrzymałem dwa maile.
Wychodzi na to, że po prostu wartości value nie są przekazywane do $mail. Jak to naprawić?

  1. foreach($mails as $mail)
  2. {
  3. @mail("adres@mail.pl","Formularz serwisowy","$message","$header")
  4. or die('Nie udaBo si wysBa wiadomo[ci');
  5. echo "Wiadomo[ zostaBa wysBana poprawnie! Dzikujemy.";
  6. }



Może coś nie tak jest z "" i '', które używasz dla echo w tym miejscu:
  1. #
  2. echo '</td>
  3. #
  4. <tr>
  5. #
  6. <td width="25%"><input type=checkbox name="mails[]" value="m@domena.pl"></td>
  7. #
  8. <td width="25%"> DziaB handlowy</td>
  9. #
  10. <td width="25%"><input type=checkbox name="mails[]" value="mp@domena.pl"></td>
  11. #
  12. <td width="25%"> Serwis</td>
  13. #
  14. </tr>';




============================


EDIT2:

Już wiem prawdopodobnie gdzie jest błąd.
W funkcji mail(), parametr z adresem musi być pomiędzy pojedynczymi cudzysłowami np. 'adres@mail.pl', jeśli jest bez '' lub pomiędzy "" to maila nie wyśle.

Przerobiłem troszkę kod w sposób następujący:

  1. <?php
  2. if (empty($_POST['submit']))
  3. {
  4. echo "<table border=\"0\"><form method=\"post\"><td><b>Twoje dane:</b></td><td>";
  5. echo "<span style=COLOR:red>* pola obowizkowe</span>";
  6. echo '</td>
  7. <tr>
  8. <td width="25%"><input type=checkbox name="mail[]" value="adres1@wp.pl"></td>
  9. <td width="25%"> DziaB handlowy</td>
  10. <td width="25%"><input type=checkbox name="mail[]" value="adres2@wp.pl"></td>
  11. <td width="25%"> Serwis</td>
  12. </tr>';
  13.  
  14. echo "
  15. <tr>
  16. <td>imi i nazwisko</td>
  17. <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  18. echo "</td></tr><tr>
  19. <td>nazwa firmy</td>
  20. <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  21. </tr>
  22. <tr>
  23. <td>miejscowo[</td>
  24. <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  25. echo "</td>
  26. </tr>
  27. <tr>
  28. <td>e-mail</td>
  29. <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  30. echo "</td>
  31. </tr>
  32. <tr>
  33. <td>nr telefonu</td>
  34. <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  35. echo "</td>
  36. </tr>
  37. <tr>
  38. <td>fax</td>
  39. <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  40. </tr>
  41. <tr>
  42. <td> </td>
  43. <td><input type=\"submit\" name=\"submit\" value=\"Wy[lij\">
  44. <input type=\"reset\" value=\"Wyczy[\"></td></form>
  45. </tr>
  46. </table>";
  47. }
  48.  
  49. elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu']))
  50. {
  51. $mails = $_POST['mails'];
  52. $message = 'NadesBaB: '.$_POST['imie_nazwisko']."\nFirma: ".$_POST['nazwa_firmy']."\nMiejscowo[: ".$_POST['miejscowosc']."\nE-mail: ".$_POST['email']."\nNumer telefonu: ".$_POST['numer_telefonu']."\nFax: ".$_POST['fax'];
  53. $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';
  54.  
  55.  
  56.  
  57. $to= $mails[0] . ', ';
  58. $to .= $mails[1];
  59.  
  60.  
  61.  
  62.  
  63. @mail("$to","Formularz serwisowy","$message","$header")
  64. or die('Nie udaBo si wysBa wiadomo[ci');
  65. echo "Wiadomo[ zostaBa wysBana poprawnie! Dzikujemy.";
  66.  
  67.  
  68. }
  69. else echo "WypeBnij wszystkie pola formularza!";
  70.  
  71. ?>


Niestety w ten sposób do $to i $to . dostarczane są maile bez pojedynczego cudzysłowu.
Jeśli zrobię tak:
  1. $to= '$mails[0]' . ', ';
  2. $to .= '$mails[1]';


To maile jako zmienne nie są wstawiane.
Jak zrobić, aby w końcowym rezultacie $to miało postać $to = 'adres1@wp.pl' a nie $to = adres1@wp.pl ?


Volume
A mozesz podac na jakim hostingu to testujesz?
cybul7
Na swoim prywatnym.

Ale już sobie poradziłem.

Błąd był taki, że przeglądarka wycinała adres podczas przesyłania i docelowo do wysyłki trafiał komunikat "Musisz włączyć obsługę java script, ze względu na bezpieczeństwo i wycinanie adresów przez roboty itd".

Rozwiązanie polegało na stworzeniu tablicy z adresami.
Następnie w checkbox ustawienie value na 0 , 1, 2 itd.
Oraz w parametrze $do w funkcji mail(), wywoływanie tablicy: $adresy[$i], gdzie i jest wartością value z checkboxow.
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.