système de notation par étoiles
Re Bonjour !!
C'est encore moi !!!!
Cette fois, j'ai un pb avec un code que j'ai trouvé pour un système de notation avec étoiles.
Il est pas mal, mais comment le lier à une page en particulier ?
En fait je fais un annuaire. J'ai donc mes adresses qui s'affichent suite à la recherche de l'internaute.
Dans chaque adresse affichée, je voudrais une page "avis". J'ai donc créé un bouton avec une transmission de l'id, et du nom dans l'url.
Etant débutante je galère !!!
Voici le code que j'ai trouvé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| <?php
//Variable de connexion BDD
$nom_du_serveur ="localhost";
$nom_de_la_base ="votes";
$nom_utilisateur ="root";
$passe ="";
//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();
//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
//Vérification d'accès à la base de données
mysql_select_db("$nom_de_la_base") or die ('Erreur :'.mysql_error());
//Fonction pour la notation
function notation($id_vote,$ip_vote){
//L'utilisateur a t'il déjà voté?
$deja_voter = mysql_query("SELECT ip FROM note WHERE ip = '".mysql_real_escape_string($ip_vote)."' AND id_page = '".mysql_real_escape_string($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 cet article</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>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</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){
die ("Un seul vote autorisé ... merci!");
}
//Note de l'utilisateur
$note = $_POST['note'];
//Insertion en BDD
$insert = mysql_query("INSERT INTO note VALUES ( '', '".mysql_real_escape_string($id_vote)."', '".mysql_real_escape_string($note)."', '".mysql_real_escape_string($ip_vote)."' ) ");
//Si il y a une erreur
if(!$insert) {
die('Requête invalide : ' . mysql_error());
}
//Tout est ok, on informe et on redirige
else{
//On créer un cookie d'une durée de 20 secondes pour éviter les retours en arrière
setcookie('deja_voter',$id_vote,(time() + 20));
echo 'Merci d\'avoir noté cet article!<br/>
Chargement en cours <img alt="Loading" src="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>';
}
}
//Combien d'utilisateurs ont votés?
$nombre_vote = mysql_query("SELECT id FROM note WHERE id_page = '".mysql_real_escape_string($id_vote)."'");
$total_vote = mysql_num_rows($nombre_vote);
if($total_vote != 0){
echo 'Nombre de vote : '.$total_vote.'<br/>';
}
//Total des votes des utilisateurs
$calcul_vote = mysql_query("SELECT SUM(note) AS totalmoyenne FROM note WHERE id_page = '".mysql_real_escape_string($id_vote)."'");
$data = mysql_fetch_array($calcul_vote);
$total_calcul_vote = $data['totalmoyenne'];
if($total_calcul_vote != 0){
echo 'Total des votes : '.$total_calcul_vote.'<br/>';
}
//Moyenne des votes des utilisateurs
if($total_vote != NULL && $total_calcul_vote != NULL){
$moyenne = number_format($total_calcul_vote/$total_vote, 2, ',', '');
//Si les 2 chiffres après la virgule sont 2 zéros, on les suppriment pour obtenir un entier
echo 'Note : '.str_replace(',00','',$moyenne).'/10';
//On affiche les étoiles
for($i=1; $i<=$moyenne;$i++){
echo '<img alt="'.$i.'" src="images-vote/etoile.png" style="width:32px;height:32px;"/>';
}
}
else{
echo 'Aucun vote pour le moment.';
}
}
?> |
ça fonctionne bien, sauf que en l'état les votes s'affichent tous pareil pour toutes mes adresses...
Dans mon fichier avis, j'ai la fonction suivante :
Code:
1 2 3 4
| <?php
include('fonctions-vote.php');
notation('5',$ip_vote);
?> |
Autant j'arrive à faire un système de commentaires bien attaché à la bonne personne dans l'annuaire, que là j'y arrive pas....
Comment faire comprendre à mon système qu'il doit être lié à une adresse en particulier ?
Merci encore pour votre aide !!
Karine