Napisałem metodą copy&paste + edycja prosty formularz wysyłający email. Oto jego zawartość html:
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> </head> <body> <form name="contact-form" action="kontakt.php" method="POST"> <form action="captcha.php" method="post"> Przepisz cyfry z obrazka <input name="captcha" type="text"> <input type="submit" name="send_message" value="Send"> </form> <body onload="document.getElementById('captcha-form').focus()"> </form> </html> </body>
Oto kod odpowiedzialny za generowanie captchy:
captcha.php
<?php $_SESSION["code"]=$code; $im = imagecreatetruecolor(50, 24); $bg = imagecolorallocate($im, 22, 86, 165); $fg = imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $bg); imagestring($im, 5, 5, 5, $code, $fg); imagepng($im); imagedestroy($im); ?>
Oto kod, który pobiera dane, wysyła jeżeli wypełniliśmy dobrze captche:
kontakt.php
<?php $mail_to = 'heheprawiezapomnialemusunac@o2.pl'; // specify your email here // Assigning data from the $_POST array to variables $name = $_POST['sender_name']; $mail_from = $_POST['sender_email']; $phone = $_POST['sender_phone']; $message = $_POST['sender_message']; // Construct email subject $subject = 'otrzymales wiadomosc od ' . $name; // Construct email body $body_message = 'From: ' . $name . "\r\n"; $body_message .= 'E-mail: ' . $mail_from . "\r\n"; $body_message .= 'Phone: ' . $phone . "\r\n"; $body_message .= 'Message: ' . $message; // Construct email headers $headers = 'From: ' . $mail_from . "\r\n"; $headers .= 'Reply-To: ' . $mail_from . "\r\n"; { if ($mail_sent == true){ ?> <script language="javascript" type="text/javascript"> alert('Dziękujęmy za wiadomość!'); window.location = 'contact-form.html'; </script> <?php } else { ?> <script language="javascript" type="text/javascript"> alert('Wiadomość nie wysłana, strajk głodowy listonoszy.'); window.location = 'contact-form.html'; </script> <?php } } else { } window.location.reload(); ?>
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:
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.