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: 0 Punktów: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors