Afficher des enregistrements d'un $id sous forme de ligne

Fermé
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 - 8 avril 2023 à 20:34
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 - 15 avril 2023 à 19:45

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.' ';?>&nbsp;<?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

A voir également:

4 réponses

yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
9 avril 2023 à 12:38

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.

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
9 avril 2023 à 15:42

Merci. Svp. Un petit exemple que vous avez déjà sous la main ✋.

Merci

0
yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
9 avril 2023 à 18:31

Montre ton code adapté, avec les jointures.  Cela nous permettra de montrer un début d'exemple proche de ta situation.

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
9 avril 2023 à 14:50

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...


0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
9 avril 2023 à 15:40

Merci pour ra réponse ☺️. Mais j'ai essayé avec la jointure avec les trois tables eleves, matieres et evaluations. Mais je n'arrive pas a afficher les données comme j'ai demandé en haut.

Pouvez vous me donner un petit exemple.

Merci

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
9 avril 2023 à 20:33

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.

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024
11 avril 2023 à 19:47

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.
 

0
yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
11 avril 2023 à 22:36

peux-tu montrer le code avec fetchall?

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
14 avril 2023 à 20:08

fatchall ça marche. c'était une erreur de ma part; je n'ai actualisé la page

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
11 avril 2023 à 23:00
0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
11 avril 2023 à 23:13

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>";
0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024
12 avril 2023 à 09:52

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)
    }
  }
}
0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
12 avril 2023 à 10:08

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 !!!

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
12 avril 2023 à 10:09

Merci mille fois pour votre aide jordane45 et les autres,

est ce que je suis proche de realiser le tableau???

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
12 avril 2023 à 11:03

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()){   ) !!

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
13 avril 2023 à 11:55

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

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
13 avril 2023 à 12:09
1
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024
14 avril 2023 à 20:13

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.'&nbsp; 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 (:-

0
yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023
14 avril 2023 à 20:56

Je pense que tu devrais commencer par des exercices pus simples, afin de comprendre ce que tu fais.

0
dilaam Messages postés 19 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 15 avril 2023 > yg_be Messages postés 23340 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
15 avril 2023 à 19:45

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

0