IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

système de notation par étoiles


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Personne pour m'aider ?
    Même avec un autre système ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Il faut passer l'id de la page en cours à la fonction notation()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    include('fonctions-vote.php');
    notation($id_page,$ip_vote);
    ?>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par KREEN1978 Voir le message
    Comment faire comprendre à mon système qu'il doit être lié à une adresse en particulier ?
    La réponse est dans la question.

    Il faut non seulement ajouter le paramètre "id_page" à la fonction notation(), mais aussi dans la table de la Bdd, les requêtes et dans le traitement/calcul des votes.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Ah beh oui, dis comme ça c'est évident
    je vais tenter comme ça, en espérant que j'y arrive vite !!

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    YEEHHHHHH ! ça fonctionne NICKEL !!!!

    M E R C I !!


  7. #7
    Invité
    Invité(e)
    Par défaut
    Yop.
    N'hésite pas à poster le code ici.

    ca peut servir à d'autres personnes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Système de vote par étoile
    Par zbibounette dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/04/2022, 14h37
  2. Notation par étoile dans document docx
    Par Laurent13010 dans le forum Word
    Réponses: 4
    Dernier message: 01/11/2009, 21h39
  3. Réponses: 1
    Dernier message: 22/09/2009, 10h21
  4. notation par étoiles et position
    Par worldhugo dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 05/06/2009, 21h15
  5. notations par étoiles
    Par babafredo dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/04/2008, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo