Bonjour,

J'ai un qcm où l'utilisateur peut avoir plusieurs choix pour une question. Le qcm fonctionne bien, j'affiche les questions et le réponse sans problème, j'arrive a noté l'utilisateur en fonction de ses réponses.

je cherche a enregistrer l'ID de chaque questions et l'ID (des) de la réponse(s) de l'utilisateur sur ma base de donné dans le champ reponseUser. Ma base de donnée a 3 champs : question, reponse, reponseUser.



Je vous montrer le code de la page de traitement du qcm (qcmTrait) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
<?php
//session_start();
// $nomUser = $_SESSION['user']['nom'];
// $prenomUser = $_SESSION['user']['prenom'];
// echo $nomUser;
// echo "<br><br>".$prenomUser;
var_dump($_POST['question']);
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=qcm;charset=utf8', '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;
			$idReponse;
            while ($donneesReponses = $reqReponse->fetch()) // boucle permetant d'afficher toutes les reponses assosiées
            {
                $idReponse = $donneesReponses['id'];
                //print_r($reponse);
                if ($donneesReponses['Validation'] ==1 && !isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                    $choix = false;
                    echo "<br>bonne réponse : $i manquante<br/>";
                    break;
                } elseif ($donneesReponses['Validation'] ==0 && isset($_POST['question'][$donneesQuestions['id']][$donneesReponses['id']])) {
                    $choix = false;
                    echo "<br>mauvaise réponse : $i cochée";
                    break;
                }  
                $i++;
            }
                //print_r($donneesQuestions);
                //echo "testest";
 
            if ($choix == true) {
                echo ('<br>bonne rep');
                $note += 10;
                echo "<br>". $note. " --> la note += $note";
            } else {
                echo ('<br>mauvaise rep');
                $note += 0;
                echo "<br>". $note. " --> la note += $note";
            }
 
            $reqReponse->closeCursor();
            $idUser = $_POST['question'];
            // test $_POST['question'][$donneesQuestions['id']]
            echo "<br> la taile du tableau 'question' : ". sizeof($idUser);
                for ($i=0; $i <= sizeof($idUser) ; $i++) { 
                    echo "<br>".$i." <~~~~~~<br>";    
                    // echo $idUser[$i];
                }
 
 
                echo " <br> ";
                echo " <br> ---------------------------";
                print_r($_POST['question']); // je recupère l'id des réponses choisis par l'user
                echo "------------------------ <br> ";
 
            foreach ($idUser as $key => $value) {
                echo " <br> ";
                echo $key;
                echo " <br> ";
                // echo $value;
                echo " <br> ";
            }
            echo " <br> ";
            foreach ($_POST['question'][$donneesQuestions['id']] as $key => $value) { // dans ce premier boucle foreach je récupère l'id de la question
                echo "<br>".$key . " --> l'id de la réponse"; // l'id de la question
                echo " <br> ";
                echo $value. " --> ici on a le value des réponses qui sont tous = 1 "; 
                echo " <br> ";                    // la réponse
                    // requette ici pour insérer ligne par ligne dans la bdd
                    // echo $prenomUser;
                    // echo $nomUser;
                    // $reqInsertReponse = $bdd->prepare('INSERT INTO reponseUser (reponse_User= :reponseUser, note_User= :note, id_Question= :idQuestion, id_Reponse= :idReponse');
                    // $reqInsertReponse->execute([
					// 	'reponseUser' => $value,
					// 	'note' => $note,
					// 	'idQuestion' => $idQuestion,
					// 	'idReponse' => $idReponse
					// ]);
                    // echo "<br><br> Insertion réussi";
 
            }
            //$reqInsertReponse->closeCursor();
 
        }
         echo "<br>". $note . "<br><br>";
 
?>
Je vous montrer le code du QCM :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
    <title>QCM M2L</title>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
    <link rel="stylesheet" type="text/css" href="qcmTest.css">
</head>
<body>
 
 
	<center> 
 
	<h1> QCM de la M2L </h1> 
 
	<div id="questionnaire">
		<?php
			// Connexion à la base de données
			try
			{
				$bdd = new PDO('mysql:host=localhost;dbname=qcm;charset=utf8', 'root', '');
				$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			}
			catch(Exception $e)
			{
					die('Erreur : '.$e->getMessage());
			}              
 
			$reqQuestion = $bdd->query('SELECT * FROM questions LIMIT 5'); // requette pour afficher une question (teste)             
			//$donnees = $req->fetch(); // execution de la requette et récupération des données
 
		?>
 
		<form action='qcmTrait.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='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
			?>
			<hr>
			<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 -->
 
 
	</div>
 
	</center>
</body></html>
Comme vous pouvez le voir, dans la partie qcmTrait, j'ai mis en commentaire l'insertion sur la bdd, et j'ai mis pas mal d'echo pour tester. J'ai mis aussi d'autres boucles pour tester d'afficher les information que je veux envoyer sur le serveur.