Formularz kontaktowy to z pewnością podstawowy element każdej strony internetowej. Przygotowałem więc dla Was formularz kontaktowy z wykorzystaniem skryptu reCAPTCHA, aby zapobiec niechcianym wiadomościom, czyli spamowi.
Serdecznie zapraszam do artykułu!
Ponownie wykorzystałem moduł reCAPTCHA do swojego projektu. Jest to bardzo ważny element
w formularzu kontaktowym. Nie chcielibyśmy przecież otrzymywać niepotrzebnego spamu.
Moduł reCAPTCHA ściągnąć można z tej strony. Aby poprawnie działał na twojej stronie, musisz założyć konto w witrynie reCAPTCHA, uzyskując tym samym niezbędne oba klucze – prywatny i publiczny, a następnie wspomniane klucze przypisać do poszczególnych zmiennych. Pamiętaj, że reCAPTCHA będzie działała tylko wtedy, gdy zostanie umieszczona pod tym samym URL, na który zostały zarejestrowane klucze.
Tradycyjnie, dane wprowadzone przez użytkownika poddawane są walidacji. Następnie, jeżeli nie wykryto błędu, wiadomość wysyłana jest w wersji HTML przy wykorzystaniu funkcji mail(). Aby e-mail wyświetlał się jako HTML, należy dodać specjalne nagłówki, które możecie zobaczyć poniżej. Dodałem również opcję wysłania kopi wiadomości na swój adres e-mail. Jest to oczywiście opcjonalne rozwiązanie.
Zapraszam także do obejrzenia dema, dzięki któremu możecie przetestować napisany przeze mnie skrypt.
Skrypt formularza
-
<?php
-
-
include 'recaptchalib.php'; // dołączenie modułu reCAPTCHA
-
$privatekey = ''; // prywatny klucz reCAPTCHA
-
$publickey = ''; // publiczny klucz reCAPTCHA
-
$twojemail = ''; // twój adres e-mail
-
-
if ($_POST['wyslane']) {
-
-
// filtrowanie treści wprowadzonych przez użytkownika
-
$imie = htmlspecialchars(stripslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
-
$nazwisko = htmlspecialchars(stripslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
-
$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
-
$temat = htmlspecialchars(stripslashes(strip_tags(trim($_POST["temat"]))), ENT_QUOTES);
-
$tresc = htmlspecialchars(stripslashes(strip_tags(trim($_POST["tresc"]))), ENT_QUOTES);
-
$kopia = $_POST["kopia"];
-
$resp = recaptcha_check_answer ($privatekey,
-
$_SERVER["REMOTE_ADDR"],
-
$_POST["recaptcha_challenge_field"],
-
$_POST["recaptcha_response_field"]);
-
-
// system sprawdza czy wszystkie pola zostały wypełnione
-
if (!$imie) {
-
$blad++;
-
echo '<p>Proszę wpisać swoje imię.</p>';
-
}
-
if (!$nazwisko) {
-
$blad++;
-
echo '<p>Proszę wpisać swoje nazwisko.</p>';
-
}
-
if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
-
$blad++;
-
echo '<p>Proszę wprowadzić poprawnie adres email.</p>';
-
}
-
if (!$temat) {
-
$blad++;
-
echo '<p>Proszę wpisać temat wiadomości.</p>';
-
}
-
if (!$tresc) {
-
$blad++;
-
echo '<p>Proszę wpisać treść wiadomości.</p>';
-
}
-
if (!$resp->is_valid) {
-
$error = $resp->error;
-
echo '<p>Proszę wpisać poprawnie wyrazy z obrazka.</p>';
-
$blad++;
-
}
-
-
// jeżeli nie ma błędu, to wiadomość e-mail zostaje wysłana
-
if ($blad == 0) {
-
-
// niezbędne nagłówki do wyświetlania wiadomości HTML
-
$naglowki = "MIME-Version: 1.0" . "\r\n";
-
$naglowki .= "Content-type:text/html;charset=utf-8" . "\r\n";
-
-
// opcjonalne nagłówki
-
$naglowki .= 'From: <'.$email.'>' . "\r\n";
-
$naglowki .= 'Cc: <'.$twojemail.'>' . "\r\n";
-
-
// tytuł wiadomości
-
$tytul = 'Formularz kontaktowy';
-
-
// całkowita treść wiadomości
-
$tresc = nl2br($tresc);
-
$wiadomosc = <<< KONIEC
-
<|!REG3XP0!> <html>
-
<p><strong>Imię:</strong> $imie</p>
-
<p><strong>Nazwisko:</strong> $nazwisko</p>
-
<p><strong>Temat:</strong> $temat</p>
-
<p><strong>Treść wiadomości:</strong> <br />$tresc</p>
-
</html>|>
-
KONIEC;
-
// wysyłanie wiadomości e-mail
-
$wynik = mail('<'.$twojemail.'>', $tytul, $wiadomosc, $naglowki);
-
-
// wysyłane kopi wiadomości
-
if ($kopia) {
-
$naglowki2 = "MIME-Version: 1.0" . "\r\n";
-
$naglowki2 .= "Content-type:text/html;charset=utf-8" . "\r\n";
-
$naglowki2 .= 'From: <'.$twojemail.'>' . "\r\n";
-
$tytul2 = 'Kopia – Formularz kontaktowy';
-
-
$wynik = mail($email, $tytul2, $wiadomosc, $naglowki2);
-
}
-
-
// komunikat potwierdzający wysłanie wiadomości bądź nie
-
if ($wynik) {
-
echo '<p>Wiadomość została wysłana</p>';
-
} else {
-
echo '<p>Wiadomość nie została wysłana</p>';
-
}
-
}
-
-
}
-
-
// tworzenie formularza HTML
-
echo <<< KONIEC
-
<form class="form" action="index.php" method="post">
-
<input type="hidden" name="wyslane" value="TRUE" />
-
-
<p>Imię: <input type="text" name="imie" /></p>
-
<p>Nazwisko: <input type="text" name="nazwisko" /></p>
-
<p>Adres e-mail: <input type="text" name="email" /></p>
-
<p>Temat: <input type="text" name="temat" /></p>
-
<p><textarea id="tresc" name="tresc"></textarea></p>
-
<p>Prześlij mi kopię wiadomości <input type="checkbox" name="kopia" value="1" /></p>
-
KONIEC;
-
echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
-
echo <<< KONIEC
-
<p><input type="submit" value="Wyślij" /></p>
-
</form>
-
KONIEC;
-
-
?>
Listing