Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] validacja formularza kontaktowego
Forum PHP.pl > Forum > Przedszkole
pomek2
Witam,
chciałbym dodać funkcję sprawdzającą poprawność wypełnienia formularza, tzn czy pole zostało wypełnione oraz w polu e-mail sprawdzenie poprawności wpisanego adresu,
jestem początkujący w sprawach php i chciałbym żeby ktoś mnie nakierował.

zamieszczam kawałek kodu o który mi się rozchodzi:) :

  1.  
  2. ."<form method=\"post\" action=\"modules.php?name=$module_name&op=send_mail\">"
  3. ."<tr><td>"._CONTACTPERSON."</td><td><input type=\"text\" name=\"contact_person\" size=\"37\"></td></tr>"
  4. ."<tr><td>"._EMAILADRESS."</td><td><input type=\"text\" name=\"email_adress\" size=\"37\"></td></tr>"
  5. ."<tr><td>"._PHONENUMBER."</td><td><input type=\"text\" name=\"phone_number\" size=\"37\"></td></tr>"
  6. ."<tr><td valign=\"top\">"._QUESTION."</td><td><textarea name=\"question\" cols=\"34\" rows=\"5\"></textarea></td></tr>"
  7. ."<tr><td>"._CAPTCHA."</td><td><br /><img src=\"token/captcha.php\"><br /><br /><input type=\"text\" name=\"captcha\" size=\"20\"></td></tr>"
  8. ."<tr><td>"
  9. ."</td><td align=\"right\">"
  10. ."<input type=\"hidden\" name=\"id\" value=\"$ad_id\">"
  11. ."<input type=\"hidden\" name=\"title\" value=\"$title\">"
  12. ."<input type=\"hidden\" name=\"user_email\" value=\"".$userinfo['user_email']."\">"
  13. ."<input type=\"submit\" value=\""._SEND."\">"
  14. ."</td></tr>"
  15. ."</form></table>"
  16. ."</td></tr>"
  17. ."</table>"
  18. ."</td></tr>"
  19. ."</table>";
  20. } else if ($row_data['contact']) {
  21. echo "<center><h3><b>"._CONTACT."</b></h3></center>";
  22. echo "<p style=\"line-height: 200%; margin-left: 20px;\">".$row_data['contact']."</p>";
  23. }
  24. ?>
  25. </td></tr>
  26. </table>
  27. </td></tr>
  28. </table>
  29.  
  30. <?php
  31.  
  32. CloseTableMain();
  33. include("footer.php");
  34.  
  35. ?>
  36.  



kadlub
do sprawdzenia czy dane pole zostało wypełnione użyj
empty() w polączeniu z if
np
  1. if (!empty($_POST['coś_tam'])
Mefiuu
dokładnie tak jak wyżej, a co do e-maila to jeszcze funkcja : filter_var
emajl22
do maila możesz:
  1. if (!ereg ("^.+@.+..+$", $email)) { echo 'zły'; }
kadlub
jak chcesz po stronie przeglądarki to możesz użyć jquery.validate.js będzie ci od razu sprawdzała czy dane pole jest wypełnione czy nie sprawdza też poprawność wpisania adresu e-mail
Mefiuu
Cytat(emajl22 @ 13.02.2011, 20:12:27 ) *
do maila możesz:
  1. if (!ereg ("^.+@.+..+$", $email)) { echo 'zły'; }



feeeee! nie ereg! jak już to preg_match wink.gif
sunpietro
do walidacji można użyć filter_var() zamiast tworzenia regexpa
emajl22
Cytat(Mefiuu @ 13.02.2011, 20:23:54 ) *
feeeee! nie ereg! jak już to preg_match wink.gif

że niby czemu? wydajność?
pomek2
zrobiłem tak:

  1. <?
  2.  
  3. if (!empty($_POST['contact_person']))
  4. {echo 'Wprowadź osobę kontaktową w pytaniu do ogłoszeniodawcy';}
  5. if (!empty($_POST['email_adress']))
  6. {echo 'Wprowadź swój adres e-mail';}
  7. if (!preg_match ("^.+@.+..+$", $email)) { echo 'Sprawdź wpisany adres e-mail'; }
  8. if (!empty($_POST['question']))
  9. {echo 'Wpisz pytanie do ogłoszeniodawcy';}
  10. if ($_POST['captcha'] != $_SESSION['captcha']){ echo 'Przepisz poprawny kod z obrazka';}
  11. ?>


Jednak wiadomość zostaje wysłana pomimo niewypełnienia pół a poza tym na stronie pojawia mi się komunikat:

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in /home/matkuk/domains/maxi-auto.pl/public_html/modules/Ads/public/show_item.php on line 396
Sprawd� wpisany adres e-mailPrzepisz poprawny kod z obrazka

greycoffey
Cytat(emajl22 @ 13.02.2011, 21:25:17 ) *
że niby czemu? wydajność?

Ereg jest zdeprecjonowane.
Do tego preg_* jest szybsze.
Valdi_B
Cytat(pomek2 @ 19.02.2011, 14:43:51 ) *
Jednak wiadomość zostaje wysłana pomimo niewypełnienia pół a poza tym na stronie pojawia mi się komunikat:

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in /home/matkuk/domains/maxi-auto.pl/public_html/modules/Ads/public/show_item.php on line 396


W preg_match "obuduj" 1-szy argument znakami "/" i ten błąd powinien zginąć.
Dlaczego: Pisząc wyrażenie regułowe:
1. Najpierw podajesz ogranicznik początkowy.
2. Potem jest "właściwe" wyrażenie.
3. Na końcu ma być ogranicznik końcowy, taki sam jak początkowy.

Tak jak napisałeś, to preg_match:
1. Uznał znak "^" za delimiter początkowy,
2. Nie znalazł dalej takiego samego znaku (delimitera końcowego).
3. Zaprotestował.
pomek2
Nie mam pojęcia dlaczego nie działa sprawdzenie formularza, powiadomienia nie wyświetlają się a formularz zostaje wysłany nawet gdy się nic do niego nie wpisze

  1. <?
  2.  
  3. if (!empty($_POST['contact_person']))
  4. {echo 'Wprowadź osobę kontaktową w pytaniu do ogłoszeniodawcy';}
  5. if (!empty($_POST['email_adress']))
  6. {echo 'Wprowadź swój adres e-mail';}
  7. if (!preg_match ("/^.+@.+..+$"/, $email)) { echo 'Sprawdź wpisany adres e-mail'; }
  8. if (!empty($_POST['question']))
  9. {echo 'Wpisz pytanie do ogłoszeniodawcy';}
  10. if ($_POST['captcha'] != $_SESSION['captcha']){ echo 'Przepisz poprawny kod z obrazka';}
  11. ?>
  12.  


może jeszcze trochę więcej kodu umieszczę, może czegoś brakuje tutaj?

  1. echo "<table width=\"100%\">"
  2. ."<tr><td align=\"center\""; if (!empty($contactinfo)) { echo " width=\"50%\""; } echo ">";
  3. if (!empty($contactinfo)) echo "<h3><b>"._CONTACT."</b></h3>";
  4. echo "</td><td align=\"center\""; if (!empty($contactinfo)) { echo "width=\"50%\""; } echo ">"
  5. ."<h3><b>"._SENDMESSAGE."</b></h3>";
  6. echo "</td></tr>"
  7. ."<tr><td colspan=\"2\">";
  8. info_box("tip", _SENDMESSAGEINFO);
  9. echo "</td></tr>"
  10. ."<tr><td valign=\"top\" colspan=\"2\">"
  11. ."<table border=\"0\">"
  12. ."<tr><td";
  13. if (!empty($contactinfo)) { echo " valign=\"top\" width=\"50%\">"
  14. ."<table border=\"0\" width=\"100%\">"
  15. ."<tr><td>".
  16. $contactinfo
  17. ."</td></tr>"
  18. ."</table>";
  19. }
  20. echo "</td><td>"
  21. ."<table border=\"0\" width=\"50%\">"
  22. ."<form method=\"post\" action=\"modules.php?name=$module_name&op=send_mail\">"
  23. ."<tr><td>"._CONTACTPERSON."</td><td><input type=\"text\" name=\"contact_person\" size=\"37\"></td></tr>"
  24. ."<tr><td>"._EMAILADRESS."</td><td><input type=\"text\" name=\"email_adress\" size=\"37\"></td></tr>"
  25. ."<tr><td>"._PHONENUMBER."</td><td><input type=\"text\" name=\"phone_number\" size=\"37\"></td></tr>"
  26. ."<tr><td valign=\"top\">"._QUESTION."</td><td><textarea name=\"question\" cols=\"34\" rows=\"5\"></textarea></td></tr>"
  27. ."<tr><td>"._CAPTCHA."</td><td><br /><img src=\"token/captcha.php\"><br /><br /><input type=\"text\" name=\"captcha\" size=\"20\"></td></tr>"
  28. ."<tr><td>"
  29. ."</td><td align=\"right\">"
  30. ."<input type=\"hidden\" name=\"id\" value=\"$ad_id\">"
  31. ."<input type=\"hidden\" name=\"title\" value=\"$title\">"
  32. ."<input type=\"hidden\" name=\"user_email\" value=\"".$userinfo['user_email']."\">"
  33. ."<input type=\"submit\" value=\""._SEND."\">"
  34. ."</td></tr>"
  35. ."</form></table>"
  36. ."</td></tr>"
  37. ."</table>"
  38. ."</td></tr>"
  39. ."</table>";


wymyśliłem coś takiego snitch.gif :

  1. //sprawdzenie formularza do ogloszeniodawcy
  2.  
  3. echo "<tr><td align=\"center\""; if (($_POST['contact_person'])) { echo " width=\"50%\""; } echo ">";
  4. if (!empty($_POST['contact_person'])) echo "<h3><b>"._CONTACT_PERSON."</b></h3>";
  5. echo "<tr><td align=\"center\""; if (($_POST['email_adress'])) { echo " width=\"50%\""; } echo ">";
  6. if (!empty($_POST['email_adress'])) echo "<h3><b>"._EMAIL_ADRESS."</b></h3>";
  7. echo "<tr><td align=\"center\""; if (($_POST['question'])) { echo " width=\"50%\""; } echo ">";
  8. if (!empty($_POST['question'])) echo "<h3><b>"._QUESTION."</b></h3>";
  9. echo "<tr><td align=\"center\""; if ($_POST['captcha'] != $_SESSION['captcha']) { echo " width=\"50%\""; } echo ">";
  10. if (!empty($_POST['captcha'])) echo "<h3><b>"._CAPTCHA."</b></h3>";
  11.  
  12. //koniec sprawdzania
  13.  


tylko sądzę że teraz trzeba jakoś zablokować wysyłanie tego formularza bo nawet gdy się nic nie wpisze to i tak wysyła:

  1.  
  2. echo "</td><td>"
  3. ."<table border=\"0\" width=\"50%\">"
  4. ."<form method=\"post\" action=\"modules.php?name=$module_name&op=send_mail\">"
  5. ."<tr><td>"._CONTACTPERSON."</td><td><input type=\"text\" name=\"contact_person\" size=\"37\"></td></tr>"
  6. ."<tr><td>"._EMAILADRESS."</td><td><input type=\"text\" name=\"email_adress\" size=\"37\"></td></tr>"
  7. ."<tr><td>"._PHONENUMBER."</td><td><input type=\"text\" name=\"phone_number\" size=\"37\"></td></tr>"
  8. ."<tr><td valign=\"top\">"._QUESTION."</td><td><textarea name=\"question\" cols=\"34\" rows=\"5\"></textarea></td></tr>"
  9. ."<tr><td>"._CAPTCHA."</td><td><br /><img src=\"token/captcha.php\"><br /><br /><input type=\"text\" name=\"captcha\" size=\"20\"></td></tr>"
  10. ."<tr><td>"
  11. ."</td><td align=\"right\">"
  12. ."<input type=\"hidden\" name=\"id\" value=\"$ad_id\">"
  13. ."<input type=\"hidden\" name=\"title\" value=\"$title\">"
  14. ."<input type=\"hidden\" name=\"user_email\" value=\"".$userinfo['user_email']."\">"
  15. ."<input type=\"submit\" value=\""._SEND."\">"
  16. ."</td></tr>"
  17. ."</form></table>"
  18. ."</td></tr>"
  19. ."</table>"
  20. ."</td></tr>"
  21. ."</table>";
  22. } else if ($row_data['contact']) {
  23. echo "<center><h3><b>"._CONTACT."</b></h3></center>";
  24. echo "<p style=\"line-height: 200%; margin-left: 20px;\">".$row_data['contact']."</p>";
  25. }
  26. ?>
  27. </td></tr>
  28. </table>
  29. </td></tr>
  30. </table>
  31.  


Pomoże ktośsmile.gifquestionmark.gif

Przesyłam także cały plik, będę wdzięczny za poradę bo od paru dni stoję w miejscu:

plik podstrony
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.