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

Recaptcha stuurt niks naar een mailadres, dat moet jij doen met [php]mail[/php] of phpMailer.
ReCaptcha controleert enkel maar of iemand een mens is (in V3 a.d.v. een score), en jij moet in dat geval de mail sturen. (regel 86)
Was me eerste forum hier dus was ff zoeken naar hoe de code moest posten. Verkeerd dus.
Echter heb ik naar de regel 86 gekeken maar en daar mail command toegepast maar ontvang nog steeds geen mail :(
Je hebt hier wel je eigen key ingevuld?

$recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
Op welke manier mail je? Lokaal of op een hostingserver?
Alle key’s heb ik in gevuld met de key’s die op de recaptcha site heb gekregen na het aanmaken van het recaptcha account.
Ik mail via de hostingsite one.com
Met mijn oude site kon ik gewoon mijn mail adres in de html verwerken en wordt het met de submit butten naar mijn mail adres gestuurd.
Het nieuwe test formulier heb ik wel geüpload om het “live” te krijgen.
Ik zie dan wel netjes onderin het scherm het recaptcha logo.
Na het invullen van het formulier wordt het scherm ververst zonder enige melding.
Laat je relevante code eens zien.
<code><!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>

<?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]';

} else {
// Not verified - show form error

}

} ?>

</html>

[size=xsmall]Toevoeging op 29/01/2019 10:18:11:[/size]

Geen idee wat ik nu verkeerd doe maar er wordt weer een deel in de normale tent geplaatst ????
We hebben ook code-tags zoals ik in je vorige bericht plaatstte. Dat maakt het script hier beter leesbaarder.

Verder sla je nu enkel een variabele op met een mailadres, en mail je nog niet.
Zie ook: [php]mail[/php].

Op lijn 19 moet je een foutmelding plaatsen als de controle zegt dat het niet goed is.

Kga vanavond weer ff verder stoeien. Gaat wat makkelijker vanaf een computer. Sta nu met me telefoon te stoeien.

Reageren