Partage
  • Partager sur Facebook
  • Partager sur Twitter

note des spectateurs

je suis une bille en PHP

Sujet résolu
Anonyme
    30 août 2006 à 10:59:43

    Salut les Zeros !

    Voilà je fais un site en étroite collaboration avec un pote mais nous sommes deux, et un seul codeur (moi) qui ne code que en html/css.

    Pourquoi ?

    Parce que c'est déja bien assez et pour le moment nous ne recherchons aucun codeur php tant que le site n'est pas en ligne.

    Voilà donc mon problème ce trouve ici :

    Nous faisons un site sur le cinéma et mon collaborateur souhaiterais mettre un system de "note de critique" sur 5 et totalisé les résultat pour faire une moyenne donnée a la critique

    (je vois pas si vous comprenez mais je peux pas faire plus clair)

    comme je sais qu'il faut du PHP et du SQL dans l'histoire, mais que je ne code pas dans ces domaines, j'aimerais que quelqu'un me montre un code, même basique (mais je ne pense pas que ce soit très compliqué ce que je demande).

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2006 à 19:36:28

      Bonjour je suis le pote en question et il ne s'est pas forcément très bien exprimé :
      En fait nous recherchons à avoir la même chose que sur ce site (regardez à droite et vous constaterez que les internautes peuvent mettre la note) : C'est par ici !

      J'espère que vous comprenez notre requète !
      Merci d'avance et bonne fin de journée !
      • Partager sur Facebook
      • Partager sur Twitter
        30 août 2006 à 20:02:34

        ceci est assez simple quand on s'y connait en PHP. J'ai déjà fait ça pour mon livre d'or mais vous comptez le faire pour un livre d'or ou pour chaque film comme le site que vous qvez montré ?? o_O
        • Partager sur Facebook
        • Partager sur Twitter
          30 août 2006 à 20:27:41

          On comptait faire ça pour chaque film. Malheureusement nos connaisssances PHP sont relativements faibles...pourrais tu nous aider ? En tout cas merci ;)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            30 août 2006 à 20:31:46

            Citation : Keristoph

            On comptait faire ça pour chaque film. Malheureusement nos connaisssances PHP sont relativements faibles...pourrais tu nous aider ? En tout cas merci ;)



            t'es marant toi, elles sont carrement nul :p

            et oui Homer on veut faire ça pour chaque film, mais on peut faire un champ(SQL) par film s'il le faut, on est très motivé ;)
            • Partager sur Facebook
            • Partager sur Twitter
              30 août 2006 à 20:31:52

              Tres facile . Lis le cours de Mateo ^^
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                30 août 2006 à 20:34:17

                je voudrais bien le re re lire mais je crois pas que ça changerai quelque chose, car comme je l'ai dit je suis une vraie buse en PHP et ça fait déja trois fois que je lis le tuto et je comprends toujours pas.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 août 2006 à 20:36:34

                  Est ce si compliqué que ça ? Il n'xiste pas quelque chose de "préfabriqué" que l'on pourrait utiliser ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 août 2006 à 20:41:46

                    formulaire.html :

                    <form action="vote.php" method="post">
                    <input type="radio" name="note" value="1" />1<br>
                    <input type="radio" name="note" value="2" />2<br>
                    <input type="radio" name="note" value="3" />3<br>
                    <input type="radio" name="note" value="4" />4<br>
                    <input type="radio" name="note" value="5" />5<br>




                    vote.php :

                    $reponse = mysql_query("SELECT * FROM note ORDER BY id") or die(mysql_error());;
                    while ($donnees = mysql_fetch_array($reponse) )
                    {
                    if ($_GET['id']=$donnees['id']
                    {
                    $donnees['som_note'] = $donnees['som_note'] + $_POST['note'];
                    $donnees['nbnote'] = $donnees['nbnote'] + 1;
                    $moy = $donnees['som_note'] / $donnees['nbnote'];
                    mysql_query("UPDATE note SET som_note=$donnees['som_note'], nbnote=$donnees['nbnote'] WHERE ID=$_GET['id']") or die(mysql_error());;
                    }
                    }
                    echo $moy;


                    Avec une table qui a pour champs : id (l'id lol), som_note (la somme des notes entrées) et nbnote (le nombre de vote). Après, c'est juste une moyenne mais il y a plusieurs méthodes et mon code n'est pas optimisé.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      30 août 2006 à 20:51:07

                      haa merci Damien j'avais pas vu
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 août 2006 à 20:54:28

                        Mais de rien les gars, mais pour tout vous dire, fin juillet je ne connaissais pas grand chose au php (rien à part le nom en fait). Les "pros" diront sûrement que mon code c'est de la m****. En lisant le début du cours de M@téo, vous comprendrez tout ce que j'ai fais et réussirez à bien l'adapter ou à faire un code cent fois mieux.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 août 2006 à 21:08:27

                          Table films :

                          id_film | nom_film | description_film | somme_notes | nombre_notes

                          => Ajouter une entrée (Et non un champ !!) pour chaque film

                          Le formulaire de notation :

                          echo '<form action="vote.php" method="post">
                          <input type="radio" name="note" value="1" />1<br />
                          <input type="radio" name="note" value="2" />2<br />
                          <input type="radio" name="note" value="3" />3<br />
                          <input type="radio" name="note" value="4" />4<br />
                          <input type="radio" name="note" value="5" />5<br />
                          <select name="film">'
                          ;
                          $sql=mysql_query("SELECT id_film,nom_film FROM films ORDER BY nom_film");
                          while ($array=mysql_fetch_assoc($sql))
                          {
                          echo '<option value="',$array['id_film'],'">',$array['nom_film'],'</option>';
                          }
                          echo '</select>
                          <input type="submit" name="submit" value="Noter" />
                          </form>'
                          ;


                          Edit : Formulaire édité, en espérant que personne n'a vu mon erreur ^^

                          (La mise en page du formulaire n'est pas géniale, mais vous pouvez adapter :p )
                          Il est également possible de créer les boutons radios dans une boucle, mais c'était encore plus rapide pour moi de copier/coller le formulaire plus haut :p
                          Enregistrement de la note :

                          if (isset($_POST['submit']))
                          {
                          $_POST['note']=intval($_POST['note']); //Pour éviter toute modification du formulaire
                          if ($_POST['note']>=1 && $_POST['note']<=5) //On vérifie que la note est valide
                          mysql_query("UPDATE films SET somme_notes=somme_notes+'$_POST[note]',nb_notes=nb_notes+1 WHERE id_film='$_POST[id_film]'");
                          }


                          Et enfin, pour afficher la note :

                          $sql=mysql_fetch_assoc(mysql_query("SELECT somme_notes,nb_notes FROM films WHERE id_film='$_GET[id_film]'"));
                          $moyenne=$sql['somme_notes']/$nb_notes; //Eventuellement, tu peux ajouter un arrondi de la note avec round() ou floor() pour éviter les nombres à 15 décimales
                          echo $moyenne;


                          Edit pour éviter l'erreur de division par 0 :

                          sql=mysql_fetch_assoc(mysql_query("SELECT somme_notes,nb_notes FROM films WHERE id_film='$_GET[id_film]'"));
                          if ($sql['nb_notes']==0)
                          echo 'Ce film n\'a reçu aucune note';
                          else
                          {
                          $moyenne=$sql['
                          somme_notes']/$nb_notes; //Eventuellement, tu peux ajouter un arrondi de la note avec round() ou floor() pour éviter les nombres à 15 décimales
                          echo $moyenne;
                          }
                           


                          Fin de l'édition ^^

                          J'utilise $_GET['id_film'] dans la requête SQL, ce qui veut dire que ce dernier bout de code doit être placé dans une page contenant ?id_film=(Numéro du film qui t'intéresse) à la fin de l'URL. (Je te renvoie au chapitre intitulé "Transmettre des variables" du cours Php de M@teo)

                          Voilà... Des bouts de code qui peuvent être adaptés assez facilement à ce dont tu as besoin... (Hé oui, l'adaptation est pratiquement toujours indispensable... Alors même si tu ne sais pas faire du Php, il va au moins falloir apprendre à le comprendre un peu :p Pour pouvoir modifier en fonction de tes besoins exacts ^^ )

                          Voilà... J'espère qu'il n'y a pas trop d'erreurs de syntaxe, difficile sans coloration (Et j'ai la flemme de tout vérifier avant :D )
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            30 août 2006 à 21:19:49

                            merci Veldryn

                            lol ok Damien, ba tu as de la chance d'avoir compris :p et ni voit rien de personnel mais je pense que je vais suivre Veldryn :euh:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 août 2006 à 21:34:05

                              Il y a un requete pour la moyenne :
                              SELECT AVG(note) FROM TABLE


                              Pas besoin de creer un autre champ supplementaire, la table peut etre comme ca :
                              id_film
                              nom_film
                              description_film
                              note_film
                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 août 2006 à 21:35:37

                                En lisant son code, il part sur la même méthode que moi (parce que c'est la plus simple :D ). Mais bon le truc en plus c'est qu'il utilise pas mal de fonctions pour s'assurer que les valeurs transmises sont les bonnes et n'ont pas été modifiées par des utilisateurs mal ententionnnés.

                                L'arrondi avec round() est pas mal pour avoir une moyenne assez courte.*

                                Edit : ouai bon, c'est vrai que la méthode de Grout est relativement simple aussi. :euh:
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  30 août 2006 à 21:36:46

                                  voilà j'ai commencer a recopier le code et euh ... je dois inserer un code PHP dans les pages des films ?

                                  henlala mon dieu je comprends niette c'est atroce !! c'est de la torture mdr
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 août 2006 à 21:43:50

                                    Je te conseille de vraiment t'attarder sur le cours de M@téo, tu saura comment intégrer le code. Tout d'abord vérifie que la variable existe, si non tu affiche le formulaire, si oui tu affiche la note.

                                    Page film.php?id="id du film"

                                    if (!isset ($_POST['note']))
                                    {
                                    echo '<form action="film.php?id='.$GET_['id'].'" method="post">
                                    <input type="radio" name="note" value="1" />1<br />
                                    <input type="radio" name="note" value="2" />2<br />
                                    <input type="radio" name="note" value="3" />3<br />
                                    <input type="radio" name="note" value="4" />4<br />
                                    <input type="radio" name="note" value="5" />5<br />
                                    <select name="film">'
                                    ;
                                    $sql=mysql_query("SELECT id_film,nom_film FROM films ORDER BY nom_film");
                                    while ($array=mysql_fetch_assoc($sql))
                                    {
                                    echo '<option value="',$array['id_film'],'">',$array['nom_film'],'</option>';
                                    }
                                    echo '</select>
                                    <input type="submit" name="submit" value="Noter" />
                                    </form>'

                                    }
                                    else
                                    {
                                    $_POST['note']=intval($_POST['note']); //Pour éviter toute modification du formulaire
                                    if ($_POST['note']>=1 && $_POST['note']<=5) //On vérifie que la note est valide
                                    mysql_query("UPDATE films SET somme_notes=somme_notes+'$_POST[note]',nb_notes=nb_notes+1 WHERE id_film='$_POST[id_film]'");
                                    $sql=mysql_fetch_assoc(mysql_query("SELECT somme_notes,nb_notes FROM films WHERE id_film='$_GET[id_film]'"));
                                    $moyenne=$sql['somme_notes']/$nb_notes; //Eventuellement, tu peux ajouter un arrondi de la note avec round() ou floor() pour éviter les nombres à 15 décimales
                                    echo "la note de ce film est :";
                                    echo $moyenne;
                                    }



                                    Okay ! :-°
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      30 août 2006 à 21:52:11

                                      Bon c'est bon ça me pete les c**** je suis fatigué en plus et c'est bientôt le rentré, merci a ceux qui m'ont aidé mais on verra ça un autre jour quand le site sera en ligne et qu'on sera riche pour pouvoir integrer un codeur PHP au seins du groupe parce que là voilà.

                                      Mais merci comme même et désolé de vous avoir fait perdre votre temps
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 août 2006 à 21:58:12

                                        Citation : Grout

                                        Il y a un requete pour la moyenne :



                                        Uniquement si tu as une entrée par note. AVG ne divise pas un champ par un autre.

                                        Or, là, le choix qui a été fait, c'est d'avoir un film par entrée.

                                        Il serait possible de faire plus compliqué, en ne gardant que les champs id_film et note, en faisant une table à part pour contenir nom_film et description_film, et en faisant une entrée par note.

                                        Là, tu pourrais utiliser un AVG avec un Group By. Mais c'est beaucoup de complication pour pas grand chose (Ca n'a d'intérêt que si tu veux faire des statistiques avancées, et que tu souhaites donc conserver toutes les notes séparément... Ce qui n'est pas le cas ici, je crois ^^ )
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          30 août 2006 à 22:00:26

                                          Ah, j'avais mal lu désolé ^^
                                          Oui c'est sur que la c'est pas trop adapté AVG, voir pas du tout ^^
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            31 août 2006 à 1:26:52

                                            Sinon pour la moyenne j'ai ce qu'il faut :p
                                            <?php mysql_connect("localhost", "root", "");
                                            mysql_select_db("database");

                                            //On compte le nombre d'entrées
                                            $req_nombre_de_notes = mysql_query("SELECT COUNT(*) AS nbre_notes FROM film");
                                            $array_nombre_de_note = mysql_fetch_array($req_nombre_de_notes);
                                            $nombre_de_notes = $array_nombre_de_notes['nbre_notes'];
                                            //$nombre_de_notes contient comme son nom  l'indique le nombre de notes ^^
                                            if($nombre_de_notes == 0) //Si il n'y a aucune entrée...
                                            {
                                                echo '<p>Il n\'y a aucune note pour ce film.</p>';
                                            }
                                            else //Sinon ça veut dire qu'
                                            on a des notes ;-)
                                            {

                                                $moyenne = 0; // En fait, l'astuce consite à créer une variable $moyenne vide que l'on remplit au fur et à mesure ^^

                                                req_note = mysql_query("SELECT note FROM film") or die(mysql_error());
                                                while($array_note = mysql_fetch_array($req_note)
                                                {
                                                    $note = array_note['note'];
                                                    $moyenne = $moyenne + $note; //On remplit la variable $moyenne
                                                }
                                                //Là, la variable $moyenne contient toutes les notes ajoutées, on va maintenant diviser par le nombre de notes (eh oui c'est ça une moyenne) ;-)

                                                //On compte le nombre d'entrées
                                                $req_nombre_de_notes = mysql_query("SELECT COUNT(*) AS nbre_notes FROM film");
                                                $array_nombre_de_note = mysql_fetch_array($req_nombre_de_notes");
                                                $nombre_de_notes = $array_nombre_de_notes['nbre_notes'];
                                                //$nombre_de_notes contient comme son nom  l'indique le nombre de notes ^^
                                                $moyenne = $moyenne / $nombre_de_notes; //On divise comme prévu

                                                echo '<p>La moyenne actuelle pour ce film est de ' . $moyenne . ' / 5 en ' . $nombre_de_notes . ' votes.</p>';
                                            }?>   


                                            ça devrait etre bon pour la moyenne ;)

                                            Pense juste à modifier chaque fois qu'il y a écrit film en utilisant le $_GET comme l'a fait damien12345 parceque moi j'ai pas tout compris :p

                                            Sinon moi c'est Kanish pas homer :lol:

                                            @+
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              31 août 2006 à 1:34:46

                                              Tu as fait 3 requêtes là où 1 seule suffisait :p

                                              Et tant qu'à faire une entrée par table, AVG() fait tout ton code en une seule fonction :p

                                              Par contre, tu prends en compte le cas où le film n'a jamais été noté ^^ (Moi j'aurais une erreur, impossible de diviser par 0 :-° )
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                31 août 2006 à 6:01:04

                                                c'est pour que le code soit compréhensible, je préfère faire plus de requètes. ;)
                                                Si le film n'a pas été noté ça fait pas un bug ^^

                                                Citation : Moi même

                                                //On compte le nombre d'entrées
                                                $req_nombre_de_notes = mysql_query("SELECT COUNT(*) AS nbre_notes FROM film");
                                                $array_nombre_de_note = mysql_fetch_array($req_nombre_de_notes);
                                                $nombre_de_notes = $array_nombre_de_notes['nbre_notes'];
                                                //$nombre_de_notes contient comme son nom  l'indique le nombre de notes ^^
                                                if($nombre_de_notes == 0) //Si il n'y a aucune entrée...
                                                {
                                                    echo '<p>Il n\'y a aucune note pour ce film.</p>';
                                                }
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                note des spectateurs

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown