Forum Clubic

Limiter l'utilisation d'un script

Bonjours ! Alors voila, j’ai un problème car j’aimerais faire en sorte de limiter la fréquence d’utilisation d’un script php grace à l’ip de l’utilisateur.

Style: la personne a utilisé le script, elle ne peut l’utiliser de nouveau que 10 min plutard, et si elle l’utilise avant et bien elle est redirigée.

Je me doute qu’il faut utiliser la BDD, mais je vois pas du tout comment je peux faire au nouveau du script et de la BDD.

Je pense que ça serait un truc du style:

-> le type réutilise/utilise le script -> select dans la BDD où user_ip = $ip -> si l’interval est de moins de 10min alors redirection et si pas user_ip = $ip OU intervale superieur à 10min alors inscription dans de son $ip + de heu… “l’indicateur de temps” dans la BDD puis utilisation du script autorisé.

J’ai trouvé le script qu’il me faut, le voici:

$host="localhost"; // Host name
$username="xxxxxx"; // Mysql username
$password="xxxxx"; // Mysql password
$db_name="xxxxx"; // Database name

mysql_connect("$host", "$username", "$password" )or die("cannot connect to server" );
mysql_select_db("$db_name" )or die("cannot select DB" );


$time_flood = '30'; // 30 secondes

// COMMENT PROCEDER ??


$time_flood = '30'; // 30 secondes

// 1° d'abord commencer par supprimer tout ceux dont le temps a expirer
mysql_query("DELETE FROM flood WHERE dernier + $time_flood < " . time());

// 2° ensuite prenez l'ip du visiteur
$resultat = mysql_query(
"SELECT dernier FROM flood WHERE ip='$_SERVER[REMOTE_ADDR]'");

// 3° Si l'Ip du visiteur est deja dans la table, ai !!
if(mysql_num_rows($resultat) > 0)
    echo 'Vous devez attendre !';

   
// 4° sinon tout va bien, reste plus qu'a inserer l'ip de votre visiteur dans la
// table
   else mysql_query("INSERT INTO flood VALUES ('$_SERVER[REMOTE_ADDR]', '" . 
time() . "')");

//DEBUT DE MON SCRIPT SI APRES VERIF --------------------------------------

function mdpAleatoire($longueur=5)
{
$mdp = '';
$caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
$nombre_caractr 

//etc..//

Seulement il y a un problème: quand le type lance le script 2 fois en moins de 30 secondes le message “Vous devez attendre!” s’affiche bien, mais le script en dessous (mon script) s’execute quand même. Je ne sais pas comment je pourrais faire pour “l’inclure” dans les “conséquence” de if.

else
{
mysql_query("INSERT INTO flood VALUES ('$_SERVER[REMOTE_ADDR]', '" .time() . "')" );
//ton script ici
}

-> problème réglé

Tu pourrais même ne pas DELETE tes ips et les conserver pour faire d’autres stats ou limitations par la suite (exemple : limité à x fois par tranche de 24 heures).

Pour cela, il suffit de changer ton SELECT :

$resultat = mysql_query(“SELECT dernier FROM flood WHERE ip=’$_SERVER[REMOTE_ADDR]’ WHERE dernier+$time_flood>=”.time());

Bien évidement, ça va remplir à fond ta base, mais rien ne t’empèche d’épurer les plus anciennes (par exemple celle de + de 72 heures).
Edité le 23/06/2010 à 16:06