Loading:


Formularz kontaktowy PHP

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

  1. <?php
  2.  
  3. include 'recaptchalib.php'; // dołączenie modułu reCAPTCHA
  4. $privatekey = ''; // prywatny klucz reCAPTCHA
  5. $publickey = ''; // publiczny klucz reCAPTCHA
  6. $twojemail = ''; // twój adres e-mail
  7.  
  8. if ($_POST['wyslane']) {
  9.  
  10.             // filtrowanie treści wprowadzonych przez użytkownika
  11.             $imie = htmlspecialchars(stripslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
  12.             $nazwisko = htmlspecialchars(stripslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
  13.             $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  14.             $temat = htmlspecialchars(stripslashes(strip_tags(trim($_POST["temat"]))), ENT_QUOTES);
  15.             $tresc = htmlspecialchars(stripslashes(strip_tags(trim($_POST["tresc"]))), ENT_QUOTES);
  16.             $kopia = $_POST["kopia"];
  17.             $resp = recaptcha_check_answer ($privatekey,
  18.                     $_SERVER["REMOTE_ADDR"],
  19.                     $_POST["recaptcha_challenge_field"],
  20.                     $_POST["recaptcha_response_field"]);
  21.  
  22.             // system sprawdza czy wszystkie pola zostały wypełnione
  23.             if (!$imie) {
  24.                 $blad++;
  25.                 echo '<p>Proszę wpisać swoje imię.</p>';
  26.             }
  27.             if (!$nazwisko) {
  28.                 $blad++;
  29.                 echo '<p>Proszę wpisać swoje nazwisko.</p>';
  30.             }
  31.             if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  32.                 $blad++;
  33.                 echo '<p>Proszę wprowadzić poprawnie adres email.</p>';
  34.             }
  35.             if (!$temat) {
  36.                 $blad++;
  37.                 echo '<p>Proszę wpisać temat wiadomości.</p>';
  38.             }
  39.             if (!$tresc) {
  40.                 $blad++;
  41.                 echo '<p>Proszę wpisać treść wiadomości.</p>';
  42.             }
  43.             if (!$resp->is_valid) {
  44.                 $error = $resp->error;
  45.                 echo '<p>Proszę wpisać poprawnie wyrazy z obrazka.</p>';
  46.                 $blad++;
  47.             }
  48.  
  49.             // jeżeli nie ma błędu, to wiadomość e-mail zostaje wysłana
  50.             if ($blad == 0) {
  51.  
  52.                 // niezbędne nagłówki do wyświetlania wiadomości HTML
  53.                 $naglowki = "MIME-Version: 1.0" . "\r\n";
  54.                 $naglowki .= "Content-type:text/html;charset=utf-8" . "\r\n";
  55.  
  56.                 // opcjonalne nagłówki
  57.                 $naglowki .= 'From: <'.$email.'>' . "\r\n";
  58.                 $naglowki .= 'Cc: <'.$twojemail.'>' . "\r\n";
  59.  
  60.                 // tytuł wiadomości
  61.                 $tytul = 'Formularz kontaktowy';
  62.  
  63.                 // całkowita treść wiadomości
  64.                 $tresc = nl2br($tresc);
  65.                 $wiadomosc = <<< KONIEC
  66. <|!REG3XP0!>                <html>
  67.                     <p><strong>Imię:</strong> $imie</p>
  68.                     <p><strong>Nazwisko:</strong> $nazwisko</p>
  69.                     <p><strong>Temat:</strong> $temat</p>
  70.                     <p><strong>Treść wiadomości:</strong> <br />$tresc</p>
  71.                 </html>|>
  72. KONIEC;
  73.                 // wysyłanie wiadomości e-mail
  74.                 $wynik = mail('<'.$twojemail.'>', $tytul, $wiadomosc, $naglowki);
  75.  
  76.                 // wysyłane kopi wiadomości
  77.                 if ($kopia) {
  78.                     $naglowki2 = "MIME-Version: 1.0" . "\r\n";
  79.                     $naglowki2 .= "Content-type:text/html;charset=utf-8" . "\r\n";
  80.                     $naglowki2 .= 'From: <'.$twojemail.'>' . "\r\n";
  81.                     $tytul2 = 'Kopia – Formularz kontaktowy';
  82.  
  83.                     $wynik = mail($email, $tytul2, $wiadomosc, $naglowki2);
  84.                 }
  85.  
  86.                 // komunikat potwierdzający wysłanie wiadomości bądź nie
  87.                 if ($wynik) {
  88.                     echo '<p>Wiadomość została wysłana</p>';
  89.                 } else {
  90.                     echo '<p>Wiadomość nie została wysłana</p>';
  91.                 }
  92.             }
  93.  
  94.         }
  95.  
  96. // tworzenie formularza HTML
  97.         echo <<< KONIEC
  98.     <form class="form" action="index.php" method="post">
  99.     <input type="hidden" name="wyslane" value="TRUE" />
  100.  
  101.     <p>Imię: <input type="text" name="imie" /></p>
  102.     <p>Nazwisko: <input type="text" name="nazwisko" /></p>
  103.     <p>Adres e-mail: <input type="text" name="email" /></p>
  104.     <p>Temat: <input type="text" name="temat" /></p>
  105.     <p><textarea id="tresc" name="tresc"></textarea></p>
  106.     <p>Prześlij mi kopię wiadomości <input type="checkbox" name="kopia" value="1" /></p>
  107. KONIEC;
  108.         echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
  109.         echo <<< KONIEC
  110.     <p><input type="submit" value="Wyślij" /></p>
  111.     </form>
  112. KONIEC;
  113.  
  114. ?>


Napisz Artyku³

Listing

niema




Dodano przez: lukasz92r Ranga: Poziom 4 Punktów: 99
Komentarze użytkowników
jak sprawić aby przy błędnym wypełnieniu pola lub recaptcha nie zniknęły pozostałe - wypełnione pola ?
autor: stefanmarcepan | 13084 | 2017-09-16 13:31:37


Musisz dodać atrybuty value="'.$_POST['nazwa_id'].'" do inputów.
autor: divix | 13113 | 2018-06-09 21:52:58


    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors