Afficher des enregistrements d'un $id sous forme de ligne
dilaam Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis un peu débuatnt en php mysql, je suis entrain de préparer un petit site de contrôle et d'évaluation pour nous aider à faire un suivi de progression de l'apprenant( cp...cm2)
j'ai crée plusieurs tables, mais l'essentiel ce sont les tables suivantes :
classes(id_c,classe, id_n)
matiers(id_m, mat, id_d, id_lang)
eleves( id_e, eleve,id_n,id_c …)
evaluations( id_ev, id_e, id_c, id_p, id_d, id_m, aquis, verif, id_u)
mon problème, je veux afficher les enregisterements de l’évalation sous forme d’un tableau comme suivant
<?php require_once'functions.php'; session_start(); logged_only(); require_once'header1.php';?> <!---debut table au sein du corps-----> <?php if( isset($_SESSION['auth'])){ $d = $_SESSION['auth']->langue; $n = $_SESSION['auth']->niveau; $ec = $_SESSION['auth']->ecole; $un = $_SESSION['auth']->uniteS; require_once('configEc.php'); require_once('config_bd.php'); require_once('functions.php'); $q = $bd->query(" SELECT ecole FROM ecoles WHERE ecoles.id_ec='".$ec."' "); $r = $q->fetch(); $q1 = $bd->query("SELECT uniteS FROM unites WHERE unites.id_un='".$un."' "); $r1 = $q1->fetch(); $q2 = $bd->query("SELECT niv FROM niveaux WHERE niveaux.id_n='".$n."' "); $r2 = $q2->fetch(); $q3 = $bd->query("SELECT an FROM annees ORDER BY id_a DESClimit1 "); $r3 = $q3->fetch();?> <div class="bulleg"> Etablissement :<?php {echo' '.$r->ecole.' ';}?><br/> Unitée :<?php {echo' '.$r1->uniteS.' ';}?><br/> </div> <div class="bulled"> Année scolaire:<?php { echo' '.$r3->an.' ';}?><br/> Niveau:<?php { echo' '.$r2->niv.' ';}?><br/> Professeur:<?php echo' '.$_SESSION['auth']->nom.' ';?> <?php echo' '.$_SESSION['auth']->prenom.' ';?><br/> Doti:<?php echo' '.$_SESSION['auth']->doti.' ';?> </div> <!---afficher les evaluations des élèves---> <table class="table table-striped" border="1"> <?php $cl = $_GET['id_c']; require_once('functions.php');require_once('config_bd.php');require_once('configEc.php'); $r2=$bd->query('SELECT classe FROM classes WHERE classes.id_c='.$cl.' '); $s2=$r2->fetch();{?><caption>Grille de dépouillement de la classe: <?php echo' '.$s2->classe.' ';}?></caption> <tr> <td>Eleve</td> <?php $cl = $_GET['id_c']; $r1=$bd->query('SELECT id_m, mat FROM matieres WHERE matieres.id_lang='.$d.' ORDER BY id_m '); while ($s1=$r1->fetch()) {?> <td><?php echo' '.$s1->id_m.' ';?><?php echo' '.$s1->mat.' ';?></td><?php }?> </tr> <tr><?php $cl = $_GET['id_c']; $r=$bd->query('SELECT id_e, eleve FROM eleves WHERE eleves.id_clas='.$cl.''); while ($s=$r->fetch()){?> <td><?php echo' '.$s->id_e.' ';?><?php echo' '.$s->eleve.' ';?></td> <?php $cl = $_GET['id_c']; $u=$_SESSION['auth']->id_u; $r3=$bd->query('SELECT id_e,id_m,aquis FROM evaluations WHERE evaluations.id_e='.$s->id_e.' AND evaluations.id_u='.$u.' ORDER BY id_m '); while ($s3=$r3->fetch()){?> <td><?php echo' '.$s3->aquis.' ';?>*<?php echo' '.$s3->id_m.' ';?></td><?php }?> </tr><?php }?> </table> <!---fin de l'affichage des évaluations---> <?php }?>
les resulats que j'ai maintenant, sont affichés de cette façon sous forme d'un tableau
NomEleve | Matières | Acquis
Alain Oral A
Sara Lecture B
Alain Lecture A
Robert Oral B
Alain Informatique B
Moi, je cherche à mettre les aquis de x par exemple, sur la meme ligne avec le nom de chaque matiere. sous forme d'un tableau
NomEleve Matières
Oral | Lecture | Conjugaison |...|Informatique
Alain A | A | B |...| B
Sara A | B | A
Robert B | A |C
Je vous remercie pour votre aide
Windows / Firefox 102.0
- Afficher des enregistrements d'un $id sous forme de ligne
- Partage de photos en ligne - Guide
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau word - Guide
- Mètre en ligne - Guide
- Id telephone - Guide
4 réponses
bonjour,
je crois que le plus simple, c'est, en PHP, de parcourir le résultat que tu obtiens, et d'enregistrer les données dans un tableau à deux dimensions.
<?php $x=array(); $x['a']['b']=123; $x['a']['z']=123;
Quand ta table est remplie, tu pourras ensuite la parcourir avec deux boucles, et générer le tableau HTML.
Bonjour,
Le souci est avant tout la récupération des données....
Il faut que tu te penches sur les jointures (requête sql) afin de ne pas avoir à faire des boucles dans des boucles...
Djéà, Commence par faire la requête avec les jointures. ( le premier champ à mettre dans ta requête SELECT étant l'étudiant )
Une fois que tu as réalisé ceci.... fais un FETCH_ALL après l'éxécution de ta requête afin de stocker le résultat dans un array.
Dans l'idéal, si tu es en bien en PDO, tu peux ajouter un mode de "fetch" ( le FETCH_GROUP )
https://phpdelusions.net/pdo/fetch_modes#FETCH_GROUP
qui permettra de structurer ton tableau par "étudiant".
Il te suffira ensuite de deux foreach imbriqués pour réaliser ton tableau.
Si tu ne vois pas comment le faire, fais nous un var_dump de l'array contenant le résultat de ta requête et on verra comment t'aider.
salut tous le monde.
j'ai fait ce que vous m'avez demandé
configuration
<?php $bd = new PDO('mysql:dbname=ecole;host=127.0.0.1', 'root', ''); $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); $bd->exec("SET CHARACTER SET utf8"); <!---affichage des evalautaions---> <?php $cl = $_GET['id_c']; $sql = $bd->query("SELECT eleves.eleve, matieres.mat, evaluations.aquis FROM evaluations inner join eleves on evaluations.id_e = eleves.id_e inner join matieres on evaluations.id_m = matieres.id_m where evaluations.id_c = '".$cl."' "); while($data = $sql->fetch()){ var_dump($data); }?> <!---les resultats de (var_dump) pour cette classe sont les suivants:---> object(stdClass)#12 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(12) "Calcul" ["aquis"]=> int(1) } object(stdClass)#13 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(26) "Obj_sciences" ["aquis"]=> int(0) } object(stdClass)#12 (3) { ["eleve"]=> string(23) "Robert" ["mat"]=> string(26) "Obj_sciences" ["aquis"]=> int(0) } object(stdClass)#13 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(12) "Mesure" ["aquis"]=> int(0) } object(stdClass)#12 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(7) "Lecture" ["aquis"]=> int(1) } object(stdClass)#13 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(27) "Informatique" ["aquis"]=> int(1) } object(stdClass)#12 (3) { ["eleve"]=> string(25) "Sara" ["mat"]=> string(14) "Géométrie" ["aquis"]=> int(0) } object(stdClass)#13 (3) { ["eleve"]=> string(25) "Alain" ["mat"]=> string(14) "Géométrie" ["aquis"]=> int(1) }
------------------
Mais, si je met fetch_ALL, je n'oubtiens aucune donnée et si je change fetch_obj par fetch_assoc, je n'oubtiens aucune donnée aussi.
vraiment, vraiment, je suis figé dans ma place, je ne sais plus quoi faire.
Commence par appliquer ce qui est indiqué ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
A noter que ton code devrait ressembler à ceci (au niveau de la requête )
<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à la bdd try{ $bdd =new PDO('mysql:host=localhost; dbname=ecole; charset=utf8', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //récupération PROPRE des variables AVANT de les utiliser $cl = !empty($_GET['id_c']) ? $_GET['id_c']: NULL; //préparation de la requête $sql = "SELECT E.eleve, M.mat, EV.aquis FROM evaluations EV inner join eleves E on EV.id_e = E.id_e inner join matieres M on EV.id_m = M.id_m where EV.id_c = :cl ORDER BY E.eleve ASC, M.mat asc "; $datas = array(':cl'=>$cl); // variables utilisées dans la requête //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } //On stocke le résultat de la requête dans un array et avec un fetch_group $result = $requete->fetchAll(PDO::FETCH_GROUP); echo "<pre>": var_dump($result): echo "</pre>";
Salut tous le monde.
cher jordane45
voilà ler résultat de ta requete pour une autre classe cl = 14
array(3) { ["Sami"]=> array(4) { [0]=> array(2) { ["mat"]=> string(7) "Dictée" ["aquis"]=> int(1) } [1]=> array(2) { ["mat"]=> string(15) "Ecriture/Copier" ["aquis"]=> int(1) } [2]=> array(2) { ["mat"]=> string(4) "Oral" ["aquis"]=> int(2) } [3]=> array(2) { ["mat"]=> string(14) "Géométrie" ["aquis"]=> int(0) } } ["Nada"]=> array(1) { [0]=> array(2) { ["mat"]=> string(4) "Oral" ["aquis"]=> int(1) } } ["Carlo"]=> array(1) { [0]=> array(2) { ["mat"]=> string(4) "Oral" ["aquis"]=> int(1) } } }
Est ce que la connexion à ma base de cette façon est faux???
config_bd.php
<?php $bd = new PDO('mysql:dbname=ecole;host=127.0.0.1', 'root', ''); $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); $bd->exec("SET CHARACTER SET utf8");
config_Ec.php
<?php try { $bd = new PDO('mysql:host=127.0.0.1;dbname=ecole', 'root','',array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); } catch(PDOException $e) { die('erreur:'.$e->getMessage()); } ?>
requete..
<?php $cl = $_GET['id_c']; $sql = $bd->query('SELECT eleves.eleve, matieres.mat, evaluations.aquis FROM evaluations inner join eleves on evaluations.id_e = eleves.id_e inner join matieres on evaluations.id_m = matieres.id_m where evaluations.id_c = '.$cl.' '); while($data = $sql->fetchall()){ echo "<pre>"; var_dump($data); echo "</pre>"; }?>
j'ai fait fatchall, et il a marché. je crois que hier je na'i pas actualisé la page !!!
Oublie ton code et reste sur le mien.....
A partir de là, grâce au var_dump tu peux voir que tu as un array structuré par : ELEVE et pour chaque ELEVE les matières pour lesquelles il a été évalué.
A toi de boucler sur cet array pour construire le tableau que tu veux....
NB: Tu dois boucler via un foreach directement sur la variable $result ... (et surtout pas un while($data = $sql->fetchall()){ ) !!
Bonjour, je suis vraiment désolé, mais je crois que je suis null!!!
//On stocke le résultat de la requête dans un array et avec un fetch_group $result = $requete->fetchAll(PDO::FETCH_GROUP); echo"<pre>"; var_dump($result);//je la laisse pour voir la structure echo"<pre>"; ?> <table border="1"> <tr> <th>Elève</th> <?php foreach ($result as $mat): ?> <th><?php echo" $mat "; ?></th><!--Warning: Array to string conversion in /opt/lampp/htdocs/ecole/Fr/test7.php on line 55 Array --> <?php endforeach ?> </tr> <?php foreach ($result as $eleve => $aquis): ?> <tr> <td><?php echo $eleve; ?></td><!---les noms affichés---> <?php foreach ($result as $mat => $aquis): ?> <td><?php echo $aquis; ?></td><!---Warning: Array to string conversion in /opt/lampp/htdocs/ecole/Fr/test7.php on line 62 Array--> <?php endforeach ?> </tr> <?php endforeach ?> </table>
c'est la premiere fois que j'utilise la fonction foreach, ja'i regardé des videos et je crois que j'ai fais une erreur pour $mat et $aquis.
pourriez vous me diriger? je m'excuse une autre fois.
Merci passer une bonne journée
Salut,
je viens vers toi apres plusieurs tentatives,
j'ai suivi le lien que tu m'as donné, j'ai fais un peu de progrès, mais je demande vraiment ton aide pour terminer se travail.
voilà mon foreach
<?php $result = $requete->fetchAll(PDO::FETCH_GROUP); echo"<pre>"; var_dump($result);//je la laisse pour voir la structure echo"<pre>"; foreach($result as $eleve => $nom ){ echo'L\'élève : '.$eleve. '<br>'; //nom des eleves foreach($nom as $nbeva => $tabmat){ echo 'l\'évaluation numéro : '.$nbeva.' <br> '; // nombre des évaluations faites par eleve' foreach($tabmat as $element =>$valeur){ echo' Nom de l\'élèment :' .$element.' sa valeur est :'.$valeur.' <br>'; //noms des elements mat et aquis avec leurs valeurs //**je ne sais pas comment faire pour les séparer** } } } ?>
j'ai du mal à réaliser le tableau
le résultat de foreach est le suivant:
L'élève : Alain
l'évaluation numéro : 0
Nom de l'élèment :mat sa valeur est :Dictée
Nom de l'élèment :aquis sa valeur est :1
l'évaluation numéro : 1
Nom de l'élèment :mat sa valeur est :Ecriture/Copier
Nom de l'élèment :aquis sa valeur est :1
l'évaluation numéro : 2
Nom de l'élèment :mat sa valeur est :Oral
Nom de l'élèment :aquis sa valeur est :2
l'évaluation numéro : 3
Nom de l'élèment :mat sa valeur est :Géométrie
Nom de l'élèment :aquis sa valeur est :0
L'élève : Robert
l'évaluation numéro : 0
Nom de l'élèment :mat sa valeur est :Oral
Nom de l'élèment :aquis sa valeur est :1
L'élève : Sara
l'évaluation numéro : 0
Nom de l'élèment :mat sa valeur est :Oral
Nom de l'élèment :aquis sa valeur est :1
svp. ton aide (:-
J'ai suivi plusieurs videos et lu des pdfs concerants foreach.
dans mon cas, je crois que j'ai 3 tableaux array.
j'affiche le nom de l'élève du tableau 1 {contient les deux autres tableaux, }
le nombre des évaluations faites du tableau 2.{que je cache}
pour le tableau 3 qui contient matière (mat) et acquisition (aquis):{ mat , aquis se sont les elements}
ils sont relies entre eux !!!
foreach($result as $nom =>$eleve ){ echo"$nom =><br>"; foreach($eleve as $nbeva => $tabmat){ //echo 'l\'évaluation numéro : '.$nbeva.' <br> '; // nombre d'évaluation faite foreach($tabmat as $element => $valeur){ //echo' '.$element.''; echo"$element=>$valeur <br>"; } } }
affichage du .. var_dump($result)
array(1) { ["Sara"]=> array(1) { [0]=> array(2) { ["mat"]=> string(11) "Orthographe" ["aquis"]=> int(1) } } }
affichage du foreach ..
Sara=>
mat=>Orthographe
aquis=>1
si vous avez des idées je suis à votre écoute. merci d'avance
Merci. Svp. Un petit exemple que vous avez déjà sous la main ✋.
Merci
Montre ton code adapté, avec les jointures. Cela nous permettra de montrer un début d'exemple proche de ta situation.