Goede middag,

Ik ben een redelijke amateur op het gebied van PHP.
Naast mijn normale dagelijkse werk ben ik bezig met fotografie en ben bezig om een nieuwe website te maken.
Dit gaat in de basis best goed. Echter ik krijg op mijn huidige site redelijk wat spam binnen via het contact formulier.
Dit wil ik dan ook aanpakken met recaptcha v3. Ik heb netjes de sleutels opgevraagd en een test opstelling aangemaakt en de sleutels ingevuld.
Als ik alle velden nu in het formulier invul dan lijkt het goed gekeurd maar ik ontvang geen mail.
Hier onder het script wat ik heb gebruikt.

<!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">
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Google reCAPTCHA v3</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    <script src="https://www.google.com/recaptcha/api.js?render=YOUR_RECAPTCHA_SITE_KEY"></script>
    <script>
        grecaptcha.ready(function () {
            grecaptcha.execute('YOUR_RECAPTCHA_SITE_KEY', { action: 'contact' }).then(function (token) {
                var recaptchaResponse = document.getElementById('recaptchaResponse');
                recaptchaResponse.value = token;
            });
        });
    </script>
</head>

<body>

    <section class="section">
        <div class="container">
            <div class="columns">
                <div class="column is-half">

                    <form method="POST">

                        <h1 class="title">
                            reCAPTCHA v3 testformulier
                        </h1>

                        <div class="field">
                            <label class="label">Name</label>
                            <div class="control">
                                <input type="text" name="name" class="input" placeholder="Name" required>
                            </div>
                        </div>

                        <div class="field">
                            <label class="label">Email</label>
                            <div class="control">
                                <input type="email" name="email" class="input" placeholder="Email Address" required>
                            </div>
                        </div>

                        <div class="field">
                            <label class="label">Message</label>
                            <div class="control">
                                <textarea name="message" class="textarea" placeholder="Message" required></textarea>
                            </div>
                        </div>

                        <div class="field is-grouped">
                            <div class="control">
                                <button type="submit" class="button is-link">Send Message</button>
                            </div>
                        </div>

                        <input type="hidden" name="recaptcha_response" id="recaptchaResponse">
						
                    </form>

                </div>
            </div>
        </div>
    </section>

</body>

<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Build POST request:
    $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
    $recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
    $recaptcha_response = $_POST['recaptcha_response'];

    // Make and decode POST request:
    $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
    $recaptcha = json_decode($recaptcha);

    // Take action based on the score returned:
    if ($recaptcha->score >= 0.5) {
        // Verified - send email
    } else {
        // Not verified - show form error
    }

} ?>

</html>


Nogmaals ik ben een leek op dit gebied.
Ik begrijp ook niet hoe recaptcha ziet naar welk mail adres het gestuurd moet worden.
Wie kan mij helpen.

Gr,
Roland van Haastregt

Oké!
Nog een puntje:

Waarom zet je jouw PHP-code neer na je </body> tag?
De body-sectie is bedoeld voor alle content van de website, en gezien je PHP-script een melding hoort te tonen ("De mail is verstuurd" of "De controle heeft aangetoond dat je een robot bent!") hoort dit op je juiste plek in de body-sectie.
Goede avond,

Weer aan het stoeien geweest en ben nu wel zo ver dat ik een opgegeven text "Herstel uw fout!" als foutmelding krijg. Echter wat ik nu ook aan informatie invul zelf met serieuze info die echt klopt invul geeft hij deze fout melding.
Ook heb ik nog geprobeerd om de ingestelde controle waarde van 0,5 op 0,1 te zetten om te kijken of hij dan wel door de controle heen komt. Maar nee :(
Ook heb ik de PHP code nu boven aan gezet.
Ook gekeken naar je link naar de PHP mail manual, maar als leek weet ik niet zo goed wat ik daar mee aan moet. Kwestie van copieren en er gewoon inplakken of moeten alle waardes dan nog in gevuld worden.
Zal in elk geval kijken of ik de code met code tags nogmaal kan tonen.

[size=xsmall]Toevoeging op 29/01/2019 20:57:39:[/size]

<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Build POST request:
    $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
    $recaptcha_secret = '6Le5dowUAAAAAMl0DMB4BLOaRKq3uUNz1K5J4UP9';
    $recaptcha_response = $_POST['recaptcha_response'];

    // Make and decode POST request:
    $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
    $recaptcha = json_decode($recaptcha);

    // Take action based on the score returned:
    if ($recaptcha->score >= 0.5) {
        // Verified - send email
		
		$to = '[email protected]';
		echo '<br><p>Uw bericht is verstuurd!</p><br>';
    
    } else {
        // Not verified - show form error
		echo '<br><p>Herstel uw fout!</p><br>';
    }

} ?>

<!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">
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Google reCAPTCHA v3</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    <script src='https://www.google.com/recaptcha/api.js?render=6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF'></script>
    
    <script>
grecaptcha.ready(function() {
grecaptcha.execute('6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF', {action: 'action_name'})
.then(function(token) {
// Verify the token on the server.
});
});
</script>
</head>

<body>



    <section class="section">
        <div class="container">
            <div class="columns">
                <div class="column is-half">

                    <form method="POST">

                        <h1 class="title">
                            reCAPTCHA v3 testformulier
                        </h1>

                        <div class="field">
                            <label class="label">Name</label>
                            <div class="control">
                                <input type="text" name="name" class="input" placeholder="Name" required>
                            </div>
                        </div>

                        <div class="field">
                            <label class="label">Email</label>
                            <div class="control">
                                <input type="email" name="email" class="input" placeholder="Email Address" required>
                            </div>
                        </div>

                        <div class="field">
                            <label class="label">Message</label>
                            <div class="control">
                                <textarea name="message" class="textarea" placeholder="Message" required></textarea>
                            </div>
                        </div>

                        <div class="field is-grouped">
                            <div class="control">
                                <button type="submit" class="button is-link">Send Message</button>
                            </div>
                        </div>

                        <input type="hidden" name="recaptcha_response" id="recaptchaResponse">
						
                    </form>

                </div>
            </div>
        </div>
    </section>
    

</body>

</html>
Codetags werken met blokhaken [ ] i.p.v. vissehaakjes < >.

Kijk eens naar de 'examples' op de mail-uitleg van php.net.

aangepast! zat daarmee in elk geval warm
En kijk eens met print_r($recaptcha); wat die voor waarde bevat.
stukje geplaatst ik krijg dan het volgende te zien

stdClass Object ( [success] => [error-codes] => Array ( [0] => missing-input-response ) )

Herstel uw fout!
Hmmm.... Ik kom op Google een hoop tegen.
Kan diverse oorzaken hebben.
zal morgen daar zelf ook ff kijken of ik iets kan vinden.

Reageren