Bonjour, je voudrais afficher mes cours dans mon emploi du temps.
mon code actuel:

$bdd = new PDO("sqlite:..//bdd/gestion.sql");
$bdd->exec("CREATE TABLE addtable (
    id INTEGER PRIMARY KEY AUTOINCREMENT,   
    dpt varchar(250) NOT NULL,
    cours varchar(250) NOT NULL,  
    matiere varchar(250) NOT NULL,  
    salle varchar(250) NOT NULL,  
    heure_debut varchar(250) NOT NULL,
    heure_fin varchar(250) NOT NULL,
    date DATE
  );");

$bdd->exec("INSERT INTO addtable (id, dpt, cours, matiere, salle, heure_debut, heure_fin, date) VALUES
(47, 'Informatique', 'TP', 'Programmation web 1', 'G310', '8:00', '9:00', '20-01-2021'),
(48, 'Mathématiques', 'TD', 'Mathématiques 1', 'P14', '10:00', '12:00 ', '23-01-2021'),
(50, 'Sciences de la vie et de la Terre', 'CM', 'Sciences de la vie et de la terre 1', 'S25', '13:00', '14:00', '09-09-2021'),
(51, 'Physique-Chimie', 'TP', 'Programmation web 1', 'G110', '14:00', '15:00', '18-09-2021'),
(52, 'Informatique', 'TD', 'Algorithme et programmation 1', 'D101', '15:00', '17:00', '20-09-2021'),
(53, 'Mathématiques', 'CM', 'Mathématiques 2', 'S19','8:00', '10:30', '01-09-2021');");

$bdd = new PDO('sqlite:..//bdd/gestion.sql');
$query = ("SELECT * FROM addtable ");
$res = $bdd->query($query);

$jours = array(null, "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi");
echo "<div class='container'><table width='' class='table table-bordered' style='text-align:center;' border='1' >
    <tr><th></th>";
    for($x = 1; $x < 6; $x++){
        echo "<th style='text-align:center; background:#CCCCCC;'>".$jours[$x]."</th>";
    }
    echo "</tr>";

    for ($heure = 8; $heure <= 18; $heure++) {
        echo "<tr>"; 
        $heure_aff = $heure; 
        if(strlen($heure_aff) <= 2) {
            echo "<td style=\"width:3%; vertical-align:top; text-align:center; background:#CCCCCC; font-weight: bold; \">";
            echo $heure_aff;
            echo "h00";
            echo "</td>";
        }

        for($d = 0; $d < 5; $d++){
            $date_num = date("d-m-Y", mktime(0, 0, 0, 1, 20+$d, 2021));
            echo "<td style=\"padding:10px 5px 10px 5px; border:1px solid #999999;\">";
            $date_lecon = $heure.":00 ".$date_num;

            while($row = $res->fetch()){
                if($date_lecon == $row['heure_debut']." ".$row['date']){

                    $rdv = $row['cours']."<br>".$row['matiere']."<br>".$row['salle'];
                    echo $rdv;
                }

            }
            echo "</td>";

        }
    }

echo "</table>";

Ce que je veux
Je voudrais quelque chose comme ça mais uniquement en heure pile:

[(https://i.stack.imgur.com/4jZEa.png)]

Ce que j'obtiens
Actuellement mon While ne s'effectue que dans une seule cellule.... Je ne comprends ppas pourquoi donc j'ai ceci:

[(https://i.stack.imgur.com/tefYT.png)]

Or si je echo $date_lecon juste avant d'entrer le while j'obtiens bien ceci:

[(https://www.developpez.net/forums/attachments/p594395d1616793729/php/langage/affichage-emploi-temps/capture-d-ecran-2021-03-26-21-46-51.png/)]

Merci d'avance pour votre aide !

1 réponse


J'ai réussi à régler en partie mon problème en modifiant mon code comme ceci:

$query = ("SELECT * FROM addtable ");
$res = $bdd->query($query);
$rows = $res->fetchAll();// ICI !!!
$jours = array(null, "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi");
echo "<div class='container'><table width='' class='table table-bordered' style='text-align:center;' border='1' >
<tr><th></th>";
for ($x = 1; $x < 6; $x++) {
  echo "<th style='text-align:center; background:#CCCCCC;'>".$jours[$x]."</th>";
}
echo "</tr>";
for ($heure = 8; $heure <= 18; $heure++) {
  echo "<tr>";
  $heure_aff = $heure;
  if (strlen($heure_aff) <= 2) {
    echo "<td style=\"width:3%; vertical-align:top; text-align:center; background:#CCCCCC; font-weight: bold; \">";
    echo $heure_aff;
    echo "h00";
    echo "</td>";
  }

  for ($d = 0; $d < 5; $d++) {
    $date_num = date("d-m-Y", mktime(0, 0, 0, 1, 20 + $d, 2021));
    echo "<td style=\"padding:10px 5px 10px 5px; border:1px solid #999999;\">";
    $date_lecon = $heure.":00 ".$date_num;
    foreach ($rows as $row) {
      if ($date_lecon == $row['heure_debut']." ".$row['date']) {
        $rdv = $row['cours']."<br>".$row['matiere']."<br>".$row['salle'];
        echo $rdv;
      }
    }
    echo "</td>";
  }
  echo "</tr>";
}
echo "</table>"; 

Le problème est que si mon cours fait 2 heures il s'affiche que dans une seule ligne au lieu de 2, une idée ?