Auslesen der Datensätze aus unserer Beispieldatenbank

Jetzt wollen wir die bereits in der Datenbank vorhandenen Beispieldatensätze auslesen – Beispieltermine haben wir ja bereits händisch aufgenommen.

Diese sollen dann nach diesem Kapitel sauber in unserer Termintabelle angezeigt werden:

Ausgabe der Termine aus der Datenbank in der Web-App
Ausgabe der Termine aus der Datenbank in der Web-App

Dazu gehen wir über einen üblichen MySQL-Zugriff, wie wir diesen bereits im Kapitel Datenbanken kennen gelernt haben vor. Allerdings lassen wir uns die Daten nicht sofort auf dem Ausgabegerät (später Handy oder Tablet und während der Entwicklung der normale Monitor) anzeigen, sondern speichern diese in einem Array ab. Mit diesem Array können wir später besser arbeiten. Zur Kontrolle können wir über „print_r“ den Inhalts des Arrays ausgeben.

Zur Kontrolle erstellen wir am Anfang unserer „index.php“ folgenden Code. Durch die Anweisung exit; wird der Rest unseres PHP-Programmes nicht mehr ausgeführt. Für uns ist die Kontrolle im aktuellen Zeitpunkt wichtig, ob wir auf unsere Datensätze in der Datenbank zugreifen können:

<?php
require_once('../db.php');
echo "<h1>Datenbank auslesen um ". date("H:i:s") . "</h1>";
$sql = "SELECT * FROM termine";
if ($erg = $db->query($sql)) {
 	if ($erg->num_rows) {
		print_r($erg->num_rows);
		$ds_gesamt = $erg->num_rows;
		$erg->free();
	}
	if ($erg = $db->query($sql)) {
		while ($datensatz = $erg->fetch_object()) {
			$daten[] = $datensatz;
		}
	}
}
echo '<pre>';
print_r($daten);
exit;
?>

Praktisch hat sich erwiesen, dass immer die aktuelle Uhrzeit mit Sekunden ausgegeben wird. Somit sieht man auf jeden Fall bei der erneuten Ausführung auf dem Bildschirm eine Änderung – auch wenn es nur die Sekundenanzeige ist.

Lassen wir nun das PHP-Programm zum ersten Mal ausführen, erhalten wir folgende Ausgabe:

Kontrollausgabe der aus Datenbank ausgelesenen Datensätze
Kontrollausgabe der aus Datenbank ausgelesenen Datensätze

Soweit hat das nun geklappt – aber wir wollen es in unserer Web-App als Tabelle ausgegeben haben. Wir können also wieder den bisherigen Anfang unserer „index.php“ wieder einfügen. Allerdings belassen wir nach unserer session_start(); das einbinden der Datenbank „db.php“, da wir später an verschiedenen Stellen in unserem Programm eine bereits aufgebaute Datenbankverbindung benötigen.

<?php
session_start();
require_once('../db.php');
if ( isset($_GET['aktion']) and $_GET['aktion'] == "ausloggen") 
{
	unset($_SESSION['eingeloggt']);
}
?>
<!DOCTYPE html>
<html lang="de">

Jetzt wollen wir die Datensätze aus unserer Datenbank in der Tabelle ausgeben lassen.

Dazu erweitern wir uns Bereich für die Tabelle

<!-- Hier kommt die Terminseite -->
<?php
$sql = "SELECT * FROM termine";
if ($erg = $db->query($sql)) {
    while ($datensatz = $erg->fetch_object()) {
        $daten[] = $datensatz;
    }
}
?>
<div data-role="page" id="termine" data-theme="b">
  <?php anzeige_kopfbereich('termine'); ?>
  <div data-role="main" class="ui-content">
    <h1>Termine</h1>
    <?php
    echo "<pre>";
    print_r($daten);
    echo "</pre>";
    ?>

Zur Kontrolle lassen wir die Daten per print_r($daten) ausgeben:

Kontrollausgabe der Datenbankeinträge in unserer Web-App
Kontrollausgabe der Datenbankeinträge in unserer Web-App

Jetzt müssen wir nur noch für die saubere Ausgabe innerhalb unserer Tabellenstruktur sorgen. Wir gehen also in unserem bisherigen Web-App-Code zu unserer Tabelle und packen innerhalb unseres HTML-Codes folgenden PHP-Code. Somit kommen die Datensätze aus der Datenbank:

  <div data-role="main" class="ui-content">
  	<h1>Termine</h1>
    <table id="meineTabelle" data-role="table" class="ui-responsive" data-mode="columntoggle" data-column-btn-text="Spalten" >
      <thead>
        <tr>
          <th data-priority="4">ID</th>
          <th>Datum</th>
          <th data-priority="1">Beginn</th>
          <th data-priority="2">Veranstaltungsort</th>
          <th data-priority="3">Anmerkung</th>
        </tr>
      </thead>
      <tbody>
    <?php
    foreach ($daten as $inhalt) {
    ?>
        <tr>
            <td>
                <?php echo $inhalt->id; ?>
            </td>
            <td>
                <?php echo $inhalt->datum; ?>
            </td>
            <td>
                <?php echo $inhalt->beginn; ?>
            </td>
            <td>
                <?php echo $inhalt->ort; ?>
            </td>
            <td>
                <?php echo $inhalt->anmerkung; ?>
            </td>           
      </tr>
    <?php
    }
    ?>
      </tbody>
    </table>

Und das Ergebnis - alle Datenbankeinträge unsortiert bzw. in der Reihenfolge, wie diese in der Datenbank eingetragen sind!

Ausgabe aller Datenbankeinträge unsortiert
Ausgabe aller Datenbankeinträge unsortiert

Noch wird unser Datum in amerikanischer Schreibweise angezeigt. Dies sollten wir noch umbiegen. Dazu lassen wir über Funktion strtotime das Datum entsprechend umwandeln und können dann über date(…) nach unserem Belieben das Datum ausgeben.

    <?php
    foreach ($daten as $inhalt) {
    ?>
        <tr>
            <td>
                <?php echo $inhalt->id; ?>
            </td>
            <td>
                <?php 
                // echo $inhalt->datum; 
                echo date("d.m.Y", strtotime($inhalt->datum)); 
                ?>
            </td>

Dabei können wir auch noch bei der Ausgabe des Datums bestimmen, dass wir nur noch aktuelle Termine ausgeben lassen wollen. Dazu müssen wir die SQL-Anweisung entsprechend erweitern. Zusätzlich wir die Ausgabe durch ORDER BY datim noch nach dem Datum aufsteigend ausgegeben:

$sql = "SELECT * FROM termine WHERE datum >= '". date("Y-m-d") ."' ORDER BY datum";
if ($erg = $db->query($sql)) {
 	if ($erg->num_rows) {
		// print_r($erg->num_rows);
		$ds_gesamt = $erg->num_rows;
		$erg->free();
	}
	if ($erg = $db->query($sql)) {
		while ($datensatz = $erg->fetch_object()) {
			$daten[] = $datensatz;
		}
	}
}

Unser bisheriges Ergebnis (als aktuelles Datum gilt bei dem Beispiel der 11.4.2018 - sprich alle Termine vor diesem Datum werden nicht angezeigt):

Ausgabe der Datenbankeinträge in unserer Terminliste
Ausgabe der Datenbankeinträge in unserer Terminliste