Formularz kontaktowy php i recaptcha

Formularz kontaktowy php i recaptcha
Piotr Bartosik
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:6
0

Witam,

Ostatnio na stronach mam problem z botami chciałem zainstalowac reCAPTCHA

a więc tak tradycyjnie w <head>

Kopiuj
<script src='https://www.google.com/recaptcha/api.js'></script>

w <html> formularza

Kopiuj
<div id="formularz">
<form method="post" action="kontakt.php">

    <label>Imię i nazwisko</label>
    <input name="name" placeholder="np. Jan Kowalski">

    <label>Email</label>
    <input name="email" type="email" placeholder="np. biuro@bouwman.pl">
    
    <label>Numer telefonu</label>
    <input name="phone" type="phone" placeholder="np. 605956353">

    <label>Wiadomość</label>
    <textarea name="message" placeholder="Napisz tu wiadomość"></textarea>
    <div class="g-recaptcha" data-sitekey="6Ldao08UAAAAACLY93948VkaU0IJPFqn8LUA0vRr"></div>

    <input id="submit" name="submit" type="submit" value="Wyślij">

Wyświetla się recaptcha w formularzu i wszysto wyświetla i wysyła bez recaptcha poprawnie
Teraz chce dodac do kodu kontakt.php kod sprawdzający recaptcha wklejam i nic. Dalej wysyła bez sprawdzenia zaznaczenia recaptchy
Co robić? kod php wyglada następujaco:

Kopiuj
<?php

// Tworzymy zmienną dla imienia i nazwiska
$name = $_POST['name'];

// Tworzymy zmienną dla adresu email
$email = $_POST['email'];

// Tworzymy zmienną dla adresu phone
$phone = $_POST['phone'];

// Tworzymy zmienną dla wiadomości
$message = $_POST['message'];

// Podajesz adres email z którego ma być wysłana wiadomość
$odkogo = "biuro@bouwman.pl";

// Podajesz adres email na który chcesz otrzymać wiadomość
$dokogo = "biuro@bouwman.pl";

// Podajesz tytuł jaki ma mieć ta wiadomość email
$tytul = "Formularz kontaktowy z wozki-uzywane24.pl - landingpage";

// Przygotowujesz treść wiadomości
$wiadomosc = "";
$wiadomosc .= "Imie i nazwisko: " . $name . "\n";
$wiadomosc .= "Email: " . $email . "\n";
$wiadomosc .= "Telefon kontaktowy: " . $phone . "\n";
$wiadomosc .= "Wiadomość: " . $message . "\n";

// Wysyłamy wiadomość
$sukces = mail($dokogo, $tytul, $wiadomosc, "Od: <$odkogo>");

// Przekierowywujemy na potwierdzenie
if ($sukces){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=potwierdzenie.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
?>

a mam wkleić:

Kopiuj
if (isset($_POST['submit'])) {
    $secret = '6LfRORcU***********************1Ei0FdA';
    $response = $_POST['g-recaptcha-response'];
    $remoteip = $_SERVER['REMOTE_ADDR'];
    
    $url = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
    $result = json_decode($url, TRUE);
    if ($result['success'] == 1) {
      echo 'Nie jesteś botem';
    }else{
      echo 'Błędnie wypełnione pole reCAPTCHA';
    }
}

co robić? Z góry dziękuje za pomoc

edytowany 2x, ostatnio: Piotr Bartosik
czysteskarpety
czysteskarpety
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
0

jak dla mnie to wystarczy trochę dokładniejsza walidacja font/back+Honey Pot Spam Prevention, w ten sposób recaptcha jest raczej zbędna


TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Użytkownicy recaptchy trenują AI googla za friko, zastanów się, czy chcesz googlowi w tym pomagać, a dwa, re-captcha jest trochę uciążliwa, czasem trrzeba sporo poklikać. Są biblioteki standalone z captchą na githubie, np.: https://github.com/Gregwar/Captcha


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 3x, ostatnio: TomRZ
DR
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:4
0

Sprawdź, czy ten tutorial nie będzie Ci pomocny:

http://zaawansowanywordpress.pl/tutorial-instalacja-recaptcha-php-od-google/

Pod nim masz działający przykład do pobrania i treningu - zajrzyj do pliku index.php po rozpakowaniu, może znajdziesz podpowiedź:
http://zaawansowanywordpress.pl/wp-content/uploads/2016/07/recaptcha.zip

Natomiast to co próbujesz zrobić samodzielnie, jest podobne do tego:
https://www.codexworld.com/new-google-recaptcha-with-php/

Kopiuj
<?php
if(isset($_POST['submit']) && !empty($_POST['submit'])):
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = '9LuDh9kyetYYYYdT0jsVckScsH8Ks3KA';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):
            //contact form submission code
            $name = !empty($_POST['name'])?$_POST['name']:'';
            $email = !empty($_POST['email'])?$_POST['email']:'';
            $message = !empty($_POST['message'])?$_POST['message']:'';
            
            $to = 'contact@codexworld.com';
            $subject = 'New contact form have been submitted';
            $htmlContent = "
                <h1>Contact request details</h1>
                <p><b>Name: </b>".$name."</p>
                <p><b>Email: </b>".$email."</p>
                <p><b>Message: </b>".$message."</p>
            ";
            // Always set content-type when sending HTML email
            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
            // More headers
            $headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";
            //send email
            @mail($to,$subject,$htmlContent,$headers);
            
            $succMsg = 'Your contact request have submitted successfully.';
        else:
            $errMsg = 'Robot verification failed, please try again.';
        endif;
    else:
        $errMsg = 'Please click on the reCAPTCHA box.';
    endif;
else:
    $errMsg = '';
    $succMsg = '';
endif;
?>

Jeśli to się nie uda wdrożyć, może lepiej jednak skorzystać z rodzimych antyspamerskich rozwiązań, np. u mnie działa SBLAM i blokuje wejścia na stronę znanym spamerom, ale trzeba aktualizować sobie ich listę co jakiś czas:
https://sblam.com

DO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
0

Recaptcha jest dość prosta do wdrożenia. Całkiem fajnie działa invisible reCaptcha i wcale nie jest taka uciążliwa dla odwiedzających.
Co do Twojego problemu to pamiętaj, że recaptcha zwraca Ci jeszcze response, który możesz sobie zwalidowac po stronie serwera zanim puścisz maila.

To co wkleił dekRe powinno Ci pomóc zrozumieć na czym polega recaptcha i jak jej prawidłowo używać :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.