Recaptcha V2 wordt niet gecontroleerd

Status
Niet open voor verdere reacties.

Rob Valkenburg

Gebruiker
Lid geworden
6 dec 2000
Berichten
803
Hallo allemaal,

Ik heb op een website een contactformulier, waar de aanwezigheid van tekst in een aantal velden wordt gecontroleerd. Maar bots spammen mij nu lek!
Om dit op te lossen heb ik een Recaptcha van Google op de site gezet. incl. een js script en een 2de php pagina.
De bezoeker kan het formulier invullen en toch zonder Recaptcha verzenden, maar wordt niet gecontroleerd.

Ergens gaat er niet goed, maar zie het niet meer.
Contactformulier is te vinden op http://boefjesenelfjes.nl/contact-page-test.php (Hier mag je gerust op los gaan ;))

Stukje in de head
Code:
<script src="contact.js"></script>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>

php contactpagina
Code:
<?php
// E-mailadres van de ontvanger
$mail_ontv = 'iemand@website.nl'; // 

// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // naam controle
    if (empty($_POST['naam']))
        $naam_fout = 1;
	// e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    // antiflood controle
    if (!empty($_SESSION['antiflood']))
    {
        $seconde = 60; // 60 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}

// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['email']) || !empty($email_fout) || empty($_POST['bericht']) || empty($_POST['onderwerp']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if (!empty($naam_fout))
            echo'<p><div id="h3">Uw naam is niet ingevuld.</div></p>';
        elseif (!empty($email_fout))
            echo '<p><div id="h3">Uw e-mailadres is niet juist.</div></p>';
        elseif (!empty($antiflood))
            echo '<p><div id="h3">U mag slechts 1 bericht per ' . $seconde . ' seconden versturen.</div></p>';
        else
            echo '<p><div id="h3">U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</div></p>';
	}
  // HTML e-mail formlier
  echo '<form method="POST" action="' . $_SERVER['REQUEST_URI'] . '" />
  <p>
  	  <div id="h4"><center><label for="naam">Naam:</label> <br />
      <input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br />
      
      <label for="email">E-mailadres:</label><br />
      <input type="text" id="email" name="email" value="' . (isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '') . '" /><br />
      
      <label for="telefoon">Telefoon:</label><br />
      <input type="text" id="telefoon" name="telefoon" value="' . (isset($_POST['telefoon']) ? htmlspecialchars($_POST['telefoon']) : '') . '" /><br />

      <label for="onderwerp">Onderwerp:</label><br />
      <input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
      
      <label for="bericht">Bericht:</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 100%;">' . (isset($_POST['bericht']) ? htmlspecialchars($_POST['bericht']) : '') . '</textarea></center></div><br />

<div class="g-recaptcha" data-sitekey="XXKEYXXKEYXXKEYXXKEYXXKEYXX"></div>      

<input type="submit" name="submit" value=" Versturen " />
  </p>
  </form>';
}
// versturen naar
else
{      
  // set datum
  date_default_timezone_set('Europe/Amsterdam');
  $datum = date("d-m-Y  H:i:s");  
    
  $inhoud_mail .= "===================================================\n\n";
  $inhoud_mail .= "Ingevuld Contact formulier " . $_SERVER['HTTP_HOST'] . "\n\n";
  $inhoud_mail .= "===================================================\n\n";
  
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
  $inhoud_mail .= "Telefoon: " . htmlspecialchars($_POST['telefoon']) . "\n\n";
  
  $inhoud_mail .= "Onderwerp: " . htmlspecialchars($_POST['onderwerp']) . "\n\n";
  
  $inhoud_mail .= "Bericht:\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
    
  $inhoud_mail .= "===================================================\n\n";
  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
  
  $headers = stripslashes($headers);
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
  
  $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
  
  if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  {
      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo '<div id="h3">Het contactformulier is verzonden</div>
      
      <p><div id="h4">Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</div></p>';
  }
  else
  {
      echo '<div id="h3">Het contactformulier is niet verzonden</div>
      
      <p><div id="h3"><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</div></p>';
  }
}
?>

contact.js
Code:
$(document).ready(function() {
  var contactForm = $("#contactForm");
  //We set our own custom submit function
  contactForm.on("submit", function(e) {
    //Prevent the default behavior of a form
    e.preventDefault();
    //Get the values from the form
    var name = $("#naam").val();
    var email = $("#email").val();
	var message = $("#telefoon").val();
	var message = $("#onderwerp").val();
    var message = $("#bericht").val();
    //Our AJAX POST
    $.ajax({
      type: "POST",
      url: "mail.php",
      data: {
        name: naam,
        email: email,
        message: message,
        //THIS WILL TELL THE FORM IF THE USER IS CAPTCHA VERIFIED.
        captcha: grecaptcha.getResponse()
      },
      success: function() {
        console.log("OUR FORM SUBMITTED CORRECTLY");
      }
    })
  });
});

mail.php
Code:
<?php
$naam=stripslashes($_POST["naam"]);
$email=stripslashes($_POST["email"]);
$telefoon=stripslashes($_POST["telefoon"]);
$onderwerp=stripslashes($_POST["onderwerp"]);
$bericht=stripslashes($_POST["bericht"]);
$secret="6LccnoIUAAAAAHqYQPNsAblw-RiZX_PocZ1dtt_G";
$response=$_POST["captcha"];

$verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
$captcha_success=json_decode($verify);
if ($captcha_success->success==false) {
  //This user was not verified by recaptcha.

}
else if ($captcha_success->success==true) {
  //This user is verified by recaptcha

}

De scripts heb ik deels van phphulp en van www.kaplankomputing.com/.

Hoop dat jullie het wel zien.
 
Je moet wel wat bij de comments doen, he ;)
Zie onderaan mail.php, zoals een mooie melding tonen of het wel of niet gelukt is.

Maar ik raad aan die captchacontrole beter te integreren in het validatie gedeelte in het script van je contactformulier.
 
Laatst bewerkt:
Je moet wel wat bij de comments doen, he ;)
Zie onderaan mail.php, zoals een mooie melding tonen of het wel of niet gelukt is.

Maar ik raad aan die captchacontrole beter te integreren in het validatie gedeelte in het script van je contactformulier.

Haha, die was me nog niet eens opgevallen.
Maar het lijkt erop dat ie helemaal niet zover komt. Zonder vinkje verzend hij ook.
 
Omdat er geen actie plaats vindt in die controle. Dus gaat het script verder.
 
Het is een beetje van alles wat bij elkaaar, daardoor is het een vreemd formulier geworden.

In de contactpagina staat het formulier met een $_POST afhandeling van het formulier. De afhandeling zal echter nooit plaatsvinden omdat de Javascript dit voorkomt met e.preventDefault(). De Javascript probeert op dat moment een Ajax afhandeling op te zetten via "mail.php". Het resultaat (wel of niet succesvol) wordt niet teruggestuurd naar het het script in het formulier.

Je zal moeten kiezen, gebruik je $_POST of $.ajax ?
 
Het is een beetje van alles wat bij elkaaar, daardoor is het een vreemd formulier geworden.

In de contactpagina staat het formulier met een $_POST afhandeling van het formulier. De afhandeling zal echter nooit plaatsvinden omdat de Javascript dit voorkomt met e.preventDefault(). De Javascript probeert op dat moment een Ajax afhandeling op te zetten via "mail.php". Het resultaat (wel of niet succesvol) wordt niet teruggestuurd naar het het script in het formulier.

Je zal moeten kiezen, gebruik je $_POST of $.ajax ?

:eek: Formulier was van oorsprong $_POST. Ajax kwam er bij door het hele Recaptcha.
Dit moet er dus maar weer uit.

Ik moet zeggen dat ik de documentatie over gebruik van Recaptcha wat onduidelijk vindt.
 
mail.php

Code:
<?php
	$sender_name = stripslashes($_POST["naam"]);
	$sender_email = stripslashes($_POST["email"]);
	$sender_message = stripslashes($_POST["bericht"]);
	$response = $_POST["g-recaptcha-response"];
	$url = 'https://www.google.com/recaptcha/api/siteverify';
	$data = array(
		'secret' => '         SECRET CODE         ',
		'response' => $_POST["g-recaptcha-response"]
	);
	$options = array(
		'http' => array (
			'method' => 'POST',
			'content' => http_build_query($data)
		)
	);
	
	$context  = stream_context_create($options);
	$verify = file_get_contents($url, false, $context);
	$captcha_success=json_decode($verify);
	
	if ($captcha_success->success==false) {
		echo "<p>You are a bot! Go away!</p>";
	} else if ($captcha_success->success==true) {
		echo "<p>You are not not a bot!</p>";
	}
	?>

Contact formulier
Code:
<?php
// E-mailadres van de ontvanger
$mail_ontv = 'test@website.nl'; // 

// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // naam controle
    if (empty($_POST['naam']))
        $naam_fout = 1;
	// e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    // antiflood controle
    if (!empty($_SESSION['antiflood']))
    {
        $seconde = 60; // 60 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}

// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['email']) || !empty($email_fout) || empty($_POST['bericht']) || empty($_POST['onderwerp']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if (!empty($naam_fout))
            echo'<p><div id="h3">Uw naam is niet ingevuld.</div></p>';
        elseif (!empty($email_fout))
            echo '<p><div id="h3">Uw e-mailadres is niet juist.</div></p>';
        elseif (!empty($antiflood))
            echo '<p><div id="h3">U mag slechts 1 bericht per ' . $seconde . ' seconden versturen.</div></p>';
        else
            echo '<p><div id="h3">U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</div></p>';
	}
  // HTML e-mail formulier
  echo '<form action="mail.php" method="post" enctype="multipart/form-data">
  <p>
  	  <div id="h4"><center><label for="naam">Naam:</label> <br />
      <input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br />
      
      <label for="email">E-mailadres:</label><br />
      <input type="text" id="email" name="email" value="' . (isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '') . '" /><br />
      
      <label for="telefoon">Telefoon:</label><br />
      <input type="text" id="telefoon" name="telefoon" value="' . (isset($_POST['telefoon']) ? htmlspecialchars($_POST['telefoon']) : '') . '" /><br />

      <label for="onderwerp">Onderwerp:</label><br />
      <input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
      
      <label for="bericht">Bericht:</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 100%;">' . (isset($_POST['bericht']) ? htmlspecialchars($_POST['bericht']) : '') . '</textarea></center></div><br />
	  
<div class="captcha_wrapper">
		<div class="g-recaptcha" data-sitekey="        SITE KEY          "></div>
		
		</div>
	<button type="submit" id="send_message">Send Message!</button>

  </form>';
}
// versturen naar
else
{      
  // set datum
  date_default_timezone_set('Europe/Amsterdam');
  $datum = date("d-m-Y  H:i:s");  
    
  $inhoud_mail .= "===================================================\n\n";
  $inhoud_mail .= "Ingevuld Contact formulier " . $_SERVER['HTTP_HOST'] . "\n\n";
  $inhoud_mail .= "===================================================\n\n";
  
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
  $inhoud_mail .= "Telefoon: " . htmlspecialchars($_POST['telefoon']) . "\n\n";
  
  $inhoud_mail .= "Onderwerp: " . htmlspecialchars($_POST['onderwerp']) . "\n\n";
  
  $inhoud_mail .= "Bericht:\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
    
  $inhoud_mail .= "===================================================\n\n";
  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
  
  $headers = stripslashes($headers);
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
  
  $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
  
  if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  {
      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo '<div id="h3">Het contactformulier is verzonden</div>
      
      <p><div id="h4">Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</div></p>';
  }
  else
  {
      echo '<div id="h3">Het contactformulier is niet verzonden</div>
      
      <p><div id="h3"><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</div></p>';
  }
}
?>

</div>
	
</body>
	
</html>

Ik krijg nu wel een message, maar mail komt nu weer niet aan. Message hoeft voor mij niet echt.
Als het formulier is verzonden komt er uiteindelijk op de site een vermelding dat deze verzonden is.
 
Waarom zet je die re-Captcha controle niet in je contactformulier script, na de andere validaties?

Waar is mail.php nuttig voor? Je contactformulier mailt toch al als je jouw action leeg laat?
 
Laatst bewerkt:
Recaptcha script kreeg ik niet werkend en ben opzoek gegaan naar betere uitleg.

Nu lijkt het wel te werken, maar een deel van mijn oude orginele script gaat fout bij afhandeling of de mail wel of niet is verzonden. Deze tekst staat nu onder aan het formulier.

Vanaf regel 1 (nog boven de head)
Code:
<?php
// Google reCaptcha secret key
$secretKey = "XXXXXXX Secret KEY XXXXXXX";

$statusMsg = '';
if(isset($_POST['submit'])){
    if(isset($_POST['captcha-response']) && !empty($_POST['captcha-response'])){
        // Get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['captcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success){
            //Contact form submission code goes here ...
  
            $statusMsg = 'Your contact request have submitted successfully.';
        }else{
            $statusMsg = 'Robot verification failed, please try again.';
        }
    }else{
        $statusMsg = 'Robot verification failed, please try again.';
    }
}
?>

Na de head en opmaak van de pagina e.d.

Code:
<?php
// E-mailadres van de ontvanger
$mail_ontv = 'email@website.nl'; // 

// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // naam controle
    if (empty($_POST['naam']))
        $naam_fout = 1;
	// e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    // antiflood controle
    if (!empty($_SESSION['antiflood']))
    {
        $seconde = 60; // 60 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}

// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht']) || empty($_POST['onderwerp']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if (!empty($naam_fout))
            echo '<p><div id="h3">Uw naam is niet ingevuld.</div></p>';
        elseif (!empty($email_fout))
            echo '<p><div id="h3">Uw e-mailadres is niet juist.</div></p>';
        elseif (!empty($antiflood))
            echo '<p><div id="h3">U mag slechts 1 bericht per ' . $seconde . ' seconden versturen.</div></p>';
        else
            echo '<p><div id="h3">U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</div></p>';
    }
	}

// HTML e-mail formlier
	echo '<form method="post">
  <p>
  	  <div id="h4"><center><label for="naam">Naam:</label> <br />
      <input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br />
      
      <label for="mail">E-mailadres:</label><br />
      <input type="text" id="mail" name="mail" value="' . (isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : '') . '" /><br />
      
      <label for="telefoon">Telefoon:</label><br />
      <input type="text" id="telefoon" name="telefoon" value="' . (isset($_POST['telefoon']) ? htmlspecialchars($_POST['telefoon']) : '') . '" /><br />

      <label for="onderwerp">Onderwerp:</label><br />
      <input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
      
      <label for="bericht">Bericht:</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 100%;">' . (isset($_POST['bericht']) ? htmlspecialchars($_POST['bericht']) : '') . '</textarea></center></div><br />
    <input type="submit" name="submit" value="Verzenden">
//g-recaptha

	echo '<div class="g-recaptcha"></div>
    
    <input type="hidden" id="captcha-response" name="captcha-response" />';
  ?>
  </p>
  </form>';
  <?php
}
// versturen naar
else
{      
//datum instellen
  date_default_timezone_set('Europe/Amsterdam');
  $datum = date("d-m-Y  H:i:s");  
    
  $inhoud_mail .= "===================================================\n\n";
  $inhoud_mail .= "Ingevuld Contact formulier " . $_SERVER['HTTP_HOST'] . "\n\n";
  $inhoud_mail .= "===================================================\n\n";
  
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['mail']) . "\n";
  $inhoud_mail .= "Telefoon: " . htmlspecialchars($_POST['telefoon']) . "\n\n";
  
  $inhoud_mail .= "Onderwerp: " . htmlspecialchars($_POST['onderwerp']) . "\n\n";
  
  $inhoud_mail .= "Bericht:\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
    
  $inhoud_mail .= "===================================================\n\n";
  
  // --------------------
  // spambot protectie
  // ------
  // van de tutorial: http://www.phphulp.nl/php/tutorial/beveiliging/spam-vrije-contact-formulieren/340/
  // ------
  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
  
  $headers = stripslashes($headers);
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
  
  $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
  
  if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  {
      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo '<div id="h3">Het contactformulier is verzonden</div>
      
      <p><div id="h4">Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</div></p>';
  }
  else
  {
      echo '<div id="h3">Het contactformulier is niet verzonden</div>
      
      <p><div id="h3"><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</div></p>';
  }
}
?>

Maar krijg een foutmelding bij }else{
Code:
//g-recaptha

	echo '<div class="g-recaptcha"></div>
    
    <input type="hidden" id="captcha-response" name="captcha-response" />';
  ?>
  </p>
  </form>';
  <?php
}
// versturen naar
else
{      
//datum instellen
Zo stond het ook in het originele script. Misschien iets simpels....alleen ik zie het niet.
 
Laatst bewerkt:
Waar komt het eerste code-blok blok vandaan?
De afhandeling van het contactformulier staat in hetzelfde bestand als waar het formulier in staat.
Als je na de validatie van de regel 'U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.' je re-Captcha controle plaatst. Dan moet het werken en is je script logisch opgebouwd.
 
Fout gevonden, denk ik.
Nieuwe sleutels aangemaakt, maar nu voor de nieuwe V3 Recaptcha.

Volgens deze instructies ingevoerd en nu werkt alles. Benieuwd of de spam via de site nu stopt.

Bedankt allemaal voor de tijd en moeite :thumb:
 
Hmm... De V3 captcha werkt heel anders dan de eerste?
 
V3 is de onzichtbare variant van de re-Captcha.
@Bron heeft in een ander topic een voorbeeldscript staan. :)

Ik geloof dat die API-keys ook afwijkend zijn.
 
Heb geen idee. Zag een ander script bij de V2, dan bij V3.
Een groot en zeer wezenlijk verschil tussen v2 en v3 is dat bij v3 een "treshold" wordt gebruikt die bij de andere reCaptcha's (v2 en v2-invisible) ontbreekt.
Als je geen Score Threshold in je script hebt staan dan heb je een v2 script en heb je v2 keys nodig.

Soms lijkt het dat het werkt omdat de reCaptcha puzzel werkt en het formulier wordt verstuurd.
Kan je het formulier versturen zonder een reCaptcha vinkje én wordt dan de email verstuurd? Dan werkt de reCaptcha niet.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan