Comment utiliser la fonction $_SERVER['REMOTE_ADDR'] ?

  • Auteur de la discussion Auteur de la discussion adri5656
  • Date de début Date de début
Nouveau WRInaute
Bonjour, à tous!
Je vien de créé un script qui permettra au visiteurs de donner une note (entre 1 et 20).
Ce dernier fonctionne parfaitement, mais je souhaiterais lui apporter une amélioration.
En fait j'aurais voulu que les visiteurs attendent (24h ou si possible une semaine voir plus) avant de pouvoir à nouveau voter. Car actuellement, ont peut voter autant de fois que l'ont veut.
Code:
<body>
<div align="center">
  <?php
$id=$_GET['id'];
$valeur_vote=$_POST['note'];
//connexion a la bdd
mysql_connect("localhost", "root", "")or die(mysql_error());
mysql_select_db("test2")or die(mysql_error());
//comptage du vote
mysql_query("UPDATE infos SET nbr_vote = nbr_vote+ 1 WHERE id='$id'");
mysql_query("UPDATE infos SET total_vote = total_vote+ '$valeur_vote' WHERE id='$id'");
$total_vote_req=mysql_query("SELECT total_vote FROM infos WHERE id='$id'");
while ($total_vote_donnees = mysql_fetch_array($total_vote_req) )
{
?>
  <?php $total_vote= $total_vote_donnees['total_vote'];

}
?>
  <?php
$nbr_vote_req=mysql_query("SELECT nbr_vote FROM infos WHERE id='$id'");
while ($nbr_vote_donnees = mysql_fetch_array($nbr_vote_req) )
{
 $nbr_vote= $nbr_vote_donnees['nbr_vote']; 
}
$note_final= $total_vote / $nbr_vote;
mysql_query("UPDATE infos SET note = $note_final WHERE id='$id'");
mysql_close();
?>
  <p>
  <p>
  <p>
  <p>
  Votre vote a bien &eacute;t&eacute; enregistrer, Merci! <p> <A HREF="javascript:window.close()">Fermer la fenetre</A>
</div>
</body>

PS: je pense que $_SERVER['REMOTE_ADDR'] est la fonction idéale pour cela, mais le problème c'est que je ne sais pas comment l'adapter a mon cas, car mon site contient des jeux flash, donc les visiteurs doivent quand même pouvoir voter pour les autres jeux.
 
WRInaute impliqué
salut, y a beaucoups de requetes dans ton code, normalement on essaye dans faire le moins possible, pour optimiser les performances, normalement tu peux t'en sortir avec un seul update :
"UPDATE infos SET note = (total_vote+ ".$valeur_vote." / (nbr_vote+1), nbr_vote = nbr_vote+ 1, total_vote = total_vote+ ".$valeur_vote." WHERE id=".$id
 
WRInaute discret
Je ne suis pas sur que tu puisse utiliser $_SERVER[REMOTE_ADDR]dans ton cas.

Ta table ne mémorise que le nombre total de vote et la valeur cumulée des notes.

Si tu voulais filtrer pas REMOTE_ADDR, il te faudrait tracer tous les votes 1 par 1.

Tu ferais mieux de bloquer le votant avec un cookie, ce qui ne changera pas toute la structure de ta base...
 
WRInaute impliqué
Tout à fait, et le cookie te permettrait d'éviter de bloquer inutilement les votes des utilisateurs partageant la même IP (connexions publiques, connexions avec un proxy...).

En contre partie, le cookie présente certains inconvénients : quelques internautes bloquent les cookies, d'autres les effacent régulièrement etc... La limitation des votes par utilisateur ne fonctionera pas toujours donc...
 
WRInaute passionné
Perso j'ai une deuxième table qui enregistre les $_SERVER['REMOTE_ADDR'], avec l'id de la photo associée au vote, et la date. Je purge toutes les 24 heures.
 
Nouveau WRInaute
Merci beaucoup pour vos réponses, j'ai choisi la méthode utilisant les cookies.

En faite je procède comme cela:
1- je vérifie si le cookie ayant comme nom l'id du jeu existe
2-si il existe pas je comtabilise le vote
3-je cree je cookie ayant comme nom l'id du jeu, comme ça le visiteur ne poura pas revoter.
Mais j'ai un problème pour nommer de cette façon le cookie, je met le code suivant $_GET['id'] pour le nommer, mais au lieu de le nommer par l'id du jeu, je tombe sur une parese error :(

Ce qui donne:

Code:
<?php
$id=$_GET['id'];
$valeur_vote=$_POST['note'];
if (isset($_cookie['$_GET['id']']))
{
echo 'Vous avez déja votez pour ce jeu';
}
else
{
...
code source qui valide et enregistre le vote
...
}
?>
// on cree le cookie et on le nomme par l'id du jeu, comme ca au prochain afichage de cette page (si il ressai de voter) il obtient le message suivant: Vous avez déja votez pour ce jeu.

<?php setcookie($_GET['id'],$_GET['id'],time()+3600*24*31)or die(mysql_error());?>

Malheuresement cette méthode ne passe pas non plus :o :Parse error: parse error, unexpected T_STRING, expecting ']' sur cette ligne: if (isset($_cookie['$_GET['id']']))
Aidez moi svp :) :(
 
WRInaute discret
isset($_cookie['$_GET['id']'])
ne peux pas fonctionner enlève les ' de ton GET :

isset($_COOKIE[$_GET['id']])
 
Discussions similaires
Haut