Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Formularz wysyłający email
Forum PHP.pl > Forum > Przedszkole
RobertGawlinski
Witam przedszkole oraz opiekunów!

Napisałem metodą copy&paste + edycja prosty formularz wysyłający email. Oto jego zawartość html:

index.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. &nbsp;&nbsp; &nbsp;<title>HTML PHP Contact Form by WebDesy.com</title>
  4. &nbsp;&nbsp; &nbsp;<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. </head>
  6.  
  7.  
  8. <form name="contact-form" action="kontakt.php" method="POST">
  9.  
  10.  
  11. <label for="field_name">Name:</label>
  12. <input type="text" id="field_name" name="sender_name"><br><br>
  13. <label for="field_email">Your e-mail:</label>
  14. <input type="text" id="field_email" name="sender_email"><br><br>
  15. <label for="field_phone">Phone:</label>
  16. <input type="text" id="field_phone" name="sender_phone"><br><br>
  17.  
  18. <label for="field_message">Message:</label>
  19. <textarea id="field_message" name="sender_message"></textarea><br><br>
  20. <form action="captcha.php" method="post">
  21. Przepisz cyfry z obrazka
  22. <input name="captcha" type="text">
  23. <img src="captcha.php" /><br>
  24. <input type="submit" name="send_message" value="Send">
  25.  
  26. </form>
  27.  
  28. <body onload="document.getElementById('captcha-form').focus()">
  29.  
  30.  
  31. </form>
  32.  
  33.  
  34. </html>
  35.  
  36. </body>



Oto kod odpowiedzialny za generowanie captchy:
captcha.php
  1. <?php
  2. $code=rand(1000,99998);
  3. $_SESSION["code"]=$code;
  4. $im = imagecreatetruecolor(50, 24);
  5. $bg = imagecolorallocate($im, 22, 86, 165);
  6. $fg = imagecolorallocate($im, 255, 255, 255);
  7. imagefill($im, 0, 0, $bg);
  8. imagestring($im, 5, 5, 5, $code, $fg);
  9. header("Cache-Control: no-cache, must-revalidate");
  10. header('Content-type: image/png');
  11. imagepng($im);
  12. imagedestroy($im);
  13. ?>


Oto kod, który pobiera dane, wysyła jeżeli wypełniliśmy dobrze captche:

kontakt.php
  1. <?php
  2.  
  3. $mail_to = 'heheprawiezapomnialemusunac@o2.pl'; // specify your email here
  4.  
  5. // Assigning data from the $_POST array to variables
  6. $name = $_POST['sender_name'];
  7. $mail_from = $_POST['sender_email'];
  8. $phone = $_POST['sender_phone'];
  9. $message = $_POST['sender_message'];
  10.  
  11. // Construct email subject
  12. $subject = 'otrzymales wiadomosc od ' . $name;
  13.  
  14. // Construct email body
  15. $body_message = 'From: ' . $name . "\r\n";
  16. $body_message .= 'E-mail: ' . $mail_from . "\r\n";
  17. $body_message .= 'Phone: ' . $phone . "\r\n";
  18. $body_message .= 'Message: ' . $message;
  19.  
  20. // Construct email headers
  21. $headers = 'From: ' . $mail_from . "\r\n";
  22. $headers .= 'Reply-To: ' . $mail_from . "\r\n";
  23.  
  24. if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"])
  25. {
  26. echo "Correct Code Entered";
  27. $mail_sent = mail($mail_to, $subject, $body_message, $headers);
  28.  
  29. if ($mail_sent == true){ ?>
  30. <script language="javascript" type="text/javascript">
  31. alert('Dziękujęmy za wiadomość!');
  32. window.location = 'contact-form.html';
  33.  
  34.  
  35. </script>
  36.  
  37. <?php } else { ?>
  38. <script language="javascript" type="text/javascript">
  39. alert('Wiadomość nie wysłana, strajk głodowy listonoszy.');
  40. window.location = 'contact-form.html';
  41.  
  42. </script>
  43.  
  44. <?php
  45. }
  46. }
  47. else
  48. {
  49. die("Panie! Daj Pan spokój!");
  50. }
  51. window.location.reload();
  52. ?>



Problem leży w tym, iż jeżeli wyślę email, nacisnę wstecz, wówczas mam wszystko wypełnione wraz z captchą i mogę wysyłać tak spam w nieskończoność. Próbowałem zastosować w skrypcie kontakt.php po wysłaniu maila badź przed komendy odpowiedzialnej za odświeżenie strony, aczkolwiek wyskakuje wówczas irytujący komunikat czy przesłać dane. Nie mam innych pomysłów, a szukając odpowiedzi na tym forum spotkałem się z kodem:

  1. document.getElementById('catch').src = '/catch.php?rnd=' + Math.random();

Aczkolwiek edytując go nie mogłem dojść do zamierzonego celu. Proszę o pomoc!

Pozdrawiam serdecznie.
pedro84
Najprostsze rozwiązanie? Post/Redirect/Get.
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.