Maximaal één formulier submit per half uur

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick Maas

Rick Maas

06/01/2015 21:01:26
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
    
<?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';
                                }

?>

Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 06/01/2015 21:12:54 door Rick Maas
 
PHP hulp

PHP hulp

25/11/2024 01:01:06
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 21:06:20
Quote Anchor link
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.

Dit zou wel effectief moeten zijn, lijkt me.
 
Rick Maas

Rick Maas

06/01/2015 21:10:42
Quote Anchor link
Sorry voor het vergeten van de code tags ;)

Dit was niet precies hoe ik het wilde doen, ik wilde het echt met de tijd te doen hebben.
 
- SanThe -

- SanThe -

07/01/2015 03:20:02
Quote Anchor link
Een IP nummer kan wisselen, dus heb je niks aan.
 
- Ariën  -
Beheerder

- Ariën -

07/01/2015 09:03:32
Quote Anchor link
- SanThe - op 07/01/2015 03:20:02:
Een IP nummer kan wisselen, dus heb je niks aan.

Zo vaak wisselt een IP-nummer niet, en het kost best wel wat moeite om die gewisseld te krijgen. De kans is gewoon aanzienlijk kleiner om te flooden.
 
Rick Maas

Rick Maas

07/01/2015 12:35:29
Quote Anchor link
En nu een antwoord op mijn vraag? I.p.v een discussie over een IP adres
 
Bas M

Bas M

07/01/2015 12:48:56
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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";    
//}



?>
Gewijzigd op 07/01/2015 13:02:10 door Bas M
 
Rick Maas

Rick Maas

07/01/2015 13:14:35
Quote Anchor link
Bas M op 07/01/2015 12:48:56:
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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.
 
Ward van der Put
Moderator

Ward van der Put

07/01/2015 14:32:00
Quote Anchor link
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.
 
Bas M

Bas M

07/01/2015 17:31:00
Quote Anchor link
Wat Ward zegt kan je uiteraard ook doen! En dat kan je ook met het stukje code wat ik heb gegeven.

Succes :)
 
Rick Maas

Rick Maas

07/01/2015 20:24:41
Quote Anchor link
Ward van der Put op 07/01/2015 14:32:00:
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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.