Aller au contenu

autoriser le clique sur un lien une seule fois.


Sujets conseillés

Posté

Bonjour à tous,

Je poste sur ce forum car j'ai déjà essayé de trouver une solution en JS mais en vain. Alors on m'a orienté vers le PHP.

J'ai fais mon premier site et maintenant je buche sur un problème.

Sur mon site des internautes viennent poster des messages et on peut ensuite voter pour ces messages.

Le vote se fait grâce à un lien qui incrémente de +1 un champs d'une base de donnée :

<a href="index.php?page=<?echo "$page"?>&votecuncon=r&categorie=<?php echo "$categorie" ?>&souscategorie=<?php echo "$souscategorie" ?>&id=<?php echo $donnees['id'];?>" >voter</a>

La partie sql :

if (isset($_GET['id']) AND isset($_GET['votecuncon']))
{
$id=$_GET['id'];
if(true){//true c-à-d si votre formulaire est validé
}
mysql_query("UPDATE tousdescons SET votecuncon=votecuncon+1 WHERE id='$id'");
}

tout cela fonctionne mais j'aimerais que chaque visiteurs ne puisse voter qu'une fois. Le problème c'est que j'ai déjà essayé en désactivant le lien quand on clique dessus(en javascript) mais comme la page se recharge , le lien se réactive de suite. Merci d'avance pour votre aide.

Posté

Le souci, c'est que tu ne sembles pas enregistrer de données quant à la provenance de l'utilisateur : il n'est pas nécessaire d'être inscrit pour pouvoir voter.

Il va donc falloir que tu enregistres l'adresse IP du votant en base, puis que tu vérifies pour un vote, que cette adresse IP n'a pas déjà voté.

Posté

merci beaucoup pour ton aide mais pourrais-tu me donner un peu plus de détail. Ca ne fait pas longtemps que je me suis mis au PHP.

comment faire pour enregistrer l'ip (en me creusant la tête je devrais y arriver) et surtout une fois qu'il est enrgistrer comment faire pour qu'il ne puisse plus voter ?

Posté

Tu vas être obligé de créer une table intermédiaire de votes.

Dans cette table, tu enregistres l'ID du vote, ainsi que l'adresse IP du votant (que tu obtiens avec $_SERVER['REMOTE_ADDR'];).

Ensuite, pour chaque vote, il te suffit de vérifier avec une requête SQL s'il existe déjà une entrée qui correspond au couple ID/IP. Si tu as une réponse, tu ne comptabilises pas de vote supplémentaire.

Posté
Le souci, c'est que tu ne sembles pas enregistrer de données quant à la provenance de l'utilisateur : il n'est pas nécessaire d'être inscrit pour pouvoir voter.

Il va donc falloir que tu enregistres l'adresse IP du votant en base, puis que tu vérifies pour un vote, que cette adresse IP n'a pas déjà voté.

pas vraiment besoin, un simple cookie ferait l'affaire, voire même juste dans ton formulaire de saisie, ton if valide dans la base et à la suite ne devrait afficher qu'une partie du formulaire (sans le lien), le else ayant l'intégralité du formulaire
Posté

Voilà où j'en suis : J'ai juste réussi a faire enregistrer l'ip du visiteur et l'id du message. Mais maintenant je ne vois pas comment faire la condition si l'ip et l'id du message sont déjà enregistré ne pas prendre en compte le vote.

if (isset($_GET['id']) AND isset($_GET['votetranquille']))
{
$id=$_GET['id'];
$ip=$_SERVER['REMOTE_ADDR'];
if(true){//true c-à-d si votre formulaire est validé
}
mysql_query("UPDATE monsite SET votetranquille=votetranquille+1 WHERE id='$id'");
[b]mysql_query("INSERT INTO vote VALUES('" . $id . "', '" . $ip . "')");[/b]
}

Posté
pas vraiment besoin, un simple cookie ferait l'affaire, voire même juste dans ton formulaire de saisie, ton if valide dans la base et à la suite ne devrait afficher qu'une partie du formulaire (sans le lien), le else ayant l'intégralité du formulaire

Je n'ai pas de formulaire, c'est juste un lien. Mais si c'est possible et surtout plus simple, je suis preneur. Comment crée un cookie. et comment interdire le vote pour le message déjà voté et pas l'ensemble des messages avec ce cookie

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...