Bonjour,

Me revoilà avec un problème d'affichage.

Je précise qu'au niveau des insertions, les données s'insèrent avec les bons identifiants.

J'ai 4 tables : cours, chapitres, reponses, questions et une table relationnelle qui permet de faire les relations entre les 4 tables.

Sur la page d'affichage, toutes les données s'affichent mais je rencontre un problème pour l'affichage des questions/exercices. Les questions/exercices dépendent des chapitres. Les questions/exercice prennent en compte l'identifiant du cours mais pas l'identifiant du chapitre. Je précise qu'il y a une fonction javascript, qui crée un sommaire avec les balises de titres (de <h1> jusqu'à <h7>) avec une numérotation automatique.

J'ai essayé plusieurs fois, j'ai obtenu des résultats différents (affichage du bloc : "Exercices" dans chaque chapitre, etc…).

Voici mon raisonnement :
Pour chaque chapitre trouvé, tu vas voir dans la table des questions s'il y en a avec l'identifiant du chapitre : si oui, tu affiches le bloc : "Exercice" sinon tu passes au prochain chapitre (ainsi de suite pour chaque chapitre trouvé).

Voici les requêtes SQL :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
// Sélectionnement de l'identifiant de l'élève connecté
$selection_identifiant_id_eleve_connecte = mysql_query("SELECT id_utilisateur FROM test_site_utilisateur WHERE id_utilisateur=".$_SESSION['id_utilisateur']." AND (acces_utilisateur='1' OR acces_utilisateur='5')") or die ('Erreur lors de la requête SQL qui permet de sélectionner l\'élève connecté.');
// Sélectionnement du bon Cours/TP
$selection_cours_tp = mysql_query("SELECT DISTINCT(t4.titre_chapitre),t2.titre_cours,t2.introduction_cours,t2.conclusion_cours,t2.date_publication_cours,t2.matiere_cours,t2.classe_cours,t4.contenu_chapitre, t2.id_cours FROM test_site_relation_cours_tp_utilisateur_v2 t1,test_site_cours_v2 t2,test_site_utilisateur t3,test_site_chapitres_v2 t4 WHERE t3.id_utilisateur=".$_SESSION['id_utilisateur']." AND t1.id_chapitre=t4.id_chapitre AND t1.id_cours=t2.id_cours AND (acces_utilisateur='1' OR acces_utilisateur='5') AND t2.id_cours='$id_cours_tp' AND t4.id_cours='$id_cours_tp'") or die("Erreur sur la requête SQL qui sélectionne toutes les informations du Cours/TP (sauf les questions et les réponses).");
// Récupération des questions du Cours/TP dans la base de données - Deuxième version
$query_selection_questions_cours_tp=mysql_query("SELECT DISTINCT(contenu_question) FROM test_site_questions_v2 t1, test_site_cours_v2 t2 WHERE t1.id_cours=t2.id_cours AND t2.id_cours='$id_cours_tp'") or die('Erreur lors de la sélection des questions d\'un Cours/TP'.mysql_error());

Voici la partie du code actuel (où toutes les questions se mettent sous le premier chapitre alors qu'il y en a une qui doit se mettre sous le second chapitre) :
Code php : 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
 $id_cours_tp = intval($_POST['id_cours_tp']);
<?php
if(mysql_num_rows($selection_identifiant_id_eleve_connecte)==1) {
      if(mysql_num_rows($query_selection_titre_cours_tp)==1) {
          echo "<header>".$_SESSION['titre_cours']."</header>";
      }
      echo '<div id="sommaire"></div>';
		  if(mysql_num_rows($selection_cours_tp)>=1) {
		  $classe_matiere=mysql_fetch_assoc($selection_classe_matiere);
			  echo '<span class="informations_importantes">Classe : </span>'.html_entity_decode(stripslashes($classe_matiere['classe_cours']))."<br />";
              echo '<span class="informations_importantes">Matière : </span>'.html_entity_decode(stripslashes($classe_matiere['matiere_cours']));
 
          while ($donnees_cours_tp_eleve = mysql_fetch_assoc($selection_cours_tp)) {
              echo html_entity_decode(stripslashes($donnees_cours_tp_eleve['date_depot_cours']));
              echo html_entity_decode(stripslashes($donnees_cours_tp_eleve['introduction_cours']));
              echo "<h1>".html_entity_decode(stripslashes($donnees_cours_tp_eleve['titre_chapitre']))."</h1>";  
              echo html_entity_decode(stripslashes($donnees_cours_tp_eleve['contenu_chapitre']));
	            // Récupération du nombre d'enregistrements des questions du Cours/TP dans la base de données pour faire qu'un bloc "Exercices" s'il y a plusieurs questions (à voir avec une question par chapitre) - Deuxième version - Il faut améliorer pour que les questions s'affichent par rapport aux chapitres (au bon endroit)
              $nombre_de_questions = mysql_num_rows($query_selection_questions_cours_tp);
                  // Boucle qui permet d'afficher la question et la zone de texte correspondante - DEBUT
                  for ($i = 0; $i < $nombre_de_questions; $i++) {
	 $donnees_exercice_question_cours_tp_eleve = mysql_fetch_assoc($query_selection_questions_cours_tp);
               if(mysql_num_rows($query_selection_questions_cours_tp)>=1) {               
			echo '<div class="exercice">'.html_entity_decode(stripslashes($donnees_exercice_question_cours_tp_eleve['contenu_question'])).'<a name="question'.($i+1).'"></a><div class="reponse_cours_tp">Votre réponse <b>n°'.($i+1).'</b> <div style="position:relative; top:1.5em;left:0em;float:left;" id="image'.($i+1).'"></div>:<br /><textarea onkeyup="dynamicHeight(this);" rows="1" style="height: 40px;" cols="80" name="reponse'.($i+1).'" onChange="go('.($i+1).', this.value);"></textarea></div></div>';
}
                  // Boucle qui permet d'afficher la question et la zone de texte correspondante - FIN
	  	  }
        echo html_entity_decode($donnees_cours_tp_eleve['conclusion_cours']); 
}
}
}
?>

Ma question est : Comment afficher les questions et les zones de texte correspondantes (du bon cours) au bon endroit par rapport aux chapitres ? S'il n'y a pas de question, ce n'est pas la peine d'afficher le bloc : "Exercice". Actuellement, toutes les questions s'affichent sous le premier chapitre et ne prennent pas en compte le champs id_chapitre de la table des questions. De plus, le bloc "Exercice" s'affiche même quand il n'y a pas de question.

Je viens vers vous en ayant réfléchi, je ne viens pas en "touriste" !

Cordialement