J'ai fais un Top 50 pour mon site, et je me heurte donc aux petits tricheurs qui votent 100x par jour pour leur site
J'ai donc pensé a un systeme qui stockent les dernieres IP dans la base MySQL
Mais justement, pour stocker les 10 derniers IP, je fais 10 champs ? Ou bien, je fais un champ, et les IP sont stockées les unes a la suite des autres ?
En fait, je vois pas trop comment faire
Sinon, si j'utilise le systeme de stockage d'IP, un systeme anti-triche est utile aussi ou pas ?
Une table avec 2 colonnes, l'IP et la date du dernier vote sur cette IP.
Avant de valider, tu recherche dans cette table :
- Si l'IP s'y trouve et que la date est < à 24 heures, tu valides pas.
- Sinon, tu valides le vote et tu insères la nouvelle IP (où tu mets à jour le champ date).
Faudra penser à vider la table des IP les plus vieilles de temps en temps.
massanu
Posté le 14-05-2002 à 20:21:50
ca sur programmationworld.com
ya un super article sur la création d'un sondage, qui permet egalement de ne pas voter 2 fois grace a un stockage d'ip
$ip=getenv( "REMOTE_ADDR" );
$sql = "UPDATE top50 SET hitsin=hitsin+1 WHERE id = '$id'";
$sql2 = "UPDATE top50 SET ip=$ip WHERE id = '$id'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
mysql_close($db); ?>
Malheureusement, ca marche pas, l'IP n'est pas enregistrée ds la base, vous voyez pk ?
$ip=getenv( "REMOTE_ADDR" );
$sql = "UPDATE top50 SET hitsin=hitsin+1 WHERE id = '$id'";
$sql2 = "UPDATE top50 SET ip=$ip WHERE id = '$id'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
mysql_close($db); ?>
Malheureusement, ca marche pas, l'IP n'est pas enregistrée ds la base, vous voyez pk ?
Merci bocoup
tu l'a vide a chaque fois!!
[jfdsdjhfuetppo]--Message édité par veryfree le 14-05-2002 à 20:47:53--[/jfdsdjhfuetppo]
$ip=getenv( "REMOTE_ADDR" );
$sql = "UPDATE top50 SET hitsin=hitsin+1 WHERE id = '$id'";
$sql2 = "UPDATE top50 SET ip=$ip WHERE id = '$id'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
mysql_close($db); ?>
Malheureusement, ca marche pas, l'IP n'est pas enregistrée ds la base, vous voyez pk ?
Merci bocoup
Pourquoi tu vides toujours la table ip
Sinon, tu peux mettre à jour 2 colonnes en même temps, pas la peine de faire 2 requetes :
UPDATE top50 SET hitsin=hitsin+1, ip='$ip' WHERE id = '$id'";
(en mettant ip entre ''
$query = "delete from ip where date<".time(); $result = mysql_query($query);
$ip=getenv("HTTP_X_FORWARDED_FOR" ) ? getenv("HTTP_X_FORWARDED_FOR" ) : getenv("REMOTE_ADDR" );
$query= "Select * from ip where ip='$ip'";
$result = mysql_query($query);
if(mysql_num_rows($query)>0){
echo "un seul vote, merci";
exit;
}
$sql = "UPDATE top50 SET hitsin=hitsin+1 WHERE id = '$id'";
$sql2 = "INSERT INTO ip (ip,date) VALUES ('$ip','".time()+3600*24."'"; $req = mysql_query($sql);
$req2 = mysql_query($sql2);
mysql_close($db);
[jfdsdjhfuetppo]--Message édité par ethernal le 14-05-2002 à 20:59:36--[/jfdsdjhfuetppo]
Max Evans
Posté le 14-05-2002 à 21:02:10
Ho, c le code pour limiter le vote a une fois par jour, et un stockage de l'IP ????