Bonjour
Un nombre rand me renvoie une question d'un QCM, mais pour éviter de voir 2 fois la même question je vérifie si le numero est dèja sorti et je vérifie si toutes les questions sont déjà sorties.
J'avais utilisé l'instruction goto cela fonctionnait bien mais suivant la version de serveurs je risque des problèmes. Je pense qu'il y a une solution des do while mais je ne vois pas bien comment mettre ça en place.
Le code de la boucle avec les goto:
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 // SI LA SESSION JEU N'EST PAS DÉFINI (PREMIERE VISITE) Affectation DU TABLEAU servant à vérifier si une question est déjà sorti if(!isset($_SESSION['jeu'])){ $tabrand=array($i); } else{ $tabrand=$_SESSION['tab']; $i++; }// COMPTAGE DES LIGNES DE LA TABLE POUR DÉFINIR LE NOMBRE MAXI DU NUMERO ALEATOIRE $count=mysqli_query($liendb, "SELECT * FROM qcm"); $countligne= mysqli_num_rows($count); // NOMBRE ALEATOIRE DE 1 au nombre trouvé avant ($countligne) boucle: $rand= rand(1,$countligne); // si le numero au hasard n'est pas dans le tableau (déjà sorti) le numero est incrémenté dans le tableau if(!in_array($rand, $tabrand)){ $tabrand[$i]=$rand; // passage en session de la table de la session jeu permettant de définir permiere viste ou pas et de l'id pour être incrémenter au procahin passage. $_SESSION['tab']=$tabrand; $_SESSION['jeu']="ok"; $_SESSION['id']=$i; // requête sql pour afficher l'élément dont l'id correspond au N° sorti $sqlquest="SELECT * FROM qcm where idqcm='$rand'"; $req = mysqli_query($liendb,$sqlquest) or die(mysql_error()); $question=mysqli_fetch_assoc($req); $laquestion=$question['quest']; $rep1=$question['rep1']; $rep2= $question['rep2']; $rep3=$question['rep3']; $them= $question['theme']; } // si le numero est déjà dans le tableau et si toutes les questions n'ont pas déjà été posées le goto fait revenir au choix du rand else { if($i<$countligne){ goto boucle; } else{// sinon c'est terminé ?> <div id="fin"> <div id="score">La partie est terminée </div> } // quand le rand n'est pas encore sorti affichage de la page html.
Partager