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
php contactpagina
contact.js
mail.php
De scripts heb ik deels van phphulp en van www.kaplankomputing.com/.
Hoop dat jullie het wel zien.
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.