Bonjour,
J'empêche un internaute de voter 2 fois avec un système de cookies que je paramètre au maxi (3600 secondes).
Blocage par IP + ID du topic.
J'ai deux problèmes:
1) si un internaute vote pour un topic, plus personne d'autre ne peut voter pour ce topic.
2) si un internaute vote pour un topic A il lui est donc interdit de revoter pour ce topic A, mais s'il va voter pour un topic B le vote sur le topic A est à nouveau possible.
En fait on dirait que l'interdiction de vote ne concerne que le dernier topic ayant reçu un vote et qu'en plus elle bloque toutes les IP, pas seulement celle du votant.
L'IP je la récupère ainsi :
La fonction déjà voté est celle-ci :
Et la création du cookies dans mon header :
Si vous avez une idée, je suis preneur.
Merci
J'empêche un internaute de voter 2 fois avec un système de cookies que je paramètre au maxi (3600 secondes).
Blocage par IP + ID du topic.
J'ai deux problèmes:
1) si un internaute vote pour un topic, plus personne d'autre ne peut voter pour ce topic.
2) si un internaute vote pour un topic A il lui est donc interdit de revoter pour ce topic A, mais s'il va voter pour un topic B le vote sur le topic A est à nouveau possible.
En fait on dirait que l'interdiction de vote ne concerne que le dernier topic ayant reçu un vote et qu'en plus elle bloque toutes les IP, pas seulement celle du votant.
L'IP je la récupère ainsi :
Code:
//Fonction pour l'ip
function getIp()
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip_vote = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip_vote = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip_vote = $_SERVER['REMOTE_ADDR'];
}
return $ip_vote;
}
//Ip utilisateur
$ip_vote = getIp();
La fonction déjà voté est celle-ci :
Code:
//Fonction pour la notation
function notation($id_vote,$ip_vote){
//L'utilisateur a t'il déja voté?
$deja_voter = mysql_query("SELECT ip FROM note WHERE ip = \"$ip_vote\" AND id_page = \"$id_vote\"");
//L'utilisateur n'a pas voté, on montre le formulaire
if(mysql_num_rows($deja_voter) == 0)
{
echo ' <form name="monform" id="monform" method="post"> <label>Noter cette recette</label> <select name="note" onchange="javascript:submit(this)"> <option value="">Note</option> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </form> ';
}
//Si action de valider et que la note est différent de vide
if(isset($_POST['note']) && $_POST['note'] != NULL){
//On vérifie si le cookie existe et si tel est le cas, c'est que l'utilisateur tente de voter plusieurs fois
if(isset($_COOKIE["deja_voter"]) && $_COOKIE["deja_voter"] == $id_vote){
echo ("Un seul vote autorisé ... merci!");
return false;
}
//Note de l'utilisateur
$note = $_POST['note'];
//Insertion en BDD
$insert = mysql_query('INSERT INTO note (id_page, note, ip) VALUES (" '.$id_vote.' ", " '.$note.' ", " '.$ip_vote.' ") ');
//Si il y a une erreur
if(!$insert) {
echo('Requête invalide : ' . mysql_error());
return false;
}
//Tout est ok, on informe et on redirige
else{
echo 'Merci d\'avoir noté cette recette! <br/> Chargement en cours <img alt="Loading" src="images/images-vote/loading.gif" style="width:32px;height:32px;"/> <script type="text/javascript"> document.getElementById("monform").innerHTML = ""; window.setTimeout(function(){self.location.href="'.$_SERVER['REQUEST_URI'].'";},3000); </script>';
}
}
Et la création du cookies dans mon header :
Code:
<!-- PHP -->
$topic_id = request_var('t', 0);
//On créer un cookie d'une duréé d'une heure pour éviter les retours en arrière
if(isset($_POST['note']) && $_POST['note'] != NULL)
{
setcookie('deja_voter',$topic_id,(time() + 3600));
}
<!-- ENDPHP -->
Si vous avez une idée, je suis preneur.
Merci