La communauté ALL HTML c'est 58024 membres à ce jour dont 0 inscrits aujourd'hui et 29 depuis une semaine.
Article publié le samedi 21 octobre 2006 par FabHacker.
Cet article est classé dans les catégories « PHP, SQL »
Les scripts que je donne dans ce tutoriel vous permettront de faire face au flood dans tous vos formulaire en utilisant très simplement deux fonctions.
CREATE TABLE util_antiflood (
blockid int(11) NOT NULL auto_increment,
formname varchar(16) NOT NULL default '',
userid int(11) NOT NULL default '0',
lastpost int(11) NOT NULL default '0',
delai int(11) NOT NULL default '0',
PRIMARY KEY (blockid)
)<?php
// ------------------------------------
// FONCTIONS DE GESTION DE L'ANTIFLOOD
// v1.0
// par FabHacker
// ------------------------------------
// LISTE DES FONCTIONS
// definir_antiflood($formname,$userid,$lastpost,$delai) - Ajoute un filtre pour un formulaire et un userid donné
// doit_attendre_antiflood($formname,$userid) - Booléen indiquant si l'utilisateur peut poster ou pas
// Nom de la table contenant les variables
define( _TABLE_ANTIFLOOD , 'util_antiflood' );
// Ajoute un filtre pour le formulaire $formname et pour l'userid $userid.
// La date du post est $lastpost et le delai $delai doivent être donnés.
function definir_antiflood($formname,$userid,$lastpost,$delai) {
// Vérification de l'existance de la ligne dans la table
$sql = "SELECT blockid FROM " . _TABLE_ANTIFLOOD . " WHERE formname = '$formname' AND userid = $userid";
$resultat = mysql_query($sql);
if(mysql_num_rows($resultat)) {
// La ligne existe, on la met à jour
$sql = "UPDATE " . _TABLE_ANTIFLOOD . " SET lastpost = $lastpost, delai = $delai WHERE formname = '$formname' AND userid = $userid";
$resultat = mysql_query($sql);
} else {
// SInon on l'ajoute
$sql = "INSERT INTO " . _TABLE_ANTIFLOOD . " VALUES ('','$formname','$userid','$lastpost','$delai')";
$resultat = mysql_query($sql);
}
}
// Booléen indiquant si l'utilisateur peut poster ou pas
// true : l'utilistateur doit attendre
// false : l'utilisateur peut poster
function doit_attendre_antiflood($formname,$userid) {
// On va chercher la date et le delai dans la table
$sql = "SELECT lastpost,delai FROM " . _TABLE_ANTIFLOOD . " WHERE formname = '$formname' AND userid = $userid";
$resultat = mysql_query($sql);
$antiflood = mysql_fetch_object($resultat);
// Retourne le booléen
if( time() < ($antiflood->lastpost + $antiflood->delai) ) return true;
else return false;
}
?>
<?php
// Début du script qui receptionne les données
[...]
// Constante de paramètrage à inclure où vous le désirez
// Ceci est bien entendu optionnel
define( _ANTIFLOOD_DELAI_FORM1 , 5 ); // delai de 5 secondes pour 'form1'
// Ajout d'un message
if($ajouter_message == 1) {
$formulaire = 'form1'; // identifiant du formulaire
$userid = $_SESSION['userid']; // identifiant de l'utilisateur
// On vérifie si l'utilisateur doit attendre pour poster
$attente = doit_attendre_antiflood($formulaiure,$userid);
if(!$attente) {
// L'utilisateur peut poster
// Insertion dans la base de donnée
$sql = "...";
$resultat = mysql_query($sql);
[...]
$date = time(); // date de dernière utilisation
$delai = _ANTIFLOOD_DELAI_FORM1; // délai avant la prochaine
// Définition d'un filtre antiflood
definir_antiflood( $formulaire , $userid , $date , $delai );
} else {
// L'utilisateur doit attendre
print('<p align="center"><font color="red">Merci de respecter un temps d\'attente entre deux envois...</font></p>');
}
}
// Poursuite du script...
[...]
?>
Commentaire publié le vendredi 10 novembre 2006 à 16 h 34 par allprog Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.
Discutez et échangez sur ce thème dans nos forums PHP - SQL, PHP - SQL, ASP - SQL.
14/05/2008 à 16 h 21
Police non prise en charge (3 réponses)
11/05/2008 à 22 h 46
question sur fwrite ??? (1 réponse)
11/05/2008 à 05 h 43
Petite aide (0 réponse)
08/05/2008 à 20 h 43
probleme cookie (domain) (2 réponses)
07/05/2008 à 23 h 03
$_session ne fonctionne pas ??? (4 réponses)