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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

adri5656
Nouveau WRInaute
 
Messages: 39
Inscription: Sam Mar 31, 2007 9:35

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

Message le Lun Mai 28, 2007 12:52

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: Tout sélectionner
<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.


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Lun Mai 28, 2007 13:11

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


lupuz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 207
Inscription: Mer Mar 15, 2006 23:41

Message le Lun Mai 28, 2007 13:14

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...


nza2k
WRInaute impliqué
WRInaute impliqué
 
Messages: 441
Inscription: Ven Jan 16, 2004 18:35

Message le Lun Mai 28, 2007 14:21

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...

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2384
Inscription: Ven Aoû 30, 2002 13:35

Message le Lun Mai 28, 2007 22:55

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.

adri5656
Nouveau WRInaute
 
Messages: 39
Inscription: Sam Mar 31, 2007 9:35

Message le Mar Mai 29, 2007 6:06

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: Tout sélectionner
<?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 :) :(


lupuz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 207
Inscription: Mer Mar 15, 2006 23:41

Message le Mar Mai 29, 2007 13:41

isset($_cookie['$_GET['id']'])
ne peux pas fonctionner enlève les ' de ton GET :

isset($_COOKIE[$_GET['id']])


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités