Bonjour,
Je souhaite trouver la valeur maximale du champ 'id' de la table `exo_resultats`.
Cette recherche s'inscrit dans un qcm nécessitant les 2 scripts quizz2.php et quizz2-reponse.php ainsi que les 2 tables questions et reponses.
quizz2.php est le suivant :
quizz2-reponse.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162 <?php session_start(); header('Content-type:text/html; charset=UTF-8'); // encodage UTF-8 error_reporting(E_ALL); // en TEST // ----------------------------------------------- if( isset($_POST['submitQCMagain']) ) { unset($_SESSION['quizz2']); // on efface la session } // ----------------------------------------------- // 1/ CREATION du QUESTIONNAIRE // ----------------------------------------------- // unset($_SESSION['quizz2']); // TEST : on efface la session (pour afficher le var_dump) -> commenter la ligne en production // Si le questionnaire n'a pas encore été mis en SESSION, on le crée if( empty($_SESSION['quizz2']) || empty($_SESSION['quizz2']['go']) ) { // --------------------------------- // CONNEXION à la BdD include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion à la base de données $link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link)); // Connexion à MySql mysqli_set_charset ( $link , 'UTF8' ); // ON IMPOSE UTF-8 // --------------------------------- // tables utiles define('TAB_QUESTIONS', 'questions'); define('TAB_REPONSES', 'reponses'); // Définition des paramètres $nbre_questions_affiche = 6; // nombre de questions à afficher (parmi toutes celles enregistrées en BdD) // on découpe le questionnaire en plusieurs séries $nbre_questions_par_serie = 2; // nombre de questions par série // --------------------------------- // Création du questionnaire $questions = array(); $query_questions = "SELECT * FROM ".TAB_QUESTIONS." ORDER BY RAND() LIMIT 0, ".$nbre_questions_affiche.";"; // Mélange aléatoire if ($result = mysqli_query($link, $query_questions)) { while($question = mysqli_fetch_assoc($result)) { list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste $question['choix_reponse'] = array(); // libellé des reponses $query_reponses = "SELECT * FROM ".TAB_REPONSES." WHERE id_reponse IN (".$liste_choix.");"; //on récupère le choix de réponse if ($requete_reponses = mysqli_query($link, $query_reponses)) { while($row_reponse = mysqli_fetch_assoc($requete_reponses)) { $question['choix_reponse'][$row_reponse['id_reponse']] = $row_reponse['texte_reponse']; //on met le choix de réponse dans le tableau de choix des réponses } array_push($questions, $question);//on met la réponse dans le tableau de réponses. } } } // --------------------------------- // Mélange aléatoire des questions // INUTILE, puisqu'on a utilisé RAND() dans la requete // shuffle( $questions ); // shuffle mélange les éléments d'un tableau // on découpe le questionnaire en plusieurs séries $questions_series = array_chunk( $questions, $nbre_questions_par_serie, true ); // --------------------------------- // On met le questionnaire en SESSION $_SESSION['quizz2'] = array(); $_SESSION['quizz2']['questions'] = $questions_series; // met en session le tableau (mélangé) des séries questions $_SESSION['quizz2']['index'] = 0; // index de la seri de questions en cours $_SESSION['quizz2']['go'] = true; // si true : on a répondu à toutes les questions $_SESSION['quizz2']['resultats'] = array(); // array qui permettra de stocker les reponses du candidat // Pour éviter les problèmes en cas de rechargement de la page (F5 ou touche < du navigateur) $_SESSION['quizz2']['checkserie'] = uniqid('quizz_'); $_SESSION['quizz2']['affiche_result'] = false; // --------------------------------- // var_dump($_SESSION['quizz2']); // Affiche le contenu du tableau -> commenter la ligne en production } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Questionnaire du Quizz</title> <style type="text/css"> #quizz { width:100%;max-width:800px;margin:0 auto; } #quizz form ul { list-style-type:none; } #quizz .quizz-table { width:100%; } #quizz .quizz-table fieldset { margin:10px 0; padding:0; } #quizz .quizz-table fieldset div { display:inline-block; width:46%; margin:0; padding:0 2%; vertical-align:middle; } #quizz .quizz-table fieldset figure { display:inline-block; width:46%; margin:0; padding:0 2%; vertical-align:middle; text-align:center; } #quizz .quizz-table fieldset figure img { max-width:300px; max-height:200px; } #quizz .quizz-msg { color:#fff; text-align:center; padding:10px; } </style> </head> <body> <div id="quizz"> <?php // ----------------------------------------------- // 2/ TRAITEMENT du FORMULAIRE si soumis // ----------------------------------------------- if( isset($_POST['submitQCM']) && $_SESSION['quizz2']['checkserie']== $_POST['checkserie'] ) { // on enregistre les réponses $_SESSION['quizz2']['resultats'][$_SESSION['quizz2']['index']] = $_POST['resultats']; // array contenant les réponses du candidat } // 4/ AFFICHAGE des RESULTATS if( $_SESSION['quizz2']['index'] == count($_SESSION['quizz2']['questions'])-1 ) // derniere serie de questions : on affiche les résultats { $_SESSION['quizz2']['go'] = false; // on affiche les resultats require (__DIR__.'/quizz2-reponse.php'); } if( isset($_POST['submitQCM']) && $_SESSION['quizz2']['checkserie']== $_POST['checkserie'] ) { $_SESSION['quizz2']['index']++; // Pour éviter les problèmes en cas de rechargement de la page (F5 ou touche < du navigateur) $_SESSION['quizz2']['checkserie'] = uniqid('quizz_'); } // ----------------------------------------------- // 3/ AFFICHAGE du QUESTIONNAIRE // ----------------------------------------------- // AFFICHAGE du quizz : question + choix des réponses //if( !empty($_SESSION['quizz2']['go']) || (isset($_SESSION['quizz2']['index']) && $_SESSION['quizz2']['index']!=count($_SESSION['quizz2']['questions'])-1) ) // le quizz n'est pas fini (ou pas commencé) if( !empty($_SESSION['quizz2']['go']) ) // le quizz n'est pas fini (ou pas commencé) { $idserie = $_SESSION['quizz2']['index']; $serie_questions = $_SESSION['quizz2']['questions'][$idserie]; ?> <h2>Quizz</h2> <h3>Série n°<?php echo ($idserie+1); ?></h3> <form id="quizz-form" method="post" action="quizz2.php"> <input type="hidden" name="checkserie" value="<?php echo $_SESSION['quizz2']['checkserie']; ?>"/> <div class="quizz-table"> <?php $num_question = $idserie; foreach($serie_questions as $idque => $question) { if(!empty($question['choix_reponse'])) { $num_question++; ?> <fieldset> <legend><?php echo $num_question.' - '.$question['texte_question']; ?></legend> <div> <ul> <?php $choix_reponse = $question['choix_reponse']; shuffle( $choix_reponse ); // on mélange les réponses foreach($question['choix_reponse'] as $idrep => $reponse) { echo ' <li><input type="radio" name="resultats['.$question['id_question'].']" id="reponse'.$idrep.'" value="'.$idrep.'" required="required"/><label for="reponse'.$idrep.'">'.htmlspecialchars($reponse,ENT_QUOTES,'utf-8').'</label></li>'."\n"; } ?> </ul> </div><figure><img border="0" src="<?php echo htmlspecialchars($question['adresse_image'],ENT_QUOTES,'utf-8'); ?>" /></figure> </fieldset> <?php } } ?> </div> <p style="text-align:center;"><input type="submit" name="submitQCM" value="Validez vos réponses"/></p> </form> <?php } // fin affichage questionnaire ?> </div> </body> </html>
Enfin, les 2 tables questions et reponses:
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 <?php // CE FICHIER EST INCLUS DANS quizz2.php // ----------------------------------------------- // Traitement du formulaire if(!empty($_SESSION['quizz2']['questions']) && isset($_POST['submitQCM'])) { // --------------------------- // On récupère le questionnaire $all_questions = $_SESSION['quizz2']['questions']; // On récupère les réponses du candidat $resultats = $_SESSION['quizz2']['resultats']; // array contenant le réponses du candidat // --------------------------- $quizz_nombre_questions = 0; $quizz_bonnes_reponses = 0; $_SESSION['quizz2']['affiche_result'] = true; // --------------------------- ?> <h2>Résultats du Quizz</h2> <div class="quizz-table"> <?php // Question et réponses foreach($all_questions as $idserie => $questions) { ?> <h3>Série n°<?php echo ($idserie+1); ?></h3> <?php foreach($questions as $idque => $question) { $quizz_nombre_questions++; ?> <fieldset> <legend><?php echo $quizz_nombre_questions.' - '.$question['texte_question']; ?></legend> <div> <p><em>La bonne réponse est : </em><b><?php echo $question['choix_reponse'][$question['reponse_juste']]; ?></b> <?php if( $question['reponse_juste'] == $resultats[$idserie][$question['id_question']]){ echo '</p>'."\n".' <p style="color:green;"><b>Bravo !</b> Bonne réponse !</p>'."\n"; $quizz_bonnes_reponses++; } else { echo ' <br /><em>Vous avez répondu : '.$question['choix_reponse'][$resultats[$idserie][$question['id_question']]].'</em></p>'."\n"; echo ' <p style="color:red;">Faux ! Mauvaise réponse...</p>'."\n"; } ?> </div><figure><img border="0" src="<?php echo str_replace('../', './', htmlspecialchars($question['adresse_image'],ENT_QUOTES,'utf-8')); ?>" /></figure> </fieldset> <?php } } ?> </div> <?php // --------------------------- // Affichage du Décompte / pourcentage de bonnes réponses $BonneRepTexte = $quizz_bonnes_reponses; $BonneRepTexte .= ($quizz_bonnes_reponses>1)? ' bonnes réponses' : ' bonne réponse'; $BonneRepPourcent = round($quizz_bonnes_reponses/$quizz_nombre_questions*100); echo ' <h4>Vous avez obtenu <span style="color:green;font-size:120%;"><b>'.$BonneRepTexte.' sur '.$quizz_nombre_questions.'</b></span>, soit <span style="color:green;font-size:120%;"><b>'.$BonneRepPourcent.'%</b></span></h4>'."\n"; if($BonneRepPourcent >= 90){ echo ' <h2 class="quizz-msg" style="background-color:green;"><b>C\'est Excellent !</b></h2>'."\n"; } elseif($BonneRepPourcent >= 75 && $BonneRepPourcent < 90){ echo ' <h2 class="quizz-msg" style="background-color:green;"><b>C\'est Très Bien !</b></h2>'."\n"; } elseif($BonneRepPourcent >= 50 && $BonneRepPourcent < 75){ echo ' <h2 class="quizz-msg" style="background-color:blue;">C\'est Bien</h2>'."\n"; } elseif($BonneRepPourcent >= 25 && $BonneRepPourcent < 50){ echo ' <h2 class="quizz-msg" style="background-color:orange;">Pas mal, mais peut mieux faire...</h2>'."\n"; } else { echo ' <h2 class="quizz-msg" style="background-color:red;">Oups, ce n\'est pas terrible... Courage !</h2>'."\n"; } // ---------------------------------- $req = mysqli_query('SELECT MAX(`id`) AS idmax FROM `exo_resultats`'); $valeur = mysqli_fetch_assoc($req); echo 'La valeur max est : '.$valeur['idmax']; } // Recommencer le test ? ?> <h2>Recommencer le Quizz ?</h2> <form method="post" action="quizz2.php"> <p><input type="submit" name="submitQCMagain" value="Afficher le Quizz"/></p> </form>
Tout fonctionne correctement, SAUF les lignes 73 à 75 de quizz2-reponse.php
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 -- -- Structure de la table `questions` -- CREATE TABLE IF NOT EXISTS `questions` ( `id_question` int(11) NOT NULL, `texte_question` text NOT NULL, `choix_question` varchar(15) NOT NULL, `adresse_image` varchar(60) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; -- -- Contenu de la table `questions` -- INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`, `adresse_image`) VALUES (1, '1. Comment se nomme ce scientifique ?', '1,2,3;2', '../Images/leonard.jpg'), (2, '2. Qui est cette personne?', '4,5,6;5', '../Images/johnny-H.jpg'), (3, '3. Qui est ce sportif ?', '7,8,9;9', '../Images/coluche.jpg'), (4, '4. Quel est ce jeu ?', '10,11,12;10', '../Images/de.gif'), (5, '5. Quelle est cette plante ?', '13,14,15;14', '../Images/plante.jpg'), (6, '6. Quel est cet animal ?', '16,17,18;16', '../Images/Chat.gif'), (7, '7. Quel est cet appareil ?', '19,20,21;21', '../Images/telephone.jpg'); -- -- Index pour les tables exportées -- -- -- Index pour la table `questions` -- ALTER TABLE `questions` ADD PRIMARY KEY (`id_question`); -- -- AUTO_INCREMENT pour les tables exportées -- -- -- AUTO_INCREMENT pour la table `questions` -- ALTER TABLE `questions` MODIFY `id_question` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8; -- -- Structure de la table `reponses` -- CREATE TABLE IF NOT EXISTS `reponses` ( `id_reponse` int(11) NOT NULL, `texte_reponse` text NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1; -- -- Contenu de la table `reponses` -- INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES (1, 'Ampere'), (2, 'De Vinci'), (3, 'Volt'), (4, 'Isaac Hayes'), (5, 'Johnny Haliday'), (6, 'Mireille Mathieu'), (7, 'Carl Lewis'), (8, 'Ben Johnson'), (9, 'Papi Mougeot'), (10, 'Un jeu de dé'), (11, 'Un jeu de foot'), (12, 'Un jeu de rugby'), (13, 'Un abricot'), (14, 'Une plante sarmenteuse'), (15, 'une mauvaise herbe'), (16, 'un chat'), (17, 'un cheval'), (18, 'un chien'), (19, 'Une boite'), (20, 'un ordinateur'), (21, 'un téléphone'); -- -- Index pour les tables exportées -- -- -- Index pour la table `reponses` -- ALTER TABLE `reponses` ADD PRIMARY KEY (`id_reponse`); -- -- AUTO_INCREMENT pour les tables exportées -- -- -- AUTO_INCREMENT pour la table `reponses` -- ALTER TABLE `reponses` MODIFY `id_reponse` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=22;
qui n'affichent rien alors que j'attends de voir cette fameuse valeur maximale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $req = mysqli_query('SELECT MAX(`id`) AS idmax FROM `exo_resultats`'); $valeur = mysqli_fetch_assoc($req); echo 'La valeur max est : '.$valeur['idmax'];
Un œil exercé verrait-il la faille ?
Partager