Affichage impossible des données de BDD obtenu par Jointure
modemo2018
Messages postés
226
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, j'ai crée un tableau où je desire afficher les matières + plusieurs notes de devoirs + Note de composition + Moyenne de matière
Les données sont contenus dans 3 tables qui sont lié: Table Matière + Note + Moyenne
j'ai fait la Jointure entre ces differentes table voici le code:
Voici le code PHP où doit s'afficher les resultats de mes réquêtes
Le problème que j'ai est que lorsque je lance l'execution les données de ma BDD ne s'affiche et je n'ai pas un retour d'erreur
SVP Quelqu'un peut-il m'aider pour afficher à bien les données de ma BDD?
Les données sont contenus dans 3 tables qui sont lié: Table Matière + Note + Moyenne
j'ai fait la Jointure entre ces differentes table voici le code:
<?php //début de ton fichier php .... ça veut dire .. DEBUT !!!: error_reporting ( E_ALL ); ini_set ( 'display_errors', TRUE ); ini_set ( 'display_startup_errors', TRUE ); $nom = !empty ( $_GET['nom'] ) ? $_GET['nom'] : NULL; $prenom = !empty ( $_GET['prenom'] ) ? $_GET['prenom'] : NULL; $cycle = !empty ( $_GET['cycle'] ) ? $_GET['cycle'] : NULL; $ideleve = !empty ( $_GET['ideleve'] ) ? $_GET['ideleve'] : NULL; $typenote1 = 'Note de devoir'; $typenote2 = 'Note d'examen'; $typenote3 = '1e seule note'; //Recherche les notes que des devoir et les moyennes de matière de classe $sql = "SELECT N.* , M.* FROM note N LEFT JOIN moyenne M ON M.ideleve = N.ideleve2 WHERE N.typenote = ? AND N.ideleve2 = ?"; $datas = array($ideleve, $typenote1); try { $req = $bdd->prepare($sql); $req->execute($datas); $donnees = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } //Recherche des matières et rien que les notes d'examen $sql1 = "SELECT T.* , A.* FROM note T LEFT JOIN matiere A ON A.idmat = T.idmat WHERE T.typenote = ? AND T.ideleve2 = ?"; $data = array($ideleve, $typenote2); try { $req1 = $bdd->prepare($sql1); $req1->execute($data); $don = $req1->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } // Trouver Le Nombre total des notes de devoir $sql2 = 'SELECT max(notemat) FROM note WHERE typenote = ?'; try { $req1 = $bdd->prepare ( $sql2 ); $req1->execute (array($typenote1)); $result = $req1->fetchColumn (); $id = $result; } ?>
Voici le code PHP où doit s'afficher les resultats de mes réquêtes
. <table > <thead> <?php //|| ($don['cycle']='LYCÉE TECHNIQUE') echo '<tr>'; echo '<th>'; echo '<strong>#</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Matière</strong>'; echo '</th>'; echo '<th colspan="';?> <?php echo $id;?> <?php echo ' ">'; echo '<strong>Note de classe</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Note de composition</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Moyenne(matière)</strong>'; echo '</th>'; echo '</tr>'; ?> </thead> <tbody> <?php if(!empty($donnees)){ foreach($donnees as $j=>$D){ echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$D['nomat']. '</td>'; while($don) { echo '<td>'.$don['notemat'].'</td>'; } echo '<td>'.$D['notemat'].'</td>'; echo '<td>'.$D['moyen'].'</td>'; echo '</tr>'; } } ?> </tbody> </table>
Le problème que j'ai est que lorsque je lance l'execution les données de ma BDD ne s'affiche et je n'ai pas un retour d'erreur
SVP Quelqu'un peut-il m'aider pour afficher à bien les données de ma BDD?
A voir également:
- Affichage impossible des données de BDD obtenu par Jointure
- Fuite données maif - Guide
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Affichage double ecran - Guide
- Sauvegarde des données - Guide
5 réponses
Bonjour,
Tu poses ta question dans le forum mysql ... c'est donc ton souci concerne les requêtes et le code PHP ne nous servira donc à rien..
Donc...
Pour commencer...
As tu testé tes différentes requêtes DIRECTEMENT dans ta bdd ( via phpmyadmin par exemple ou en lignes de commandes ) ?
Qu'est-ce qu'elles t'affichent ?
Les données sembles bonnes ?
Tu poses ta question dans le forum mysql ... c'est donc ton souci concerne les requêtes et le code PHP ne nous servira donc à rien..
Donc...
Pour commencer...
As tu testé tes différentes requêtes DIRECTEMENT dans ta bdd ( via phpmyadmin par exemple ou en lignes de commandes ) ?
Qu'est-ce qu'elles t'affichent ?
Les données sembles bonnes ?
Bonjour,
Je ne fais toujours pas de php ou mysql ;-) mais il me semble bizarre en 40 et 43 que les 2 champs ne soient pas dans le même ordre. Idem en 22 25
Je ne fais toujours pas de php ou mysql ;-) mais il me semble bizarre en 40 et 43 que les 2 champs ne soient pas dans le même ordre. Idem en 22 25
Bonjour, ça a marché Merci BEAUCOUP, il affiche maintenant les résultats
j'ai rencontre juste un problème au niveau du tableau
en faite il ya plusieur note d'évaluation et jai envi que ces note s'affiche dynamiquement à la colonne " Note d'évaluation" voilà pourquoi j'ai utilisé Colspan au niveau de l'ent-tête.
Mais lorsque j'ai exécuté le code, j'ai l'impression que mon affichage s'est bloqué au niveau de la boucle while
et du coup les autres resultats ne s'affiche pas,
Quelqu'un pourrai t-il m'aidé SVP?
j'ai rencontre juste un problème au niveau du tableau
<table > <thead> <?php //|| ($don['cycle']='LYCÉE TECHNIQUE') echo '<tr>'; echo '<th>'; echo '<strong>#</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Matière</strong>'; echo '</th>'; echo '<th colspan="';?> <?php echo $id;?> <?php echo ' ">'; echo '<strong>Note d'évaluation</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Note d'exam</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Moyenne(matière)</strong>'; echo '</th>'; echo '</tr>'; ?> </thead> <tbody> <?php if(!empty($donnees)){ foreach($donnees as $j=>$D){ echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$D['nomat']. '</td>'; while($donnees) { foreach($don as $d=>$P){ echo '<td>'.$P['notemat'].'</td>'; } } // à ce niveau echo '<td>'.$D['notemat'].'</td>'; echo '<td>'.$D['moyen'].'</td>'; echo '</tr>'; } } ?> </tbody> </table>
en faite il ya plusieur note d'évaluation et jai envi que ces note s'affiche dynamiquement à la colonne " Note d'évaluation" voilà pourquoi j'ai utilisé Colspan au niveau de l'ent-tête.
Mais lorsque j'ai exécuté le code, j'ai l'impression que mon affichage s'est bloqué au niveau de la boucle while
while($donnees) { foreach($don as $d=>$P){ echo '<td>'.$P['notemat'].'</td>'; } } // à ce niveau
et du coup les autres resultats ne s'affiche pas,
Quelqu'un pourrai t-il m'aidé SVP?
J'ai enlévé le while, cette fois-ci toutes les matières s'affiche mais juste qu'au des notes d'évalution il ya un affichage discontinue à tel point qu'il ya debordement de la taille du tableau , il devait normalement affiché que 3 ou 4 case de notes d'évalution puis afficher les autres notes
voici le code PHP :
voici le code PHP :
<table > <thead> <?php //|| ($don['cycle']='LYCÉE TECHNIQUE') echo '<tr>'; echo '<th>'; echo '<strong>#</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Matière</strong>'; echo '</th>'; echo '<th colspan="';?> <?php echo $id;?> <?php echo ' ">'; echo '<strong>Note d'évaluation</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Note d'Exam </strong>'; echo '</th>'; echo '<th>'; echo '<strong>Moyenne(matière)</strong>'; echo '</th>'; echo '</tr>'; ?> </thead> <tbody> <?php if(!empty($don)){ foreach($don as $j=>$D){ echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$D['nomat']. '</td>'; foreach($donnees as $d=>$P){ echo '<td>'.$P['notemat'].'</td>'; } echo '<td>'.$D['notemat'].'</td>'; echo '<td>'.$donnees['moyen'].'</td>'; echo '</tr>'; } } ?> </tbody> </table>
Normal... vu que tu boucles sur toutes les notes.... sans te préocuper dans quelle matière tu es.
Il faut donc, soit avec un IF pour gérer sur tu te trouves dans la matières à afficher...
Soit, retravailler l'array en amont afin que sa structure soit plus simples à manipuler.
Un truc du genre
//Puis dans la boucle d'affichage
Il faut donc, soit avec un IF pour gérer sur tu te trouves dans la matières à afficher...
Soit, retravailler l'array en amont afin que sa structure soit plus simples à manipuler.
Un truc du genre
$sql = "SELECT N.* , M.* FROM note N LEFT JOIN matiere M ON M.idmat = N.idmat WHERE N.typenote = ? AND N.ideleve2 = ?"; $data = array($typenote,$ideleve); try { $req = $bdd->prepare($sql); $req->execute($data); $arrTmp = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } //On retravaille l'array $arrNotes = array(); if(!empty($arrTmp)){ foreach($arrTmp as $N){ $arrNotes[$N['nomat']][] = $N['notemat']; } }
//Puis dans la boucle d'affichage
if(!empty($don)){ foreach($don as $j=>$D){ echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$D['nomat']. '</td>'; if(!empty($arrNotes[$D['nomat']])){ foreach($arrNotes[$D['nomat']] as $d=>$P){ echo '<td>'.$P.'</td>'; } } echo '<td>'.$donnees['moyen'].'</td>'; echo '</tr>'; } }
Quand j'essaie avec ton compte on me signale '' Notice: Undefined index: nomat in /Applications/MAMP/htdocs/kela/note2.php on line ''
excuse moi Pourquoi tu as fait
je ne comprend pas
sachant que nomat: cè la table des noms des matières
et notemat: cè la table qui contient la valeur des notes
excuse moi Pourquoi tu as fait
$arrNotes[$N['nomat']][] = $N['notemat'];
je ne comprend pas
sachant que nomat: cè la table des noms des matières
et notemat: cè la table qui contient la valeur des notes
Bon... reprenons...
Montres nous ton code actuel (complet ! )
Normalement, tu devrais y avoir une requête de la forme (vu le précédent message : https://forums.commentcamarche.net/forum/affich-36347406-affichage-impossible-des-donnees-de-bdd-obtenu-par-jointure#10 )
Au passage, merci de vérifier que la requête fonctionne directement en BDD ( fais en nous une capture écran stp )
Bien entendu.. si la requête n'affiche rien directement en BDD;... commence par la corriger. ça ne sert à rien de continuer le code php tant que ce point ne sera pas résolu !
Montres nous ton code actuel (complet ! )
Normalement, tu devrais y avoir une requête de la forme (vu le précédent message : https://forums.commentcamarche.net/forum/affich-36347406-affichage-impossible-des-donnees-de-bdd-obtenu-par-jointure#10 )
$sql = "SELECT N.* , M.* FROM note N LEFT JOIN matiere M ON M.idmat = N.idmat WHERE N.typenote = ? AND N.ideleve = ?"; $data = array($typenote,$ideleve); try { $req = $bdd->prepare($sql); $req->execute($data); $arrTmp = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } //le temps des tests : echo "<pre>"; print_r($arrTmp); echo "</pre>"; //On retravaille l'array $arrNotes = array(); if(!empty($arrTmp)){ foreach($arrTmp as $N){ // on créé un tableau, qui pour chaque matière, associe la ou les notes correspondantes $arrNotes[$N['nomat']][] = $N['notemat']; } } //le temps des tests : echo "<pre>"; print_r($arrNotes); echo "</pre>";
Au passage, merci de vérifier que la requête fonctionne directement en BDD ( fais en nous une capture écran stp )
Bien entendu.. si la requête n'affiche rien directement en BDD;... commence par la corriger. ça ne sert à rien de continuer le code php tant que ce point ne sera pas résolu !
il affiche les valeurs mais ne s'affiche pas sur le tableau qui est en bas
voici le code de l'affichage du tableau
voici le code de l'affichage du tableau
<table > <thead> <?php echo '<tr>'; echo '<th>'; echo '<strong>#</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Matière</strong>'; echo '</th>'; echo '<th colspan="';?> <?php echo $id;?> <?php echo ' ">'; echo '<strong>Note de classe</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Note de composition</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Moyenne(matière)</strong>'; echo '</th>'; echo '</tr>'; ?> </thead> <tbody> <?php if(!empty($don)){ foreach($don as $j=>$D){ echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$D['nomat']. '</td>'; if(!empty($arrNotes[$D['nomat']])){ foreach($arrNotes[$D['nomat']] as $d=>$P){ echo '<td>'.$P.'</td>'; } } echo '<td>'.$donnees['moyen'].'</td>'; echo '</tr>'; } } ?> </tbody> </table>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Teste ça et dis moi ce que ça donne
<?php //début de ton fichier php .... ça veut dire .. DEBUT !!!: error_reporting ( E_ALL ); ini_set ( 'display_errors', TRUE ); ini_set ( 'display_startup_errors', TRUE ); $nom = !empty ( $_GET['nom'] ) ? $_GET['nom'] : NULL; $prenom = !empty ( $_GET['prenom'] ) ? $_GET['prenom'] : NULL; $cycle = !empty ( $_GET['cycle'] ) ? $_GET['cycle'] : NULL; $ideleve = !empty ( $_GET['ideleve'] ) ? $_GET['ideleve'] : NULL; $typenote1 = 'Note de devoir'; $typenote2 = 'Note de composition'; $typenote3 = '1e seule note'; function getMoyenneByMatieresForEleve($ideleve){ global $bdd; $sql = "SELECT MO.moyen as MOYENNEELEVE, MA.* FROM matiere MA LEFT JOIN moyenne MO ON MA.idmat = MO.idmat WHERE MO.ideleve = ?"; $datas = array($ideleve); try { $req = $bdd->prepare($sql); $req->execute($datas); $donnees = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } return $donnees; } function getAllNotesByMatieresForEleve($ideleve){ global $bdd; $sql = "SELECT N.* , M.* FROM note N LEFT JOIN matiere M ON M.idmat = N.idmat WHERE N.ideleve = ?"; $data = array($ideleve); try { $req = $bdd->prepare($sql); $req->execute($data); $arrTmp = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } $arrNotes = array(); if(!empty($arrTmp)){ foreach($arrTmp as $N){ // on créé un tableau, qui pour chaque matière, associe la ou les notes correspondantes $arrNotes[$N['idmat']][] = $N; } } //le temps des tests : //echo "<pre>"; //print_r($arrTmp); //echo "</pre>"; return $arrNotes; } $arrMoyennes = getMoyenneByMatieresForEleve($ideleve); $arrNotes = getAllNotesByMatieresForEleve($ideleve) // pour voir ce que ça donne... faudra juste que tu le réadaptes pour l'afficher comme tu le veux : if(!empty($arrMoyennes)){ foreach($arrMoyennes as $M){ $nomMat = $M['nomat']; $idMat = $M['idmat']; $moyenneEleve = $M['MOYENNEELEVE']; echo "<br> Matières : ". $nomMat ; echo "<br> Moyenne de l'elève : ". $moyenneEleve ; if(!empty($arrNotes[$idmat])){ echo "<pre>"; foreach($arrNotes[$idmat] as $k=>$N){ print_r($N,true); } echo "</pre>"; } } } ?>
Voici comment j'ai adapté ça sur mon code
Voici la partie du tableau
Mais quand je lance le code il ya pas d'affichage
<?php //début de ton fichier php .... ça veut dire .. DEBUT !!!: error_reporting ( E_ALL ); ini_set ( 'display_errors', TRUE ); ini_set ( 'display_startup_errors', TRUE ); $nom = !empty ( $_GET['nom'] ) ? $_GET['nom'] : NULL; $prenom = !empty ( $_GET['prenom'] ) ? $_GET['prenom'] : NULL; $cycle = !empty ( $_GET['cycle'] ) ? $_GET['cycle'] : NULL; $ideleve = !empty ( $_GET['ideleve'] ) ? $_GET['ideleve'] : NULL; $typenote1 = 'Note de devoir'; $typenote2 = 'Note de composition'; $typenote3 = '1e seule note'; function getMoyenneByMatieresForEleve($ideleve){ global $bdd; $sql = "SELECT MO.moyen as MOYENNEELEVE, MA.* FROM matiere MA LEFT JOIN moyenne MO ON MA.idmat = MO.idmat WHERE MO.ideleve = ?"; $datas = array($ideleve); try { $req = $bdd->prepare($sql); $req->execute($datas); $donnees = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } return $donnees; } function getAllNotesByMatieresForEleve($ideleve){ global $bdd; $sql = "SELECT N.* , M.* FROM note N LEFT JOIN matiere M ON M.idmat = N.idmat WHERE N.ideleve = ?"; $data = array($ideleve); try { $req = $bdd->prepare($sql); $req->execute($data); $arrTmp = $req->fetchAll(); //on stocke le resultat de la requete dans un ARRAY } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } $arrNotes = array(); if(!empty($arrTmp)){ foreach($arrTmp as $N){ // on créé un tableau, qui pour chaque matière, associe la ou les notes correspondantes $arrNotes[$N['idmat']][] = $N; } } //le temps des tests : //echo "<pre>"; //print_r($arrTmp); //echo "</pre>"; return $arrNotes; } $arrMoyennes = getMoyenneByMatieresForEleve($ideleve); $arrNotes = getAllNotesByMatieresForEleve($ideleve) // pour voir ce que ça donne... faudra juste que tu le réadaptes pour l'afficher comme tu le veux : ?>
Voici la partie du tableau
<table > <thead> <?php echo '<tr>'; echo '<th>'; echo '<strong>#</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Matière</strong>'; echo '</th>'; echo '<th colspan="';?> <?php echo $id;?> <?php echo ' ">'; echo '<strong>Note de classe</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Note de composition</strong>'; echo '</th>'; echo '<th>'; echo '<strong>Moyenne(matière)</strong>'; echo '</th>'; echo '</tr>'; ?> </thead> <tbody> <?php if(!empty($arrMoyennes)){ foreach($arrMoyennes as $M){$nomMat = $M['nomat']; $idMat = $M['idmat'];$moyenneEleve = $M['MOYENNEELEVE']; echo '<tr>'; echo '<td>' .$j .'</td>'; echo '<td>'.$nomMat. '</td>'; if(!empty($arrNotes[$idmat])){ foreach($arrNotes[$idmat] as $k=>$N){ echo '<td>'.$N.'</td>'; } } echo '<td>'.$moyenneEleve.'</td>'; echo '</tr>'; } ?> </tbody> </table>
Mais quand je lance le code il ya pas d'affichage
Il aurait donc fallu poster ta question dans le forum PHP ( tu as du mal à poster au bon endroit visiblement....)
Je déplace donc ta question dans le bon forum.
Tu utilises de requêtes préparées ... avec des points d'interrogations.
Ces "?" correspondent aux variables que tu veux utiliser dans ta requête via ton array datas
L'ordre des variables que tu places dans cet array doit correspondre à l'ordre que ces variables ont dans ta requête...
Hors.... je doute fortement que tu veuilles utiliser le $ideleve pour le typenote ... et le $typenote pour le ideleve2
Ce n'est pourtant pas compliqué à comprendre.....
Même jee pee qui ne fait pas de php/mysql a sû voir où se trouvait le problème dès que tu as posté ta question...
Faut que tu fasses des efforts de compréhension et surtout que tu saches relire ton code en prenant du recul pour détecter ce genre d'erreur.