Partage
  • Partager sur Facebook
  • Partager sur Twitter

QCM à choix multiple

QCM à choix multiple affiche questions et réponses, venant de la bdd

    15 juin 2018 à 10:17:07

    Bonjour, 

    Merci de m'avoir répondu. Je dois rendre le tout dans quelque minute.

    J'ai pas compris ce code :

    <code>idQuestion</code><code> = $donneesQuestion['id'];</code><br>$req2 = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions <code>where id=:id</code>Question)');<br><code>$req</code><code>2->execute([</code><code>'idQuestion'</code> <code>=> </code><code>$idQuestion</code><code>]);</code>



    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2018 à 10:25:57

      oups je n'avais pas vu que ça avait buggé!

      $idQuestion = $donneesQuestion['id'];
      $req2 = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id=:idQuestion)');
      $req2->execute(['idQuestion'=> $idQuestion]);
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2018 à 11:32:17

        Vous inquiétez pas c'es pas grave :)

        Je viens de faire le point avec mon tuteur (super sympa) qui m'a donner du temps pour finir l'outils. (ouf !!! :) )

        Revenons a nos moutons, :) 

        Après modification du code en fonction de ce que vous m'avez dit, j'ai fait ceci : 

        Code (revue et commenté) :


        <?php
             // Connexion à la base de données
             try
             {
                  $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
             }
             catch(Exception $e)
             {
                  die('Erreur : '.$e->getMessage());
             }                
        
             $req = $bdd->query('SELECT * FROM questions'); // requette pour afficher une question (teste)               
             //$donnees = $req->fetch(); // execution de la requette et récupération des données
                          
        ?>
        
                        <form action='QCM_Trait.php' method='POST'> 
                            <?php
                            while ($donnees = $req->fetch()) // boucle parmetant d'affiche toutes les questions
                                {        
                            ?>
                                <div class='formulaires01'> <!-- div dans la boucle while contenant les questions et les réponses (sauf le bouton validé) -->
                                    <?php $idQuestion = $donnees['id'];?> <!-- récupération de l'ID des question -->
                                    <p><em>Q. : </em><?php echo $donnees['question'];?> </p> <!-- Affichage de la 1ère question de cette boucle while -->
                                    <input type='hidden' name='idQuestion' value='<?php echo $idQuestion;?>'> <!-- input caché qui récupère l'id de cette question pour pouvoir l'envoyer sur la page de traitement-->
                                
                                    <?php
                                        $req->closeCursor(); // Important : on libère le curseur pour la prochaine requête
        
                                        $req = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.              
                                        $req->execute(['idQuestion' => $idQuestion]); // éxécution de la requette préparer
                                        
                                        while ($donnees = $req->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                        {                            
                                    ?>
                                        <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                            <input type='checkbox' id='questionQCM' name='question[<?php echo $donnees['id']; ?>]' value='1'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                            <label for='questionQCM'><?php echo $donnees['reponse'];?></label>
                                        </div>
        
                                    <?php
                                        } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées
                                        $req->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle
                                    ?>
                                </div> <!-- Fermeture du div class formulaire01 -->
                            <?php
                                } // Fermeture de la boucle while parmetant d'affiche toutes les questions
                            ?>  
                                   
                            <div class='formulaires01'> <!-- div contenant le bouton Valider (en dehors de toute les boucle mais toujours dans le formulaire) -->
                                <button class='valid' id='boutonValide' type='submit'>Valider</button> <!-- Bouton d'envoie du formulaire -->
                            </div>
                
                        </form> <!-- Fermeture du form -->

        Mais petit problème, la boucle while pour afficher toutes les questions ne marche pas, elle affiche que la première question dans la base.

        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2018 à 11:55:03

          il faut modifier le nom des variables des boucles: sinon la variable $req qui est censée contenir vos questions se retrouve modifiée lorsque vous faites la requete pour les réponses

          $req = requete pour récupérer toutes les questions
          while ($donneesQuestion = $req->fetch()) // boucle permetant d'affiche toutes les questions
               {
                    $req2 = requete pour récupérer les réponses
                    while ($donneesReponse = $req2->fetch()) // boucle permetant d'affiche toutes les réponses
                    {
                    }
           
          }



          -
          Edité par Ralchimist 15 juin 2018 à 11:55:29

          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2018 à 12:14:23

            J'ai modifier le nom des variables comme convenue :

            <?php
                                while ($donneesQuestions = $req->fetch()) // boucle parmetant d'affiche toutes les questions
                                    {        
                                ?>
                                    <div class='formulaires01'> <!-- div dans la boucle while contenant les questions et les réponses (sauf le bouton validé) -->
                                        <?php $idQuestion = $donneesQuestions['id'];?> <!-- récupération de l'ID des question -->
                                        <p><em>Q. : </em><?php echo $donneesQuestions['question'];?> </p> <!-- Affichage de la 1ère question de cette boucle while -->
                                        <input type='hidden' name='idQuestion' value='<?php echo $idQuestion;?>'> <!-- input caché qui récupère l'id de cette question pour pouvoir l'envoyer sur la page de traitement-->
                                    
                                        <?php
                                            $req->closeCursor(); // Important : on libère le curseur pour la prochaine requête
            
                                            $req = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.              
                                            $req->execute(['idQuestion' => $idQuestion]); // éxécution de la requette préparer
                                            
                                            while ($donneesReponses = $req->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                            {                            
                                        ?>
                                            <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                                <input type='checkbox' id='questionQCM' name='question[<?php echo $donneesReponses['id']; ?>]' value='1'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                                <label for='questionQCM'><?php echo $donneesReponses['reponse'];?></label>
                                            </div>
            
                                        <?php
                                            } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées
                                            $req->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle
                                        ?>
                                    </div> <!-- Fermeture du div class formulaire01 -->
                                <?php
                                    } // Fermeture de la boucle while parmetant d'affiche toutes les questions
                                ?>  

            Mais rien a changer. Je me dit peut-etre que ça vient de mes "$req->closeCursor();" dans la boucle. Du coup j'ai testé en les enlever (tout les cas possible : la première seulement ou la deuxième seulement ou les 2). Mais rien ne change toujours.

            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2018 à 12:19:27

              vous avez oublié de modifier le nom de la variable $req!

              et oui, vous devez enlever le "$req->closeCursor()" et le placer APRES la boucle while!

              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2018 à 12:42:53

                J'ai modifier le nom des variables $req, mettre un des closeCursor en dehors de la boucle while mais toujours rien 

                Code : 

                <?php
                                // Connexion à la base de données
                                try
                                {
                                    $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                }
                                catch(Exception $e)
                                {
                                        die('Erreur : '.$e->getMessage());
                                }                
                
                                $reqQuestion = $bdd->query('SELECT * FROM questions'); // requette pour afficher une question (teste)               
                                //$donnees = $req->fetch(); // execution de la requette et récupération des données
                                  
                            ?>
                
                                <form action='QCM_Trait.php' method='POST'> 
                                    <?php
                                    while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                        {        
                                    ?>
                                        <div class='formulaires01'> <!-- div dans la boucle while contenant les questions et les réponses (sauf le bouton validé) -->
                                            <?php $idQuestion = $donneesQuestions['id'];?> <!-- récupération de l'ID des question -->
                                            <p><em>Q. : </em><?php echo $donneesQuestions['question'];?> </p> <!-- Affichage de la 1ère question de cette boucle while -->
                                            <input type='hidden' name='idQuestion' value='<?php echo $idQuestion;?>'> <!-- input caché qui récupère l'id de cette question pour pouvoir l'envoyer sur la page de traitement-->
                                        
                                            <?php
                                                $reqQuestion->closeCursor(); // Important : on libère le curseur pour la prochaine requête
                
                                                $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.              
                                                $reqReponse->execute(['idQuestion' => $idQuestion]); // éxécution de la requette préparer
                                                
                                                while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                {                            
                                            ?>
                                                <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                                    <input type='checkbox' id='questionQCM' name='question[<?php echo $donneesReponses['id']; ?>]' value='1'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                                    <label for='questionQCM'><?php echo $donneesReponses['reponse'];?></label>
                                                </div>
                
                                            <?php
                                                } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées
                                            ?>
                                        </div> <!-- Fermeture du div class formulaire01 -->
                                    <?php
                                        } // Fermeture de la boucle while parmetant d'affiche toutes les questions
                                        $reqReponse->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle
                                    ?>  
                
                                    <div> <!-- div contenant le bouton Valider (en dehors de toute les boucle mais toujours dans le formulaire) -->
                                        <button class='valid' id='boutonValide' type='submit'>Valider</button> <!-- Bouton d'envoie du formulaire -->
                                    </div>
                        
                                </form> <!-- Fermeture du form -->

                aperçu résultat :

                Pour le bouton valider qui est tout en bas, ne vous inquiétez pas; c'est tout en bas parce que je l'ai enlever dans le div classe formulaire01 (pour ne pas bouclé le bouton de validation)

                • Partager sur Facebook
                • Partager sur Twitter
                  15 juin 2018 à 12:51:50

                  c'est le $reqQuestion->closeCursor() qu'il faut sortir de la boucle des questions. Sinon vous fermez la requete lors du premier passage dans la boucle.

                  et le $reqReponse->closeCursor() doit être juste après la fermeture de la boucle sur les réponses

                                  // Connexion à la base de données
                                  try
                                  {
                                      $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                  }
                                  catch(Exception $e)
                                  {
                                          die('Erreur : '.$e->getMessage());
                                  }               
                   
                                  $reqQuestion = $bdd->query('SELECT * FROM questions'); // requette pour afficher une question (teste)              
                                  //$donnees = $req->fetch(); // execution de la requette et récupération des données
                                     
                              ?>
                   
                                  <form action='QCM_Trait.php' method='POST'>
                                      <?php
                                      while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                          {       
                                      ?>
                                          <div class='formulaires01'> <!-- div dans la boucle while contenant les questions et les réponses (sauf le bouton validé) -->
                                              <?php $idQuestion = $donneesQuestions['id'];?> <!-- récupération de l'ID des question -->
                                              <p><em>Q. : </em><?php echo $donneesQuestions['question'];?> </p> <!-- Affichage de la 1ère question de cette boucle while -->
                                              <input type='hidden' name='idQuestion' value='<?php echo $idQuestion;?>'> <!-- input caché qui récupère l'id de cette question pour pouvoir l'envoyer sur la page de traitement-->
                                           
                                              <?php                               
                   
                                                  $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.             
                                                  $reqReponse->execute(['idQuestion' => $idQuestion]); // éxécution de la requette préparer
                                                   
                                                  while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                  {                           
                                              ?>
                                                  <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                                      <input type='checkbox' id='questionQCM' name='question[<?php echo $donneesReponses['id']; ?>]' value='1'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                                      <label for='questionQCM'><?php echo $donneesReponses['reponse'];?></label>
                                                  </div>
                   
                                              <?php
                                                  } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées
                  $reqReponse->closeCursor(); // Important : on libère le curseur pour la prochaine requête
                                              ?>
                                          </div> <!-- Fermeture du div class formulaire01 -->
                                      <?php
                                          } // Fermeture de la boucle while parmetant d'affiche toutes les questions
                                          $reqQuestion->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle
                                      ?> 
                   
                                      <div> <!-- div contenant le bouton Valider (en dehors de toute les boucle mais toujours dans le formulaire) -->
                                          <button class='valid' id='boutonValide' type='submit'>Valider</button> <!-- Bouton d'envoie du formulaire -->
                                      </div>
                           
                                  </form> <!-- Fermeture du form -->



                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juin 2018 à 13:37:30

                    Ça marche impeccablement MERCI !

                    Maintenant comment je fait pour ajouté +10 dans ma variable note si j'ai une bonne réponse et +0 si j'ai une mauvaise réponse (en fonction du nombre de question et de réponse que j'ai sur dans le formulaire) sur la page de traitement ?

                    Rappelle de la page de traitement :

                    <?php
                    $idQuestion = $_POST['idQuestion'];
                    
                        try
                        {
                            $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        }
                        catch(Exception $e)
                        {
                            die('Erreur : '.$e->getMessage());
                        }   
                    
                        $req = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                        $req->execute(['idQuestion' => $idQuestion]);
                    
                    $choix = true; 
                    $note = 0;
                    $i = 0; 
                            while ($donnees = $req->fetch()) { // le foreach permet de lire les lignes du tableau dans lequel se trouve les valeurs des select coché par l'utilisateur après envoie du formulaire
                                //print_r($reponse);
                                if ($donnees['valide'] ==1 && !isset($_POST['question'][$donnees['id']])) {
                                    $choix = false;
                                    echo "bonne réponse $i manquante<br/>";
                                    break;
                                } elseif ($donnees['valide'] ==0 && isset($_POST['question'][$donnees['id']])) {
                                    $choix = false;
                                    echo "mauvaise réponse $i cochée<br/>";
                                    break;
                                }   
                                $i++; 
                            }
                            if ($choix == true) {
                                echo ('bonne rep');
                                $note = 10;
                                echo "<br>". $note;
                            } else {
                                echo ('mauvaise rep');
                                $note;
                                echo "<br>". $note; 
                            }
                    ?>



                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juin 2018 à 14:20:28

                      en fait le code ne fonctionnera pas pour plusieurs questions.
                      il faut d'abord modifier le name des checkbox:

                      <input type='checkbox' id='questionQCM' name='question[<?php echo $donneesQuestions['id'][<?php echo $donneesReponses['id']; ?>]' value='1'>

                      comme ca vous récupèrerait un tableau $_POST['question'] contenant lui-même un tableau avec les ID des questions et chaque ID contiendra un tableau avec les réponses cochées.

                      Dans votre page de traitement, vous devez donc aussi faire un première boucle sur les questions, et dedans une boucle sur les réponses (comme vous avez fait pour le formulaire)

                      En prenant bien soin de remplacer

                      $_POST['question'][$donnees['id']

                      par

                      $_POST['question'][$idQuestion][$donnees['id']





                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 juin 2018 à 15:37:26

                        Si j'ai bien compris dans le checkbox la modification doit être comme ça ? :

                        <input type='checkbox' id='questionQCM' name="question[[<?php echo $donneesQuestions['id']; ?>][<?php echo $donneesReponses['id']; ?>]]" value='1'>

                        Et sur la page de traitement, je modifie le if comme ça ? :

                         if ($donnees['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                        $choix = false;
                                        echo "bonne réponse $i manquante<br/>";
                                        break;
                                    } elseif ($donnees['valide'] ==0 && isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                        $choix = false;
                                        echo "mauvaise réponse $i cochée<br/>";
                                        break;
                                    }

                        Si oui, après éxecution j'ai, après traitement : 

                        • bonne réponse 1 manquante
                        • mauvaise rep

                        Et pour la page du QCM, voici un exemple d'input que j'ai, après ctrl-u :

                        <input type='checkbox' id='questionQCM' name="question[[3][10]]" value='1'>



                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 juin 2018 à 15:48:43

                          non, vous avez ajouté des [] en plus dans le name des checkbox. Vous devriez avoir question[3][10] or là vous avez question[[3][10]])

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 juin 2018 à 16:16:40

                            C'est bon j'obtient bien : name="question[2][5]"

                            Mais j'obtient "mauvaise réponse" quelque soit la case que je coche pour les toutes les questions, sauf quand je coche les bonnes réponses pour la dernière question, j'obtient "bonne réponse".

                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 juin 2018 à 16:34:26

                              montrer moi votre page traitement.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 juin 2018 à 16:39:35

                                Voici la page de traitement :

                                <?php
                                $idQuestion = $_POST['idQuestion'];
                                
                                    try
                                    {
                                        $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                    }
                                    catch(Exception $e)
                                    {
                                        die('Erreur : '.$e->getMessage());
                                    }   
                                
                                    $req = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                                    $req->execute(['idQuestion' => $idQuestion]);
                                
                                $choix = true; 
                                $note = 0;
                                $i = 0; 
                                        while ($donnees = $req->fetch()) { // le foreach permet de lire les lignes du tableau dans lequel se trouve les valeurs des select coché par l'utilisateur après envoie du formulaire
                                            //print_r($reponse);
                                            if ($donnees['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                                $choix = false;
                                                echo "bonne réponse $i manquante<br/>";
                                                break;
                                            } elseif ($donnees['valide'] ==0 && isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                                $choix = false;
                                                echo "mauvaise réponse $i cochée<br/>";
                                                break;
                                            }   
                                            $i++; 
                                        }
                                        if ($choix == true) {
                                            echo ('bonne rep');
                                            $note = 10;
                                            echo "<br>". $note;
                                        } else {
                                            echo ('mauvaise rep');
                                            $note;
                                            echo "<br>". $note; 
                                        }
                                ?>



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 juin 2018 à 16:43:13

                                  Ralchimist a écrit:

                                  Dans votre page de traitement, vous devez donc aussi faire une première boucle sur les questions, et dedans une boucle sur les réponses (comme vous avez fait pour le formulaire)


                                  Vous n'avez pas fait cette modification là.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 juin 2018 à 16:52:05

                                    Aaah oui désolé, éxcusez moi moi j'avais pas vu ! 

                                    Donc je doit faire une boucle comme mes 2 boucle while sur la page du QCM, mais ces boucl je doit les faire sur éxactement comme dans le QCM : 

                                    Comme ça : 

                                    while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                                            {

                                    et :

                                    while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                                    {

                                    en faisant donc les requêtes sur ma page de traitement ?

                                    Ou je doit juste récupperer ces variable par $_POST (sur la page du QCM) et je les rappellent dans la boucle ?

                                    Ralchimist a écrit:

                                    Dans votre page de traitement, vous devez donc aussi faire un première boucle sur les questions, et dedans une boucle sur les réponses (comme vous avez fait pour le formulaire)

                                    En prenant bien soin de remplacer

                                    $_POST['question'][$donnees['id']

                                    par

                                    $_POST['question'][$idQuestion][$donnees['id']

                                    Aaah oui je doit utiliser le $_POST comme ici : $_POST['question'][$idQuestion][$donnees['id'] pour la boucle while sur les questions ? donc du coup, avant ça, je doit faire une requête sur table question pour pouvoir récuperer $donnees['id']. 

                                    Donc ça va donner quelque chose comme ça : 

                                    while ($_POST['question'][$idQuestion][$donneesQuestions['id']) // boucle parmetant d'affiche toutes les questions
                                            {
                                                $req = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                                                $req->execute(['idQuestion' => $idQuestion]);
                                                $donneesReponses = $reqReponse->fetch();
                                                while ($_POST['question'][$idQuestion][$donneesReponses['id']) // boucle permetant d'afficher toutes les reponses assosiées
                                                    {

                                    Je met le if à l'intérieur comme condition :

                                    ce if la : 

                                    if ($donnees['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                                    $choix = false;
                                                    echo "bonne réponse $i manquante<br/>";
                                                    break;
                                                } elseif ($donnees['valide'] ==0 && isset($_POST['question'][$idQuestion][$donnees['id']])) {
                                                    $choix = false;
                                                    echo "mauvaise réponse $i cochée<br/>";
                                                    break;
                                                }   
                                                $i++; 

                                    Et comme c'est une boucle dans lequel il y a plusieurs requêtes, je rajoute les : $reqReponse->closeCursor(); et $reqQuestion->closeCursor(); en fin de boucle comme pour la page du QCM ?








                                    -
                                    Edité par JhessyIsmael 15 juin 2018 à 17:19:27

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 juin 2018 à 17:29:19

                                      dans votre cas il faut faire des requetes.

                                      $reqQuestion = $bdd->query('SELECT * FROM questions'); 
                                      
                                      while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                      {      
                                           $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.            
                                           $reqReponse->execute(['idQuestion' => $donneesQuestions['id'] ]); // éxécution de la requette préparer
                                                                        
                                           while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                           { 
                                              
                                      //ici vous mettez le if($donneesReponses['valide'] etc.
                                      } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées $reqReponse->closeCursor(); // Important : on libère le curseur pour la prochaine requête
                                      //ici vous mettez le if(($choix == true) etc...
                                      } // Fermeture de la boucle while parmetant d'affiche toutes les questions $reqQuestion->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle



                                      -
                                      Edité par Ralchimist 15 juin 2018 à 17:30:16

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 juin 2018 à 21:22:19

                                        Bonjour !

                                        Excusez moi de vous répondre si tard, même si on est le week-end j'étais quand même occupé (pas pour le travail mais perso :) ).

                                        Bien entendu je continue a vous remercier pour tout le temps que vous me consacrer, sachez-le, c'est vraiment touchant parce que sur toutes les forums que j'ai poster ce même message (copier / coller), vous êtes le seul a m'avoir répondu. VRAIMENT un Grand MERCI ! :D

                                        Revenons a nos moutons :) ,

                                        Alors j'ai fais une modification en assaillant de tenir compte de vos remarque, comme ceci : 

                                        <?php
                                        $idQuestion = $_POST['idQuestion'];
                                        
                                            try
                                            {
                                                $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                                $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                            }
                                            catch(Exception $e)
                                            {
                                                die('Erreur : '.$e->getMessage());
                                            }   
                                            $reqQuestion = $bdd->query('SELECT * FROM questions');
                                            
                                        
                                            while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                                {
                                                    $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                                                    $reqReponse->execute(['idQuestion' => $donneesQuestions['id']]);
                                                    
                                                    while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                        {
                                                            $choix = true; 
                                                            $note = 0;
                                                            $i = 0; 
                                                
                                                            //print_r($reponse);
                                                            if ($donneesReponses['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                $choix = false;
                                                                echo "bonne réponse $i manquante<br/>";
                                                                break;
                                                            } elseif ($donneesReponses['valide'] ==0 && isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                $choix = false;
                                                                echo "mauvaise réponse $i cochée<br/>";
                                                                break;
                                                            }   
                                                            $i++;
                                                        }
                                                    } 
                                                
                                                if ($choix == true) {
                                                    echo ('bonne rep');
                                                    $note = 10;
                                                    echo "<br>". $note;
                                                } else {
                                                    echo ('mauvaise rep');
                                                    $note;
                                                    echo "<br>". $note; 
                                                }
                                        ?>

                                        Mais je suis pas sur que j'ai les ai bien appliqué car j'ai eu cette réponse :

                                        bonne réponse 0 manquante
                                        bonne réponse 0 manquante
                                        bonne réponse 0 manquante
                                        bonne rep
                                        10

                                        Sachant qu'il y a 4 questions dans ma base, normalement en cochant les bonnes réponses je devais avoir une note = 40.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 juin 2018 à 11:12:28

                                          Votre code comporte 2 problèmes pour atteindre votre résultats mais cette fois je vais dans un premier temps vous donner des indices et vous laisser trouver la réponse. Cela vous aidera à vraiment comprendre votre code.

                                          • il y a un problème avec la variable $idQuestion
                                          • il y a un problème avec la variable $note
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 juin 2018 à 20:36:41

                                            Bonsoir, 

                                            En essayant de prendre en compte ce que vos remarques, j'ai essayer ceci : 

                                            <?php
                                            $idQuestion = $_POST['idQuestion'];
                                            
                                                try
                                                {
                                                    $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                                    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                                }
                                                catch(Exception $e)
                                                {
                                                    die('Erreur : '.$e->getMessage());
                                                }   
                                                $reqQuestion = $bdd->query('SELECT * FROM questions');
                                                
                                                $note = 0;
                                                $choix = true;
                                                $i = 0; 
                                            
                                                while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                                    {
                                                        $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                                                        $reqReponse->execute(['idQuestion' => $donneesQuestions['id']]);
                                                        
                                                        while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                            {
                                                                 
                                                                
                                                    
                                                                //print_r($reponse);
                                                                if ($donneesReponses['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                    $choix = false;
                                                                    echo "bonne réponse $i manquante<br/>";
                                                                    break;
                                                                } elseif ($donneesReponses['valide'] ==0 && isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                    $choix = false;
                                                                    echo "mauvaise réponse $i cochée<br/>";
                                                                    break;
                                                                }   
                                                                $i++;
                                                            }
                                                        if ($choix == true) {
                                                            echo ('bonne rep');
                                                            $note += 10;
                                                            echo "<br>". $note;
                                                        } else {
                                                            echo ('mauvaise rep');
                                                            $note += 0;
                                                            echo "<br>". $note; 
                                                        }
                                                    } 
                                                    
                                            ?>

                                            J'explique, alors j'ai 2 boucles, la première (parent) est la boucle sur les questions, la deuxième est celle sur les réponses. Dans ces boucles, on a 2 conditions, la première (celle qui est dans les 2 boucles) :

                                            //print_r($reponse);
                                                                if ($donneesReponses['valide'] ==1 && !isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                    $choix = false;
                                                                    echo "bonne réponse $i manquante<br/>";
                                                                    break;
                                                                } elseif ($donneesReponses['valide'] ==0 && isset($_POST['question'][$idQuestion][$donneesReponses['id']])) {
                                                                    $choix = false;
                                                                    echo "mauvaise réponse $i cochée<br/>";
                                                                    break;
                                                                }   
                                                                $i++;

                                            Permet de verrifier si on coché une mauvaise réponse ou si on a rien coché, on a une variable $choix qui sera = false, si non (cette variable qui est est deja = vrai) elle sera = vrai (elle le restera). Donc cette condition est verrifié pour chaque question avec ses réponses appropriées. 

                                            Mais la deuxième condition qui est : 

                                            if ($choix == true) {
                                                            echo ('bonne rep');
                                                            $note += 10;
                                                            echo "<br>". $note;
                                                        } else {
                                                            echo ('mauvaise rep');
                                                            $note += 0;
                                                            echo "<br>". $note; 
                                                        }

                                            Permet d'ajouté une note (+ 10) a la question si la variable $choix a été vrai, si non elle ajoutera une autre note (+ 0). Du coup pour pouvoir ajouté a chaque question, j'ai mis cette condition dans la boucle des questions (parent) mais hors de la boucle des réponses (enfant), c'est-à-dire que dans un premier temps on rentre dans la boucle des questions, on rentre par la suite dans la boucle de ses réponses on vérifie si des choix ont été faites ou si la / les bonne (s) choix ont été faites et si oui, notre variable $choix = true et ont ajoute +10 a $note. On revient dans les boucles encore une fois s'il y a d'autres questions avec leurs réponses, puisse que la boucle est sur le nombre de questions et de réponses qui sont sur notre bdd (comme dans mon cas). Et on refait les conditions, ... etc. 

                                            Le changement la est que j'ai mis la deuxième condition dans la boucle parent (celle des questions) et non dans l'autre ou en dehors des 2 boucles comme ça l'était avant et j'ai  aussi mis variables ($note, $choix et $i) en dehors des boucles (comme variables générales).

                                            Mais malgré tout ce changement, après plusieurs teste les résultats ne sont pas concluants. 

                                            J'ai obtenue ça (sachant que la boucle est sur 4 questions avec leurs réponses qui sont appropriées) :

                                            bonne réponse 0 manquante
                                            mauvaise rep
                                            0bonne réponse 1 manquante
                                            mauvaise rep
                                            0bonne réponse 4 manquante
                                            mauvaise rep
                                            0mauvaise rep
                                            0

                                            J'arrive pas a voir d'où vient le problème

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 juin 2018 à 16:46:03

                                              Bonjour!

                                              Vous semblez avoir compris la plupart du code, c'est déjà très bien.

                                              Voyons maintenant où ça coince!

                                              Vous avez bien fait de placer l'initialisation de la variable $note en dehors de la boucle.

                                              Par contre ce n'est pas une bonne idée pour la variable $choix

                                              on a une variable $choix qui sera = false, si non (cette variable qui est est deja = vrai) elle sera = vrai (elle le restera)

                                              Votre variable est initialisée en dehors de la boucle: que se passe-t-il si vous avez faux à la 1e question?
                                              Et bien la variable $choix passera à false, et ne repassera jamais à true!
                                              Il est donc indispensable de l'initialiser au début de chaque boucle "parent"!

                                              Pensez bien à toujours vous poser des questions sur votre code.

                                              Prenons maintenant la variable $i: à quoi sert-elle?

                                              Elle nous sert ici a débugguer notre code en indiquant le numéro de chaque réponse.
                                              Seulement elle n'est pas réinitialisée entre les questions. pour la question 2, il nous indiquerait par exemple que la réponse 5 est manquante.
                                              Il faut donc placer l'initalisation de cette variable au début de la boucle "parent"

                                              Et enfin, vous avez toujours un problème avec la variable $idQuestion!
                                              Cette variable est initialisé au début de votre page à partir de l'id d'une seule question. Donc si vous mettez:

                                              isset($_POST['question'][$idQuestion][$donneesReponses['id']]

                                              votre code va toujours faire la vérification sur les réponses de la 1e question! Il faut donc modifier cette variable à chaque passage dans la boucle "parent"

                                              -
                                              Edité par Ralchimist 19 juin 2018 à 18:24:22

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 juin 2018 à 20:54:53

                                                Bonjour !

                                                Merci pour vos réponses très instructive qui m'ont permis de comprendre le code. 

                                                Effectivement après réflexion, j'ai compris que le fait de mettre nos 2 variable $choix et $i dans la boucle parent mais hors de la boucle enfant, permettait de conserver la valeur des variables et ne pas les réinitialiser au passage à la 2ème question.

                                                Et pour la variable $idQuestion, pour pouvoir incrémenter notre variable $note il fallait faire une boucle sur chaque question individuellement. Et comment faire cella ? simplement en utilisant l'id de la question (comme pour les réponses). 

                                                J'ai dont modifier la variable $idQuestion par : 

                                                Par $donneesQuestions['id']  :

                                                if ($donneesReponses['valide'] ==1 && !isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                                                                        $choix = false;
                                                                        //echo "bonne réponse $i manquante<br/>";
                                                                        break;
                                                                    } elseif ($donneesReponses['valide'] ==0 && isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                                                                        $choix = false;
                                                                        //echo "mauvaise réponse $i cochée<br/>";
                                                                        break;
                                                                    

                                                Ce qui me permet d'avoir une note = 40 si j'ai 4 bonnes réponses; 30 si j'ai 3 bonnes réponses; ... et 0 si j'ai 0 bonne réponse.

                                                Merci ça marche implacablement !

                                                Mais si je veux les réponses (bonne comme mauvaise), je fais comment ?

                                                J'ai testé en modifiant sur la page du QCM dans l'input, le value='1' par value='<?phpecho$donneesReponses['reponse'];?>' et j'ai essayé de tout récupérer par un foreach sur la page de traitement avec un $_POST['question'] mais cela ne marchait pas. :

                                                comme ceci :

                                                Page QCM :

                                                <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                                                                    <input type='checkbox' id='questionQCM' name="question[<?php echo $donneesQuestions['id']; ?>][<?php echo $donneesReponses['id']; ?>]" value='<?php echo $donneesReponses['reponse'];?>'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                                                                    <label for='questionQCM'><?php echo $donneesReponses['reponse'];?></label>
                                                                                </div>

                                                Page traite-QCM :

                                                foreach ($_POST['question'] as $value) {
                                                            echo $value;
                                                        }




                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 juin 2018 à 23:01:43

                                                  pour avoir les réponses, pas besoin de modifier le "value".

                                                  La variable $_POST['question'] contient déjà le tableau des questions et des réponses du candidat!

                                                  Faites un "var_dump($_POST['question'])", vous verrez que vous avez tout dedans. (l'id des questions, et l'id des réponses sélectionnées).

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 juin 2018 à 0:05:32

                                                    Ok merci ! Je ferai ça demain 

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 juin 2018 à 19:48:07

                                                      Bonjour !

                                                      Excusez moi de vous répondre si tard car j'avais pas du tout le temps durant ces dernier jours pour programmer.

                                                      Alors j'ai tester le var_dump($_POST['Question']) comme vous m'aviez dis. Et effectivement cette variable contient toutes les infos. Mais la question est comment récupérer les réponses de l'utilisateur, parmi toutes les infos qu'on a dans cette variable ?

                                                      J'ai testé de faire un foreach comme c'est un tableau mais cela ne fonctionnais pas.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        26 juin 2018 à 21:38:12

                                                        Qu'entendez vous par "ça ne fonctionne pas"?

                                                        Si vous confirmez que vous avez bien toutes les infos dans le tableau, prenez le temps de réfléchir au contenu de ce tableau à plusieurs dimensions. Vous devriez réussir à en exploiter les données.(placez un var_dump dans votre boucle pour vous aider)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          27 juin 2018 à 22:32:22

                                                          J'ai réussi a récuperer les réponses comme voulu. Pour cela j'ai fais ceci : 

                                                          $idUser = $_SESSION['user']['nom'];
                                                          foreach ($_POST['question'] as $key => $value) { // dans ce premier boucle foreach je récupère l'id de la question
                                                                          echo $key . " --> l'id de la question"; // l'id de la question
                                                                          echo "<br>";
                                                                          foreach ($value as $keys => $val) { // ensuite je récupère dans ce 2ème boucle foreach l'id de la réponse et la réponse elle même
                                                                              echo $keys . " --> l'id de la réponse"; // l'id de la réponse
                                                                              echo "<br>";
                                                                              echo $val;                      // la réponse
                                                                              // requette ici pour insérer ligne par ligne dans la bdd
                                                                              $reqInsertReponse = $bdd->query("UPDATE user SET reponseQCM = '$val' where id = '$idUser' ");
                                                                              echo "<br><br> Insertion réussi";
                                                                          }
                                                                      }

                                                          Ici comme je l'ai dit, j'ai récupéré les réponses venant de la page du QCM, que je rapelle est comme ceci : 

                                                          <?php
                                                                          // Connexion à la base de données
                                                                          try
                                                                          {
                                                                              $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                                                              $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                                                          }
                                                                          catch(Exception $e)
                                                                          {
                                                                                  die('Erreur : '.$e->getMessage());
                                                                          }                
                                                          
                                                                          $reqQuestion = $bdd->query('SELECT * FROM questions'); // requette pour afficher une question (teste)               
                                                                          //$donnees = $req->fetch(); // execution de la requette et récupération des données
                                                                            
                                                                      ?>
                                                          
                                                                          <form action='QCM_Trait.php' method='POST'> 
                                                                              <?php
                                                                              while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                                                                  {        
                                                                              ?>
                                                                                  <div class='formulaires01'> <!-- div dans la boucle while contenant les questions et les réponses (sauf le bouton validé) -->
                                                                                      <?php $idQuestion = $donneesQuestions['id'];?> <!-- récupération de l'ID des question -->
                                                                                      <p><em>Q. : </em><?php echo $donneesQuestions['question'];?> </p> <!-- Affichage de la 1ère question de cette boucle while -->
                                                                                      
                                                                                      <input type='hidden' name='idQuestion' value='<?php echo $idQuestion;?>'> <!-- input caché qui récupère l'id de cette question pour pouvoir l'envoyer sur la page de traitement-->
                                                                                  
                                                                                      <?php
                                                                                          
                                                                                          $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question =(select id from questions where id= :idQuestion)'); // requette préparer pour afficher la réponse assosié a sa question, grace a la variable $idQuestion récupérer plus haut.              
                                                                                          $reqReponse->execute(['idQuestion' => $idQuestion]); // éxécution de la requette préparer
                                                                                          
                                                                                          while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                                                          {                            
                                                                                      ?>
                                                                                          <div class='QuesCheck'> <!-- Div contenant les réponses -->
                                                                                              <input type='checkbox' id='questionQCM' name="question[<?php echo $donneesQuestions['id']; ?>][<?php echo $donneesReponses['id']; ?>]" value='<?php echo $donneesReponses['reponse']; ?>'> <!-- Checkboxe qui va se dupliqué, et s'affiché en fonction du nombre de réponse éxistante touver GRACE A LA BOUCLE WHILE -->
                                                                                              <label for='questionQCM'><?php echo $donneesReponses['reponse'];?></label>
                                                                                          </div>
                                                          
                                                                                      <?php
                                                                                          } // Fermeture de la boucle while parmetant d'affiche toutes les reponses assosiées
                                                                                          $reqReponse->closeCursor(); // on libère le curseur pour la prochaine requête, comme on est dans une boucle
                                                                                      ?>
                                                                                  </div> <!-- Fermeture du div class formulaire01 -->
                                                                              <?php
                                                                                  } // Fermeture de la boucle while parmetant d'affiche toutes les questions
                                                                                  $reqQuestion->closeCursor(); // Important : on libère le curseur pour la prochaine requête
                                                                              ?>  
                                                          
                                                                              <div> <!-- div contenant le bouton Valider (en dehors de toute les boucle mais toujours dans le formulaire) -->
                                                                                  <button class='valid' id='boutonValide' type='submit'>Valider</button> <!-- Bouton d'envoie du formulaire -->
                                                                              </div>
                                                                  
                                                                          </form> <!-- Fermeture du form -->

                                                          Mais le seul bémol ici est que l'insertion ne marche pas.


                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            28 juin 2018 à 23:35:54

                                                            Bonsoir.

                                                            je pense que vous voulez aller trop vite et que vous ne prenez pas le temps de comprendre votre propre code.

                                                            // requete ici pour insérer ligne par ligne dans la bdd
                                                                                $reqInsertReponse = $bdd->query("UPDATE user SET reponseQCM = '$val' where id = '$idUser' ");

                                                            vous parlez d'insertion et vous faire un UPDATE. Donc à chaque passage dans la boucle, le champ "reponseQCM" va être mis à jour avec la nouvelle valeur. Au final votre champ contiendra uniquement la réponse à la dernière question.

                                                            Pour stocker des réponses à des questions, la meilleure solution est de créer une nouvelle table "reponsesUser" qui fera le lien entre les questions, les réponses, et l'utilisateur.

                                                            Et la table "reponsesUser" pourrait contenir un champ "id_question", un champ "id_reponse" et un champ "id_user"

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              30 juin 2018 à 14:40:31

                                                              Bonjour,

                                                              Effectivement, j'ai créer une table  "reponseUser" : 

                                                              et j'ai pu envoie les réponses de cette façon : 

                                                              <?php
                                                              session_start();
                                                              $nomUser = $_SESSION['user']['nom'];
                                                              $prenomUser = $_SESSION['user']['prenom'];
                                                              
                                                                  try
                                                                  {
                                                                      $bdd = new PDO('mysql:host=localhost;dbname=projet_avenirfr;charset=utf8', 'root', 'root');
                                                                      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                                                  }
                                                                  catch(Exception $e)
                                                                  {
                                                                      die('Erreur : '.$e->getMessage());
                                                                  }   
                                                                  $reqQuestion = $bdd->query('SELECT * FROM questions');
                                                                  
                                                                  $note = 0;
                                                                  
                                                              
                                                                  while ($donneesQuestions = $reqQuestion->fetch()) // boucle parmetant d'affiche toutes les questions
                                                                      {
                                                                          $idQuestion = $donneesQuestions['id'];
                                                                          $reqReponse = $bdd->prepare('SELECT * FROM reponses WHERE id_question = :idQuestion');                
                                                                          $reqReponse->execute(['idQuestion' => $donneesQuestions['id']]);
                                                                          
                                                                          $choix = true;
                                                                          $i = 0; 
                                                              
                                                                          while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
                                                                              {
                                                                                  $idReponse = $donneesReponses['id'];
                                                                                  //print_r($reponse);
                                                                                  if ($donneesReponses['valide'] ==1 && !isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                                                                                      $choix = false;
                                                                                      //echo "bonne réponse $i manquante<br/>";
                                                                                      break;
                                                                                  } elseif ($donneesReponses['valide'] ==0 && isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                                                                                      $choix = false;
                                                                                      //echo "mauvaise réponse $i cochée<br/>";
                                                                                      break;
                                                                                  }   
                                                                                  $i++;
                                                                              }
                                                                          if ($choix == true) {
                                                                              //echo ('bonne rep');
                                                                              $note += 10;
                                                                             // echo "<br>". $note;
                                                                          } else {
                                                                              //echo ('mauvaise rep');
                                                                              $note += 0;
                                                                              //echo "<br>". $note; 
                                                                          }
                                                                          $reqReponse->closeCursor();
                                                                          foreach ($_POST['question'] as $key => $value) { // dans ce premier boucle foreach je récupère l'id de la question
                                                                              echo $key . " --> l'id de la question"; // l'id de la question
                                                                              echo "<br>";
                                                                              foreach ($value as $keys => $val) { // ensuite je récupère dans ce 2ème boucle foreach l'id de la réponse et la réponse elle même
                                                                                  echo $keys . " --> l'id de la réponse"; // l'id de la réponse
                                                                                  echo "<br>";
                                                                                  echo $val;                      // la réponse
                                                                                  // requette ici pour insérer ligne par ligne dans la bdd
                                                                                  echo $prenomUser;
                                                                                  echo $nomUser;
                                                                                  $reqInsertReponse = $bdd->query("INSERT INTO reponseUser (prenom_User, nom_User, id_Question, id_Reponse, reponse_User, note_User) values ('$prenomUser', '$nomUser', '$idQuestion', '$idReponse', '$val', '$note')");
                                                                                  echo "<br><br> Insertion réussi";
                                                                              }
                                                                          }
                                                                          $reqInsertReponse->closeCursor();
                                                                          
                                                                      } 
                                                                       echo "<br>". $note . "<br><br>";
                                                                      
                                                              ?>

                                                              Ce que je veux faire c'est de mettre la note de chaque réponses a une question dans le champ "note", (par exemple : si la réponse 1 est bonne, donc son champ note = 10, si la 2ème est bonne son champ note = 20, si la 3ème est mauvaise, son champ note = 0, si la 4ème est mauvaise son champ note =  30). D'où le fais que j'ai mis la requette dans le foreach, juste en dessous du if, dans la grande boucle while (parent). 

                                                              Dans notre exemple on 4 questions, du coup normalement on devrait avoir 4 réponses (ou 5 parce que la dernière question contient 2 réponses) insérer sur la bdd. Mais au lieu de ça ma mis 4 fois les 5 réponses, comme ceci :

                                                              Voyez-vous pourquoi cela fais ça svp ? 

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              QCM à choix multiple

                                                              × 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