Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyświetlenie formularza kontaktowego
Forum PHP.pl > Forum > Przedszkole
piotrd
poproszę o pomoc kogoś bardziej doświadczonego niż ja gdyż trochę pogubiłem się, mam formularz kontaktowy z walidacją i captcha.
nie mogę dojść do rozwiązania takiego aby po wysłaniu formularza bez błędów pojawił się tylko komentarz
  1. echo '<p>&nbsp;</p><p class="err">Wiadomość wysłana, dziękujemy.</p>';
kod:
  1. <?php
  2.  
  3. $your_email ="kontakt@xxx.pl";
  4.  
  5. $errors = "";
  6. $name = "";
  7. $visitor_email = "";
  8. $user_message = "";
  9.  
  10. if(isset($_POST["submit"])) {
  11. $name = $_POST["name"];
  12. $visitor_email = $_POST["email"];
  13. $user_message = $_POST["message"];
  14.  
  15. if(empty($name)||empty($visitor_email)) {
  16. $errors .= "Imię i email są polami wymaganymi!";
  17. }
  18.  
  19. if(IsInjected($visitor_email)) {
  20. $errors .= "Zły email!";
  21. }
  22.  
  23. if(empty($_SESSION["6_letters_code"] ) || strcasecmp($_SESSION["6_letters_code"], $_POST["6_letters_code"]) != 0) {
  24. $errors .= "Przepisz kod poprawnie!";
  25. }
  26.  
  27. if(empty($errors)) {
  28. $to = $your_email;
  29. $subject = "=?UTF-8?B?" . base64_encode("Poland - kontakt") . "?=";
  30. $ip = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "";
  31.  
  32. $body = "<html>";
  33. $body .= "<head></head>";
  34. $body .= "<body>";
  35. $body .= "$name ($visitor_email) napisał/ła:" .
  36. "<p>Treść: " . "$user_message</p>" .
  37. "<p>IP: $ip</p>";
  38. $body .= "</body>";
  39. $body .= "</html>";
  40.  
  41. $headers = "MIME-Version: 1.0\r\n";
  42. $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  43. $headers .= "From: Poland <kontakt@XXX.pl>\r\n";
  44. $headers .= "Reply-To: $visitor_email\r\n";
  45.  
  46. mail($to, $subject, $body, $headers);
  47.  
  48. echo '<p>&nbsp;</p><p class="err">Wiadomość wysłana, dziękujemy.</p>';
  49. } else {
  50. echo '<p>&nbsp;</p><p class="err">' . nl2br($errors) . '</p>';
  51. }
  52. }
  53.  
  54. function IsInjected($str) {
  55. $injections = array("(\n+)", "(\r+)", "(\t+)", "(%0A+)", "(%0D+)", "(%08+)", "(%09+)");
  56. $inject = join("|", $injections);
  57. $inject = "/$inject/i";
  58.  
  59. if(preg_match($inject, $str)) {
  60. return true;
  61. } else {
  62. return false;
  63. }
  64. }
  65. ?>
  66. <p><div id="contact_form_errorloc" class="err"></div></p>
  67. <p>&nbsp;</p>
  68. <form method="POST" name="contact_form" action="<?php echo htmlentities($_SERVER["REQUEST_URI"]); ?>">
  69. <p>
  70. <label for="name">Imię i nazwisko:</label><br>
  71. <input type="text" name="name" value="" size="50">
  72. </p>
  73. <p>
  74. <label for="email">Twój email:</label><br>
  75. <input type="text" name="email" value="" size="50">
  76. </p>
  77. <p>
  78. <label for="message">Treść wiadomości:</label><br>
  79. <textarea name="message" rows="10" cols="50"></textarea>
  80. </p>
  81. <p>
  82. <img src="form/captcha_code_file.php?rand=<?php echo rand(10,100); ?>" id="captchaimg"><br>
  83. <small>Nie możesz odczytać kodu? <a href="java script: refreshCaptcha();">Wygeneruj nowy.</a></small><br>
  84. <label for="message">Wpisz powyższy kod tutaj:</label>
  85. <input id="6_letters_code" name="6_letters_code" type="text"><br>
  86. <br>
  87. <input type="submit" value="wyślij" name="submit">
  88. </p>
  89. </form>
nospor
W tej chwili wyświetlasz formularz bezwarunkowo.
Ja nie chcesz go wyświetlać, gdy wszystko było ok, to daj warunek
I wszystko ok to nie wyświetlaj się.

No przecież to jest IF, którego już używasz w swoim kodzie
piotrd
właśnie przerzuciłem <form> poza if bo gdy dodam go jako warunek else dla if(isset($_POST["submit"])) wtedy nie wykona mi się if(empty($errors))
ot cały paradoks ;(
mortus
Masz taki miszmasz w kodzie. Dodaj sobie dodatkową zmienną np. $nadano = false (linia 10). Po wysłaniu maila (linia 48) zmień jej wartość na true, a przed wyświetlaniem formularza (linia 66) użyj warunku if(!$nadano). Nie zapomnij zamknąć tego ifa po wstawieniu formularza:
  1. if(!$nadano) : ?>
  2. <!-- tutaj formularz i wszystko inne -->
  3. <?php
  4. endif;
  5. ?>
piotrd
mortus, posłuchałem Twojej rady, bo jakże nie można się z nią nie zgodzić i napisałem wszystko od nowa, oto gotowy formularz
  1. <?
  2.  
  3. $imie = htmlspecialchars(strip_tags(trim($_POST['imie'])));
  4. $emajl = htmlspecialchars(strip_tags(trim($_POST['emajl'])));
  5. $tresc = htmlspecialchars(strip_tags(trim($_POST['tresc'])));
  6. $ip = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "brak IP";
  7.  
  8. $temat = "=?UTF-8?B?" . base64_encode("Poland - kontakt") . "?=";
  9.  
  10. $headers = "MIME-Version: 1.0\r\n";
  11. $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  12. $headers .= "From: Poland <kontakt@xxx.pl>\r\n";
  13. $headers .= "Reply-To: $emajl\r\n";
  14.  
  15. $body = "<html>";
  16. $body .= "<head></head>";
  17. $body .= "<body>";
  18. $body .= "$imie ($emajl) napisał/ła:" . "<p>Treść: " . "$tresc</p>" . "<p>IP: $ip</p>";
  19. $body .= "</body>";
  20. $body .= "</html>";
  21.  
  22. if($_POST["send"] == '1') {
  23. if (!empty($_POST['imie'])
  24. && !empty($_POST['emajl'])
  25. && !empty($_POST['tresc'])
  26. && !empty($_POST['kod'])
  27. && strcasecmp($_SESSION["kod"], $_POST["kod"]) == 0) {
  28. if (mail('kontakt@xxx.pl', $temat, $body, $headers)) {
  29. echo '<p>&nbsp;</p>';
  30. echo '<p class="err">Mail został pomyślnie wysłany!</p>';
  31. } else {
  32. echo '<p>&nbsp;</p>';
  33. echo '<p class="err">Error #' . rand() . ' :)</p>';
  34. }
  35. } else {
  36. echo '<p>&nbsp;</p>';
  37. echo '<p class="err">Wypełnij wszystkie pola! <a href="java script: history.go(-1)">Powrót</a></p>';
  38. }
  39. } else {
  40. echo '<form action="' . htmlentities($_SERVER["REQUEST_URI"]) . '" method="post">';
  41. echo '<input type="hidden" value="1" name="send">';
  42. echo '<br>Twoje imię:<br><input type="text" size="50" id="imie" name="imie" value="' . $_POST["imie"] . '">';
  43. echo '<br>Twój mail:<br><input type="text" size="50" id="emajl" name="emajl" value="' . $_POST['emajl'] . '">';
  44. echo '<br>Treść:<br><textarea id="tresc" name="tresc" rows="10" cols="50"></textarea>';
  45. echo '<br><img id="captchaimg" src="./form/captcha.php?rand=' . rand() . '" />';
  46. echo '<br><small>Nie możesz odczytać kodu? <a href="java script: refreshCaptcha();">Wygeneruj nowy kod</a>.</small>';
  47. echo '<br><input type="text" id="kod" name="kod" value="">&nbsp;<input type="submit" name="submit" value="wyślij">';
  48. echo '</form>';
  49. }
  50. ?>
  51. <script language="JavaScript" type="text/javascript">
  52. function refreshCaptcha() {
  53. var img = document.images["captchaimg"];
  54. img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
  55. }
  56. </script>
działa pięknie tylko poprawię zapamiętywanie wartości inputów przy history.go(-1) oraz jakoś dodam walidację po sprawdzeniu $_POST["send"] == '1' a przed mail()

pewnie da się to jeszcze jakoś zoptymalizować ale to będzie na przyszłość.
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.