Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] 3 formularze mailowe na jednej stronie.
Forum PHP.pl > Forum > Przedszkole
lee2
Cześć,

ma problem i chyba samodzielne jego rozwiązanie trochę mnie przerasta (ale walczę dalej). Sprawa wygląda tak:

posiadam index.php w którym przy pomocy jQuery zrobiony jest obszar podzielony na zakładki. efekt końcowy wyświetlany jest jako strona i ładny obszar z zakładkami tematycznymi, ale jest to ciągle jedna strona i ta sama strona. Do strony includowane są 3 pliki form1.php, form2.php, form3.php i w efekcie końcowym są wyświetlane w osobnych zakładkach, ale ciągle jest to jedna strona.

Jeżeli includuję tylko jeden formularz to nie ma problemu wszystko działa, komunikaty o błędach i powodzeniu są wyświetlane prawidłowo.
> jeżeli zmieniam nazwę odpowiednio w kolejnych formach zmiennych submit na submit1 i form1 na form2 to teoretycznie formularz wysyła maila ale nie wyświetla informacji o tym że mail wysłany. Jeżeli zmieniam nazwy wszystkich zmiennych itd odpowiednio dla formularza w którym się znajdują czyli z 1 na 2 lub 3 (submit2, submit3 itd.)

oto kod którego użyłam pierwotnie...

  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit'])) {
  4. // wyświetlamy formularz
  5. echo "<table border=\"0\"><form name=\"form1\" method=\"post\">
  6. <tr>
  7. <td>Treść wiadomości</td>
  8. <td><textarea name=\"tresc\" style=\"width: 250px; height: 100px\"></textarea></td>
  9. </tr>
  10. <tr>
  11. <td>Imię, nazwisko lub nick</td>
  12. <td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td>
  13. </tr>
  14. <tr>
  15. <td>Adres e-mail</td>
  16. <td><input type=\"text\" name=\"email\" style=\"width: 250px\"></td>
  17. </tr>
  18. <tr>
  19. <td>&nbsp;</td>
  20. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  21. <input type=\"reset\" value=\"Od nowa\"></td></form>
  22. </tr>
  23. </table>";
  24. }
  25. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  26. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  27. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  28. // zmienna $message zawiera treść wiadomości
  29. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]";
  30. // zmienna $header zawiera przede wszystkim adres zwrotny
  31. $header = "From: $_POST[imie] <$_POST[email]>";
  32. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  33. @mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header")
  34. or die('Nie udało się wysłać wiadomości');
  35. // wyświetlenie komunikatu w przypadku powodzenia
  36. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  37. }
  38. // lub w przypadku nie wypełnienia formularza do końca
  39. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  40.  
  41. ?>


nie mam pomysłu jak zmodyfikować go tak aby po użyciu w odpowiednich plikach form1 form2 form3.php i zaincludowaniu do indexu wszystko najnormalniej w świecie zadziałało...

Pozdrawiam i proszę o pomoc... wstydnis.gif
Ghost_78
Witaj,
zacznij od zamiany miejsca tagu <form>

ty masz:
  1. <table border=\"0\"><form name=\"form1\" method=\"post\">

a powinno byc
  1. <form name=\"form1\" method=\"post\"><table border=\"0\">

to samo ze znacznikem zamykajacym </form>
powinien byc za </table>

poza tym wydaje mi sie ze dobre rozwiazanie zaproponowales zeby nazywac submit1, submit2, submit3
musisz tylko zmienic potem:
  1. if (empty($_POST['submit']))

na
  1. if (empty($_POST['submit1']))


itp
lee2
przerobiłam kod na taki:

  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit1'])) {
  4. // wyświetlamy formularz
  5.  
  6. echo "<form id=\"form1\" name=\"form1\" method=\"post\">
  7. <label>Imię i nazwisko:<br/>
  8. <input name=\"imie_nazwisko\" type=\"text\" size=\"35\" /></label><br /><br />
  9. <label>Adres e-mail:<br/>
  10. <input name=\"email\" type=\"text\" size=\"35\" /></label><br />
  11.  
  12. <p>Problem dotyczy:<br />
  13. <label>
  14. <select name=\"select\">
  15. <option value=\"\">Wybierz kategorię</option>
  16. <option value=\"1\">lalamido</option>
  17. <option value=\"2\">pkp</option>
  18. <option value=\"3\">pks</option>
  19. <option value=\"4\">awf</option>
  20. <option value=\"5\">cba</option>
  21. <option value=\"6\">abc</option>
  22. </select>
  23. <br/>
  24. </p>
  25. <p>Inne: <br/><input name=\"inne\" type=\"text\" size=\"35\" /><br /></p>
  26. <p>Tutuł wiadomości: <br/><input name=\"temat\" type=\"text\" size=\"73\"/><br /></p>
  27. <p>Dokładny opis problemu:<br/>
  28. <label>
  29. <textarea name=\"opis\" cols=\"55\" rows=\"8\"></textarea>
  30. </label>
  31. <p>
  32. <label>
  33. <input type=\"submit\" name=\"submit1\" value=\"Wyslij zgłoszenie\" />
  34. </label>
  35. <label>
  36. <input type=\"reset\" name=\"wyczysc\" id=\"wyczysc\" value=\"Wyczyść\" />
  37. </label>
  38. </p>
  39. </p>
  40. </form>";
  41. }
  42. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  43. elseif (!empty($_POST['opis']) && !empty($_POST['imie_nazwisko']) && !empty($_POST['email'])) {
  44. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  45. // zmienna $message zawiera treść wiadomości
  46. $message = "Temat wiadomości: $_POST[temat]\nProblem dotyczy:$_POST[select]\n$_POST[inne]\nTreść wiadomości:\n----------------------------------------------------------------------------------------------\n$_POST[opis]\n\nWysłał: $_POST[imie_nazwisko]\ne-mail: $_POST[email]";
  47. // zmienna $header zawiera przede wszystkim adres zwrotny
  48. $header = "From: $_POST[imie_nazwisko] <$_POST[email]>";
  49. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  50. @mail("nazwa@domena.com","problem zglosił form1","$message","$header")
  51. or die('Nie udało się wysłać wiadomości<br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>');
  52. // wyświetlenie komunikatu w przypadku powodzenia
  53. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div><br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>";
  54. }
  55. // lub w przypadku nie wypełnienia formularza do końca
  56. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span><br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>";
  57. ?>


niestety jeżeli zmienię tylko submity na odpowiednio 1,2,3 faktycznie wysyła maila ale nie wyświetla potwierdzenia (wysyłam z form3 a przychodzi jakby był wysłany z form1). Jeżeli zmienię form i submit na odpowiednio 1,2,3 to wysyła (przykładowo) maila z form 3 dochodzi jakby był wysłany z form1 w dodatku po odświeżeniu strony i przejścu do form3 wyświetla komunikat, że mail został wysłany a zamiast oczekiwanego formularza wyświetla sie info że mail został juz wysłany i tak w koło Macieju.........
Ghost_78
a czy w odpowiednich plikach includowanych podajesz if (empty($_POST['submit1']) if (empty($_POST['submit2']) if (empty($_POST['submit3'])
lee2
kod który podałem to dokładna zawartość pliku form1.php, który jest includowany do index.php. Analogicznie jest z plikami form2 i form3.php

dla form2.php
  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit2'])) {
  4. // wyświetlamy formularz



dla form3.php
  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit3'])) {
  4. // wyświetlamy formularz


i dalej dzieją się te cuda...
smagul
Chodzi o to, że wysyłasz form z zakładki 3 a po przeładowaniu strony aktywna jest zakładka 1?
musisz ustawić z poziomu php która zakładka ma być aktywna po przesłaniu forma, wykorzystaj do tego zmienną typu hidden lub nazwę submita.

Rozwiązanie lepsze:
skoro już masz jquery, to wykorzystaj ajax. Po kliknięciu w submit wysyłaj dane z forma do pliku form1(2)(3).php. a na podstawie zwróconej zawartości decyduj co pokażesz userowi. dodatkowym plusem jest to, że user nie musi przeładować strony. Validację pól forma na poziomie jquery i te pliki z formami wystarczy ze będą ci zwracały 1 dla sukcesu i 0 dla porażki.
Ghost_78
pozamieniaj jeszcze
  1. @mail("nazwa@domena.com","problem zglosił form1","$message","$header")
  2. or die('Nie udało się wysłać wiadomości<br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>');
  3. // wyświetlenie komunikatu w przypadku powodzenia
  4. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div><br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>";

na to:
  1. if (!@mail("nazwa@domena.com","problem zglosił form1","$message","$header")){
  2. echo('Nie udało się wysłać wiadomości<br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>');
  3. }else{
  4. // wyświetlenie komunikatu w przypadku powodzenia
  5. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div><br /><div align=\"center\"><a href=\"index.php\"> Powrót do formularza.</a></div>";
  6. }


bo to tez bedzie prowdowalo problemy

pokaz jeszcze w razie czego Twoj index.php
lee2
Cytat(smagul @ 4.11.2010, 12:13:28 ) *
Chodzi o to, że wysyłasz form z zakładki 3 a po przeładowaniu strony aktywna jest zakładka 1?


miedzy innymi tak smile.gif

index w tym przypadku wygląda tak:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <style type="text/css">
  6.  
  7. {tu jest css}
  8.  
  9. <script type="text/javascript"
  10. src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
  11. <script type="text/javascript">
  12. $(document).ready(function() {
  13. //Default Action
  14. $(".tab_content").hide(); //Hide all content
  15. $("ul.tabs li:first").addClass("active").show(); //Activate first tab
  16. $(".tab_content:first").show(); //Show first tab content
  17.  
  18. //On Click Event
  19. $("ul.tabs li").click(function() {
  20. $("ul.tabs li").removeClass("active"); //Remove any "active" class
  21. $(this).addClass("active"); //Add "active" class to selected tab
  22. $(".tab_content").hide(); //Hide all tab content
  23. var activeTab = $(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
  24. $(activeTab).fadeIn(); //Fade in the active content
  25. return false;
  26. });
  27.  
  28. });
  29. </head>
  30.  
  31.  
  32. <div class="container">
  33.  
  34. <h1>Helpdeska beta1</h1>
  35. <ul class="tabs">
  36. <li><a href="#tab1">tab1</a></li>
  37. <li><a href="#tab2">tab2</a></li>
  38. <li><a href="#tab3">tab3</a></li>
  39. <li><a href="#tab4">faq</a></li>
  40. </ul>
  41. <div class="tab_container">
  42. <div id="tab1" class="tab_content">
  43. <h2>includuj form1</h2>
  44.  
  45. <?php include 'form1.php' ?>
  46.  
  47. </div>
  48. <div id="tab2" class="tab_content">
  49. <h2>includuj form2</h2>
  50.  
  51. <?php include 'form2.php' ?>
  52.  
  53. </div>
  54. <div id="tab3" class="tab_content">
  55. <h2>includuj form3</h2>
  56.  
  57. <?php include 'form3.php' ?>
  58.  
  59. </div>
  60. <div id="tab4" class="tab_content">
  61. <h2>faq</h2>
  62.  
  63. </div>
  64. </div>
  65. </div>
  66. <div style="clear: both; display: block; padding: 10px 0; text-align:center;"></div>
  67. </body>
  68. </html>


Cytat(smagul @ 4.11.2010, 12:13:28 ) *
musisz ustawić z poziomu php która zakładka ma być aktywna po przesłaniu forma, wykorzystaj do tego zmienną typu hidden lub nazwę submita.


nie bardzo rozumiem jakby się miało to odbyć w tym przypadku, ale postaram się uzupełnić swoja wiedzę...
smagul
usuń linię 18
  1. $("ul.tabs li:first").addClass("active").show(); //Activate first tab


w divkach z takimi treściami
  1. <div id="tab1" class="tab_content">


zrób coś takiego
  1. <?php
  2. if(isset($_POST['submitX'])
  3. {
  4. echo '<div id="tab1" class="tab_content">';
  5. }
  6. else
  7. {
  8. echo '<div id="tab1" class="active">';
  9. }
  10. ?>


gdzie X to numer forma

i jeszcze przypadek gdy nie został wysłany form czyli w zakładce domyślnej

  1. <?php
  2. if(isset($_POST['submitX'] || !count($_POST))
  3. {
  4. echo '<div id="tab1" class="tab_content">';
  5. }
  6. else
  7. {
  8. echo '<div id="tab1" class="active">';
  9. }
  10. ?>



edit: warunki odwrotnie zrobiłem, tam gdzie 'active' powinno być 'tab_content' i odwrotnie smile.gif
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.