La communauté ALL HTML c'est 58827 membres à ce jour dont 3 inscrits aujourd'hui et 32 depuis une semaine.
Cet article est actuellement publié sur le site.
Article publié le lundi 23 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...
[...]
?>