Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czyszczenie formularza po wysłaniu i sprawdzeniu
agapart
post 6.04.2010, 13:19:36
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.04.2010

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


Witam

Zrobiłam formularz kontaktowy na stronę. Skorzystałam z porad z jakiegoś forum. Wszystko działa. Sprawdza on czy wszystkie dane zostały wpisane. Jeśli nie zostały, to wyświetla komunikat, żeby uzupełnić dane. Jeśli wszystko zostało wypełnione, to wysyła maila.
Pierwsze:
Po wysłaniu maila pojawia się pusta strona, do której mogę ewentualnie za pomocą echo podać napis typu Dziękujemy za wysłanie maila itp.
Ja chciałabym, żeby podziękowanie za wysłanie maila pojawiało się np. zamiast napisu *Pola wymagane. Bądź gdzieś wyżej nad formularzem.

Drugie:
Chciałabym, żeby po wysłaniu maila, gdy już wszystkie dane są sprawdzone oraz po odśwież, czyściło wypełniony formularz. Bo gdy robię odśwież, to wpisane dane zostają. A nie chcę, żeby ktoś złośliwy przysyłał mi 1000 maili dziennie winksmiley.jpg Mam teraz na

onSubmit="return validate.check(this)" Czyli zawsze sprawdza gdy są błędy.

Gdy dodam do tego:

"nazwaformy.submit();nazwaformy.reset();return false;" to wtedy najpierw sprawdzi mi czy dane są wpisane, jeśli nie to wyskoczy komunikat, że nie. Ale gdy na komunikacie z błędem kliknę OK, to i tak wysyła. Nie sprawdza wtedy tych pól czy są wypełnione.

Nie znam się za bardzo na php. Szukałam po różnych forach, ale nie mogę znaleźć.


Mój formularz kontaktowy:
  1. <form action="wyslij.php" method="post" name="formcontact" id="formcontact" onSubmit="return validate.check(this)">
  2. <table width="310"><tr><td colspan="0" align="left" valign="top"><table width="310" >
  3. <tr>
  4. <td colspan="0" align="left" valign="top"><p style="text-align:left"><span class="style48">* wymagane</span></p></td>
  5. </tr>
  6. <tr>
  7. <td width="80" valign="top" ><label for="Nazwa">Nazwa*</label></td>
  8. <td width="230" valign="top" ><input type="text" name="Nazwa" id="Nazwa" maxlength="50" style="width:230px" /></td>
  9. </tr>
  10. <tr>
  11. <td valign="top" ><label for="Email">E-mai*</label></td>
  12. <td valign="top" ><input type="text" name="Email" id="Email" maxlength="50" style="width:230px" /></td>
  13. </tr>
  14. <tr>
  15. <td valign="top" ><label for="Temat">Temat</label></td>
  16. <td valign="top" ><input type="text" name="Temat" id="Temat" maxlength="50" style="width:230px" /></td>
  17. </tr>
  18. <tr>
  19. <td width="80" valign="top" ><label for="Tresc">Treść*</label></td>
  20. <td valign="top" ><textarea style="width:230px;height:120px" name="Tresc" id="Tresc" maxlength="2000"></textarea></td>
  21. </tr>
  22. <tr>
  23. <td height="30" colspan="2" style="text-align:center"><span style="text-align:center"><span style="text-align:center"><span style="text-align:center">
  24. <label><span style="text-align:right"><span style="text-align:right"><span style="text-align:right"><span style="text-align:right">
  25. <input type="reset" name="Reset" id="button" value="WYCZYŚĆ" />
  26. </span></span></span></span></label>
  27. <input name="Submit" type="submit" value="WYŚLIJ" />
  28. </span></span></span></td>
  29. </tr>
  30. </table><p style="text-align:left"> </p>
  31. </td>
  32. </tr>
  33. </table>
  34. </form>


Mój plik wyslij.php
  1. <?php
  2.  
  3. $wiadomosc =
  4. "Imie: ".$_POST['Nazwa']."
  5.  
  6. e- mail: ".$_POST['Email']."
  7.  
  8. temat: ".$_POST['Temat']."
  9.  
  10. Tresc: ".$_POST['Tresc']." ";
  11.  
  12. $tematyka = "E-mail ze strony NAZWA STRONY ".$temat;
  13.  
  14. mail ("mail@wp.pl", $tematyka, $wiadomosc );
  15. ?>




moj plik do sprawdzania:
  1. function has_id(id){try{var tmp=document.getElementById(id).value;}catch(e){return false;}
  2. return true;}
  3. function has_name(nm){try{var tmp=cfrm.nm.type;}catch(e){return false;}
  4. return true;}
  5. function $$(id){if(!has_id(id)&&!has_name(id)){alert("Pole "+id+" nie jest wypelnione!\n Blad formularza.");return false;}
  6. if(has_id(id)){return document.getElementById(id).value;}else{return;}}
  7. function $val(id){return document.getElementById(id);}
  8. function trim(id){$val(id).value=$val(id).value.replace(/^\s+/,'').replace(/\s+$/,'');}
  9. var required={field:[],add:function(name,type,mess){this.field[this.field.length]=[n
  10. ame,type,mess];},out:function(){return this.field;},clear:function(){this.field=[];}};var validate={check:function(cform){var error_message='Prosimy uzupełnić pola:\n\n';var mess_part='';var to_focus='';var tmp=true;for(var i=0;i<required.field.length;i++){if(this.checkit(required.field[i][0],required.fiel
  11. d[i][1],cform)){}else{error_message=error_message+required.field[i][2]+' - pole jest blednie wypelnione.\n';if(has_id(required.field[i][0])&&to_focus.length===0){to_focus=required.field[i][0];}
  12. tmp=false;}}
  13. if(!tmp){alert(error_message);}
  14. if(to_focus.length>0){document.getElementById(to_focus).focus();}
  15. return tmp;},checkit:function(cvalue,ctype,cform){if(ctype=="NOT_EMPTY"){if(this.trim($$(cvalue)).length<1){return false;}else{return true;}}else if(ctype=="EMAIL"){exp=/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;if($$(cvalue).match(exp)==null){return false;}else{return true;}}},trim:function(s){if(s.length>0){return s.replace(/^\s+/,'').replace(/\s+$/,'');}else{return s;}}};



I jeszcze mały fragment w head:
  1. <script src="lite_validation.js"></script>
  2. <script>
  3. required.add('Nazwa','NOT_EMPTY','Nazwa');
  4. required.add('Email','EMAIL','Email');
  5. required.add('Tresc','NOT_EMPTY','Tresc')
  6. </script>



Z góry dziękuję za pomoc.

Pozdrawiam
Aga

Ten post edytował agapart 6.04.2010, 14:06:30
Go to the top of the page
+Quote Post
micha12344
post 6.04.2010, 13:46:36
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 16.01.2009
Skąd: lubelskie

Ostrzeżenie: (10%)
X----


ładniej i dogodniej ten kod wyglądał by gdyby był w odpowiednich znacznikach:)

Ten post edytował micha12344 6.04.2010, 13:47:15
Go to the top of the page
+Quote Post
blooregard
post 6.04.2010, 13:53:25
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




~agapart, proszę dodać BBCode.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Daiquiri
post 6.04.2010, 13:53:35
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Ad. "pierwsze"
To formularz przenosi Cię do innej podstrony (action="wyslij.php") - jeżeli chcesz na niej pozostać musisz zmienić parametr action na np. nazwę strony na której umieściłaś formularz smile.gif. Pamiętaj, że zawartość pliku wyslij.php musisz w takim układzie przenieść do pliku z formularzem, pamiętając o tym, że plik musi mieć rozszerzenie *php.

Ad. "drugie"
Po wysłaniu zmiennych musisz je "wyczyścić".

Ten post edytował Daiquiri 6.04.2010, 13:54:02
Go to the top of the page
+Quote Post
agapart
post 6.04.2010, 14:50:19
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.04.2010

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


Czyli plik nie może się nazywać kontakt.html tylko kontakt.php? Wtedy action będzie action=kontakt.php?
A ten kod z wyślij to gdzie wkleić w tym formularzu?

A te dane to jak wyczyścić po wysłaniu? Jak pisałam w on submit "nazwaformy.submit();nazwaformy.reset();return false;" to wtedy omijalo mi sprawdzanie czy pola sa wypelnione.

Ten post edytował agapart 6.04.2010, 14:57:17
Go to the top of the page
+Quote Post
Daiquiri
post 6.04.2010, 15:06:17
Post #6





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Jeżeli plik, w którym obecnie trzymasz np. formularz, nazywa się kontakt.html to aby "zadziałał" umieszczony w nim kod php - plik musi mieć rozszerzenie *php.
Go to the top of the page
+Quote Post
agapart
post 7.04.2010, 00:41:05
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.04.2010

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


Ok. Zmieniłam troszkę kod (znalezione na jakimś forum, troszkę przerobione). Wszystko działa w tym samym pliku kontakt.php. Gdy pola puste to wyświetla napis, że puste. Gdy wszystko ok to wysyła maila. Sprawdza też poprawność maila (nie czy istnieje adres mail, ale czy jest zbudowany z odpowiednich ciągów znaków - tyle wystarczy).

Problem jest natomiast , że po wysłaniu już, gdy jest napis "Twoja wiadomość została wysłana", to przy odświeżaniu strony, znowu wysyła maila. Jeśli ktoś odświeży mi stronę 50 razy, to dostanę 50 maili.


  1. <?php
  2.  
  3. if ((empty($_POST['tresc']) or empty($_POST['temat']) or empty($_POST['email'])) and !empty($_POST['submit'])) {
  4.  
  5. echo "<table border=\"0\" valign=\"top\"><form method=\"post\">
  6. <tr>
  7. <td>Temat:</td>
  8. <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  9. </tr>
  10. <tr>
  11. <td>E-mail:</td>
  12. <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  13. </tr>
  14. <tr>
  15. <td>Nazwisko:</td>
  16. <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  17. </tr>
  18. <tr>
  19. <td valign=\"top\">Wiadomość:</td>
  20. <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td>
  21. </tr>
  22. <tr>
  23. <td> </td>
  24. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  25. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  26. </tr>
  27. <tr>
  28. <td> </td>
  29. <td>";
  30.  
  31. echo "<span style=\"color: #CC99FF; text-align: center\">Wypełnij wszystkie pola formularza!</span>";
  32. echo "</td>
  33. </tr>
  34. </table>";
  35. }
  36. elseif (empty($_POST['tresc']) or empty($_POST['temat']) or empty($_POST['email']) and empty($_POST['submit'])) {
  37.  
  38. echo "<table border=\"0\" valign=\"top\"><form method=\"post\">
  39.  
  40. <tr>
  41. <td>Temat:</td>
  42. <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  43. </tr>
  44. <tr>
  45. <td>E-mail:</td>
  46. <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  47. </tr>
  48. <tr>
  49. <td>Nazwisko:</td>
  50. <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  51. </tr>
  52. <tr>
  53. <td valign=\"top\">Wiadomość:</td>
  54. <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td>
  55. </tr>
  56. <tr>
  57. <td> </td>
  58. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  59. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  60. </tr>
  61. </table>";
  62. }
  63.  
  64. #
  65. elseif(!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $_POST['email']))
  66. {
  67.  
  68. echo "<table border=\"0\" valign=\"top\"><form method=\"post\">
  69. <tr>
  70. <td>Temat:</td>
  71. <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  72. </tr>
  73. <tr>
  74. <td>E-mail:</td>
  75. <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  76. </tr>
  77. <tr>
  78. <td>Nazwisko:</td>
  79. <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  80. </tr>
  81. <tr>
  82. <td valign=\"top\">Wiadomość:</td>
  83. <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td>
  84. </tr>
  85. <tr>
  86. <td> </td>
  87. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  88. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  89. </tr>
  90. <tr>
  91. <td> </td>
  92. <td>";
  93.  
  94. echo "<span style=\"color: #CC99FF; text-align: center\">Podałeś zły adres email!</span>";
  95. echo "</td>
  96. </tr>
  97. </table>";
  98. }
  99.  
  100.  
  101.  
  102. elseif (!empty($_POST['tresc']) && !empty($_POST['temat']) && !empty($_POST['email'])) {
  103.  
  104. $message = "Temat: ".$_POST['temat']."
  105.  
  106. e- mail: ".$_POST['email']."
  107.  
  108. Nazwisko: ".$_POST['nick']."
  109.  
  110. Tresc: ".$_POST['tresc']." ";
  111.  
  112. $header = "From: $_POST[nick] <$_POST[email]>";
  113.  
  114. @mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header")
  115. or die('Nie udało się wysłać wiadomości');
  116.  
  117.  
  118. echo "<table border=\"0\" valign=\"top\"><form method=\"post\">
  119. <tr>
  120. <td>Temat:</td>
  121. <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  122. </tr>
  123. <tr>
  124. <td>E-mail:</td>
  125. <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  126. </tr>
  127. <tr>
  128. <td>Nazwisko:</td>
  129. <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td>
  130. </tr>
  131. <tr>
  132. <td valign=\"top\">Wiadomość:</td>
  133. <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td>
  134. </tr>
  135. <tr>
  136. <td> </td>
  137. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"
  138. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  139. </tr>
  140. <tr>
  141. <td> </td>
  142. <td>";
  143.  
  144. echo "<span style=\"color: #CC99FF; text-align: center\">Wiadomość została wysłana poprawnie!</span>";
  145. echo "</td>
  146. </tr>
  147. </table>";
  148.  
  149.  
  150. }
  151.  
  152.  
  153.  
  154. ?>






Co zmienić, żeby przy odświeżaniu nie wysyłało ponownie?

Ten post edytował agapart 7.04.2010, 10:44:19
Go to the top of the page
+Quote Post
toel
post 7.04.2010, 16:08:29
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

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


Pierwszy (gorszy ale prosty) proponowany przeze mnie sposób:

zmienił bym:

  1. @mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header")
  2. or die('Nie udało się wysłać wiadomości');


na

  1. if(mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header"))
  2. {
  3. header('location: [adres strony formularza]');
  4. }
  5. else
  6. {
  7. print('Nie udało się wysłać wiadomości');
  8. }


Ew. przekazanie jakiegoś parametru, który poinformuje, że można wyświetlić komunikat o wysłaniu.

To wyeliminuje problem odświeżania.




Drugi pomysł wymaga jakiejś bazy danych:
Jest to generowanie w polu hidden unikalnego klucza dla każdego wywołania formularza (np. md5 + mktime).
Przy wysyłaniu należy najpierw sprawdzić w bazie, czy taki klucz już jest:
a ) nie ma -> zapisujemy go do bazy i wysyłamy wiadomość
b ) jest -> nie podejmujesz akcji (nie wysyłasz maila)

To wyeliminowało by i odświeżanie i cofanie i wsjo smile.gif

Ten post edytował toel 7.04.2010, 16:09:16
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 09:34