écoulés.
Bonjour, j'ai un petit site avec un forum entièrement dev en php. Sauf que quand on spam le bouton envoyer dans un topic ( j'ai pas mis de captcha a l'interieur ) bah ça envoie plusieurs messages.
Donc j'ai eu l'idée de mettre un interval de 10 ou 20sec entre chaque message, j'ai donc créer un novueau champs dans ma table users que j'ai nommé "date_last_message" et qui s'update a chaque fois qu'on poste un message.
Cependant je sais pas comment faire pour vérifier si il y a eu au moins 10sec d'écoulés.
j'ai bien trouvé la fonction diff() mais j'ai pas compris son utilisation.
Vous pouvez m'aider ?
Merci bien.
Tu peux convertir la date stockée en base de données en timestamp, récupérer le timestamp actuel, et faire la différence entre les deux entiers ; ça te donnera le nombre de secondes écoulées entre l'envoi du dernier message et « maintenant ».
Sinon, oui DateTime::diff() te retourne une DateInterval ( http://www.php.net/manual/fr/datetime.diff.php ) mais dans ce cas ça te complique la tâche plus qu'autre chose.
Je comprends pas comment faire la différence en fait, parce qu'un simple $date1 - $date2 ça fonctionnera pas
Je pense que tu peux faire un truc du genre :
$taDate; // ta 1ère date
$taDate2; // ta 2ème date
$dateInterval = $taDate2.diff($taDate);
$secondsInterval = $dateInterval->s;
Teste un truc du genre.
Petit soucis à cette ligne :
$dateInterval = $date2.diff($date);
Vous vous embêtez pour rien
L'utilisateur a besoin d'être connecté pour poster non?
Sers toi des sessions.
1- Lorsque l'utilisateur Post :
| $_SESSION["lastPost"] = timestamp();
2 - Pour savoir si le gars peut poster :
| if( timestamp()-$_SESSION["lastPost"]>10 )
| {
| . . . // ok
| } else {
| . . . // moins de 10 sec
| }
Et voiloup!
C'est vrai kermitou, faire ça ou alors tout simplement faire en sorte qu'un bot ne puisse pas s'identifier 40 fois sur le site en 10 secondes
http://redsky.fr/0-11-jvstats.html Statistiques de vos pseudos JVC
kermitou3 a correctement expliqué pourquoi passer par une variable de session serait inefficace.
Bloquer la fréquence de connexion ne résoudrait pas non plus le problème d'ailleurs.
Oui j'y avais pas pensé pour la session
Par contre, bloquer la fréquence de connexion j'suis pas d'accord, puis t'es bien placé pour dire ça alors qu'il y a un bot qui circule où tu entres une liste de 30 pseudos et ça poste 1 message / 4 secondes sur le forum
Et pour la solution de garder le timestamp en bdd lors du post,
Faut bien penser à faire la vérification en récupérant le dernier message posté par l'IP et non pas par le pseudo pour éviter le multicompte justement. Donc ça implique de garder aussi l'IP en mémoire pour chaque post si c'est pas déjà fait
Garder l'IP et le pseudo en mémoire permet d'éviter les abus oui.
Je ne vois pas le rapport Serialesky pour la fréquence de connexion par contre.