Door
Rick Maas
op 06-01-2015 21:01
gewijzigd op 06-01-2015 21:12
1.395 views
Hallo!
Ik ben hopeloos op zoek naar wat hulp. Ik heb een contact formulier, maar ik wil dat een gebruiker met het zelfde IP & E-mail adres niet binnen een half uur weer een nieuw contact formulier in kan vullen. Hieronder staat een stuk code.
<?php $userIP = $_SERVER['REMOTE_ADDR'];
$email = $noc->real_escape_string($_POST['email']);
$time = time() + 1800 ;
$filter = "SELECT * FROM contact WHERE contact_email = '$email' AND contact_IP = '$userIP' AND contact_datum > $time";
$spam = $noc->query($filter);
if ($spam->num_rows >= 0) {
$fouten[] = 'Maximaal één bericht per half uur';
}
?>
En wat als iemand nog wat toe te voegen heeft aan de vorige verstuurde mail?
Ik zou persoonlijk in een database het IP-adres (Sessies kan je resetten door je browser af te sluiten, cookies kan je wissen) opslaan, en het aantal keer dat deze probeert te mailen, plus de datum. Na 5 keer mag je het wel welletjes vinden, en kan je het IP tijdelijk blokkeren, door te kijken naar de laatste verstuurpoging. Na 10 minuten kan je de lijst weer legen.
Je slaat in je database gewoon de tijd van verzenden + het ip adres op.
Vervolgens check je of het IP adres al bestaat (zodra er weer word geklikt op het verstuur knopje), en zodra dit IP adres al bestaat, check je of de opgeslagen tijd bij dat IP adres meer dan 30 minuten geleden is.
Ik kan het wel even voor je uitvogelen hoe je dit met de minuten kan realiseren als je dat zelf niet kunt, maar het zou op deze manier makkelijk te realiseren zijn.
*UPDATE: Hier is een klein voorbeeld.
<?php
$ipadres = $_SERVER['REMOTE_ADDR']; // Het ip adres opvragen waarmee de persoon (verzender) het formulier wilt versturen.
$tijdnu = date("Y/m/d h:i:s", strtotime("now")) . "\n"; // Hier check je mee.
$tijdnieuw = date("Y/m/d h:i:s", strtotime("+30 minutes")); // Dit zet je tijdens het versturen in de database.
// nieuw variabel aanmaken met de tijd uit de database(dus de tijd die we zojuist tijdens het verzenden hebben geplaatst.)
// Vervolgens kan je controleren door:
// if($databaseTijd >= $tijdnu){
// - Verzend het formulier
//}
//else{
// - echo "Hey je hebt het formulier al verstuurd binnen de afgelopen 30 minuten";
//}
?>
Je slaat in je database gewoon de tijd van verzenden + het ip adres op.
Vervolgens check je of het IP adres al bestaat (zodra er weer word geklikt op het verstuur knopje), en zodra dit IP adres al bestaat, check je of de opgeslagen tijd bij dat IP adres meer dan 30 minuten geleden is.
Ik kan het wel even voor je uitvogelen hoe je dit met de minuten kan realiseren als je dat zelf niet kunt, maar het zou op deze manier makkelijk te realiseren zijn.
*UPDATE: Hier is een klein voorbeeld.
<?php
$ipadres = $_SERVER['REMOTE_ADDR']; // Het ip adres opvragen waarmee de persoon (verzender) het formulier wilt versturen.
$tijdnu = date("Y/m/d h:i:s", strtotime("now")) . "\n"; // Hier check je mee.
$tijdnieuw = date("Y/m/d h:i:s", strtotime("+30 minutes")); // Dit zet je tijdens het versturen in de database.
// nieuw variabel aanmaken met de tijd uit de database(dus de tijd die we zojuist tijdens het verzenden hebben geplaatst.)
// Vervolgens kan je controleren door:
// if($databaseTijd >= $tijdnu){
// - Verzend het formulier
//}
//else{
// - echo "Hey je hebt het formulier al verstuurd binnen de afgelopen 30 minuten";
//}
?>
Kijk hier heb ik wat aan! Dankje Bas! Ik ga hem even testen.
Je kunt in dit geval beter helemaal geen formulier meer tonen, per sessie en per IP-adres.
Anders krijg je voor gebruikers frustrerende mosterd na de maaltijd: ze gaan het invullen maar het wordt aansluitend geweigerd. Beter helemaal niets invullen dus.
Je kunt in dit geval beter helemaal geen formulier meer tonen, per sessie en per IP-adres.
Anders krijg je voor gebruikers frustrerende mosterd na de maaltijd: ze gaan het invullen maar het wordt aansluitend geweigerd. Beter helemaal niets invullen dus.
Dit is een goede tip. Dank jullie wel, het is gelukt!