Intercallage et affichage avec des données issues de plusieurs tables SQL
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:
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:
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