Beispiel: Apfel-Datenbank

Dieses Beispiel soll einige wichtige Tätigkeiten im Zusammenhang mit PHP und MySQL demonstrieren.

(1) Startdatei

appleshop.html
<!DOCTYPE html>
<html lang="de">
    <head>
        <meta charset="UTF-8" />
        <title>Title</title>
    </head>
    <body>
    <h1>Webinterface für Online-Apfelshop</h1>
<hr>
 
<ul>
  <li><a href="apfeldb_bestellformular.html">Bestellformular</a></li>
  <li><a href="apfeldb_anzeige.php">Bestellungen anzeigen</a></li>
  <li><a href="apfeldb_aendern.php">Bestellungen ändern</a></li>
  <li><a href="apfeldb_loeschen.php">Bestellungen löschen</a></li>
  <li><a href="apfeldb_sortieren.php">Bestellungen sortieren</a></li>
</ul>
 
Bitte wählen Sie!
    </body>
</html>

(2) Bestellformular

apfeldb_bestellformular.html
<html>
<body>
Bitte geben Sie folgende Daten für Ihre Bestellung ein:
<form action = "apfeldb_schreiben.php" method = "post">
  <p><input size="20" name="name"> Vorname und Nachname</p>
  <p><input size="20" name="strasse"> Strasse</p>
  <p><input size="20" name="ort"> PLZ und Ort</p>
Apfelsorte:<br>
  <input type="radio" name="sorte" value="Jonagold">Jonagold
  <input type="radio" name="sorte" value="Gala">Gala
  <input type="radio" name="sorte" value="Elstar">Elstar
 
  <p><input size="10" name="menge"> kg (Menge)</p>
  <input type="submit" name="Senden" value="Absenden">
  <input type="reset">
</form>
</body>
</html>

(3) In die Datenbank schreiben

apfeldb_schreiben.php
<?php
// apfeldb_schreiben.php
// Fehlerbericht aktivieren
error_reporting(E_ALL);
 
// Datenbankverbindung aufbauen
include("connect.inc.php"); // connect.inc.php sollte PDO verwenden (wie zuvor gezeigt)
 
$tblname = "bestellung";
echo ' - Schreiben in <font color="#FF0000">' . $dbname . "->" . $tblname . "</font>";
echo "<hr>";
 
// --------------------------
if (isset($_POST["Senden"])) {
    echo "Schreibe neuen Eintrag...<br />";
 
    // Formulardaten übernehmen
    $name    = $_POST["name"];
    $strasse = $_POST["strasse"];
    $ort     = $_POST["ort"];
    $sorte   = $_POST["sorte"];
    $menge   = $_POST["menge"];
 
    try {
        // SQL-Anweisung mit Platzhaltern für sichere Datenübergabe
        $eintrag = "INSERT INTO bestellung (Name, Strasse, Ort, Sorte, Menge) 
                    VALUES (:name, :strasse, :ort, :sorte, :menge)";
 
        // SQL-Anweisung vorbereiten
        $stmt = $db->prepare($eintrag);
 
        // Daten an die Platzhalter binden
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':strasse', $strasse);
        $stmt->bindParam(':ort', $ort);
        $stmt->bindParam(':sorte', $sorte);
        $stmt->bindParam(':menge', $menge);
 
        // Ausführen der SQL-Anweisung
        if ($stmt->execute()) {
            echo "Eintrag in der Datenbank wurde erfolgreich vorgenommen!<br>";
            echo "<p>Folgende Angaben wurden gespeichert:</p>";
            echo "$name<br>";
            echo "$strasse<br>";
            echo "$ort<br>";
            echo "$menge kg $sorte<br>";
        } else {
            echo "Es gab ein Problem beim Einfügen der Daten.";
        }
    } catch (PDOException $e) {
        die("SQL-Fehler: " . $e->getMessage());
    }
}
// --------------------------
 
// Die Verbindung zur Datenbank muss nicht manuell geschlossen werden
// PDO schließt die Verbindung automatisch am Ende des Skripts
 
echo "<br> Verbindung beendet!";
 
// Weiteres Menü
echo "<hr>";
echo '<a href="appleshop.html">Verwaltungskonsole</a><br>';
?>

(4) Datenbank anzeigen

apfeldb_anzeige.php
<?php
// apfeldb_anzeige.php
// Fehlerbericht aktivieren
error_reporting(E_ALL);
 
// Datenbankverbindung aufbauen
include("connect.inc.php"); // connect.inc.php sollte PDO verwenden
 
$tblname = "bestellung";
 
try {
    // SQL-Abfrage, um alle Einträge aus der Tabelle 'bestellung' zu holen
    $abfrage = "SELECT * FROM $tblname;";
 
    // Abfrage vorbereiten und ausführen
    $stmt = $db->query($abfrage);
 
    // Anzahl der Datensätze ermitteln
    $dszahl = $stmt->rowCount();
 
    echo ' - Ausgabe von <font color="#FF0000">' . $dbname . "->" . $tblname . "</font>";
    echo "&nbsp;&nbsp;&nbsp;Der Abfrage entsprechen $dszahl Datensätze!<hr>";
 
    // Tabelle öffnen
    echo "<table>";
 
    // Daten in der Tabelle ausgeben
    foreach ($stmt as $i => $row) {
        // Werte aus der Datenbank holen
        $name    = $row['Name'];
        $strasse = $row['Strasse'];
        $ort     = $row['Ort'];
        $sorte   = $row['Sorte'];
        $menge   = $row['Menge'];
 
        // Zeilenfarbe wechseln (Zebra-Streifen-Effekt)
        if ($i % 2 == 0) {
            echo '<tr bgcolor="lightgrey">';
        } else {
            echo '<tr bgcolor="white">';
        }
 
        // Daten in die Tabelle einfügen
        echo "<td>$name</td><td>$strasse</td><td>$ort</td><td>$sorte</td><td>$menge</td>";
        echo '</tr>';
    }
 
    // Tabelle schließen
    echo "</table>";
 
} catch (PDOException $e) {
    // Fehlerbehandlung bei SQL-Abfragen
    echo "<br>Die SQL-Anweisung schlug fehl!<br>Fehler: " . $e->getMessage();
}
 
// Verbindung muss nicht explizit geschlossen werden, PDO schließt sie automatisch
 
echo "<br> Verbindung beendet!";
 
// Weiteres Menü
echo "<hr>";
echo '<a href="appleshop.html">Verwaltungskonsole</a><br>';
?>

(5) Datenbank editieren

apfeldb_aendern.php
<?php
// apfeldb_anzeigen (Ändern)
 
// Fehlerberichterstattung aktivieren
require("connect.inc.php"); // PDO-Verbindung
 
$tblname = "bestellung";
echo "- Ändern von <font color='#ff0000'>$tblname</font> möglich<hr>";
 
// Daten speichern
if (isset($_POST["speichern"])) {
    $ID = $_POST['ID'];
    $name = $_POST['Name'];
    $strasse = $_POST['Strasse'];
    $ort = $_POST['Ort'];
    $sorte = $_POST['Sorte'];
    $menge = $_POST['Menge'];
 
    // SQL-Abfrage zum Aktualisieren der Daten
    $abfrage = "UPDATE bestellung SET Name = :name, Strasse = :strasse, Ort = :ort, Sorte = :sorte, Menge = :menge WHERE Name = :ID";
    $stmt = $db->prepare($abfrage);
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':strasse', $strasse);
    $stmt->bindParam(':ort', $ort);
    $stmt->bindParam(':sorte', $sorte);
    $stmt->bindParam(':menge', $menge);
    $stmt->bindParam(':ID', $ID);
 
    if ($stmt->execute()) {
        echo "Änderung erfolgreich übernommen <br><br>";
    } else {
        echo "SQL-Fehler.";
    }
}
 
// Daten aus der Datenbank holen
$abfrage = "SELECT * FROM $tblname";
$stmt = $db->query($abfrage);
$dsz = $stmt->rowCount();
 
// Ausgabe der Daten
echo "<table border='#000000'>";
echo "<tr align='center' bgcolor='#C0C0C0'><td><b>Name</b></td><td><b>Strasse</b></td><td><b>Ort</b></td><td><b>Sorte</b></td><td><b>Menge</b></td></tr>";
 
foreach ($stmt as $i => $row) {
    $id = $row['id'];
    $name = $row['Name'];
    $strasse = $row['Strasse'];
    $ort = $row['Ort'];
    $sorte = $row['Sorte'];
    $menge = $row['Menge'];
 
    echo ($i % 2 == 1) ? "<tr bgcolor='#C0C0C0'>" : "<tr>";
    echo "<td>$name</td><td>$strasse</td><td>$ort</td><td>$sorte</td><td>$menge</td></tr>";
}
 
echo "</table>";
 
// Ändern ermöglichen
if (isset($_POST["Aendern"])) {
    $id = $_POST['ID'];
    $abfrage = "SELECT * FROM $tblname WHERE Name = :id";
    $stmt = $db->prepare($abfrage);
    $stmt->bindParam(':id', $id);
    $stmt->execute();
    $row = $stmt->fetch();
 
    if ($row) {
        $name = $row['Name'];
        $strasse = $row['Strasse'];
        $ort = $row['Ort'];
        $sorte = $row['Sorte'];
        $menge = $row['Menge'];
        ?>
        <form action="apfeldb_aendern.php" method="POST">
            <input type='Hidden' name="id" value="<?php echo $id; ?>">
            <input type='Text' name='Name' value='<?php echo $name; ?>'>
            <input type='Text' name='Strasse' value='<?php echo $strasse; ?>'>
            <input type='Text' name='Ort' value='<?php echo $ort; ?>'>
            <input type='Text' name='Sorte' value='<?php echo $sorte; ?>'>
            <input type='Text' name='Menge' value='<?php echo $menge; ?>'>
 
            <input type="Submit" name="speichern" value="Speichern">
        </form>
        <?php
    }
} else {
    ?>
    <br>
    <b>Daten eines Kunden ändern:</b><hr>
    Geben Sie die id des Kunden ein, um seine/ihre Daten zu ändern:<br>
    <form action="apfeldb_aendern.php" method="POST">
        <pre>
        Name: <input type="Text" name="id"> <input type="Submit" name="Aendern" value="Ändern">
        </pre>
    </form>
    <?php
}
?>

(6) Löschen in Datenbank

apfeldb_loeschen.php
<?php
// apfeldb_anzeigen (Löschen)
 
// Fehlerberichterstattung aktivieren
require("connect.inc.php"); // PDO-Verbindung
 
$tblname = "bestellung";
echo "- Löschen von <font color='#ff0000'>$tblname</font> möglich<hr>";
 
// Daten löschen
if (isset($_POST["Loeschen"])) {
    $ID = $_POST["ID"];
 
    // SQL-Abfrage zum Löschen der Daten
    $abfrage = "DELETE FROM bestellung WHERE Name = :ID";
    $stmt = $db->prepare($abfrage);
    $stmt->bindParam(':ID', $ID);
 
    if ($stmt->execute()) {
        echo "Daten erfolgreich gelöscht.<br><br>";
    } else {
        echo "SQL-Fehler.";
    }
} else {
    ?>
    <br>
    <b>Daten eines Kunden löschen:</b><br>
    Geben Sie den Namen des Kunden ein, um seine/ihre Daten zu löschen:<br>
    <form action="apfeldb_loeschen.php" method="POST">
        <pre>
        Name: <input type="Text" name="ID"> <input type="Submit" name="Loeschen" value="Löschen">
        </pre>
    </form>
    <hr>
    <?php
}
 
// Daten aus der Datenbank holen
$abfrage = "SELECT * FROM $tblname";
$stmt = $db->query($abfrage);
$dsz = $stmt->rowCount();
 
// Ausgabe der Daten
echo "<br><table border='#000000'>";
echo "<tr align='center' bgcolor='#C0C0C0'><td><b>Name</b></td><td><b>Straße</b></td><td><b>Ort</b></td><td><b>Sorte</b></td><td><b>Menge</b></td></tr>";
 
foreach ($stmt as $i => $row) {
    $name = $row['Name'];
    $strasse = $row['Strasse'];
    $ort = $row['Ort'];
    $sorte = $row['Sorte'];
    $menge = $row['Menge'];
 
    echo ($i % 2 == 1) ? "<tr bgcolor='#C0C0C0'>" : "<tr>";
    echo "<td>$name</td><td>$strasse</td><td>$ort</td><td>$sorte</td><td>$menge</td></tr>";
}
 
echo "</table>";
?>

(7) Datenbank sortieren

apfeldb_sortieren.php
<?php
 
// MySQL-Verbindung aufbauen
require("connect.inc.php"); // PDO-Verbindung
$tblname = "bestellung";
echo "- Sortieren von <font color='#ff0000'>$tblname</font> möglich<hr>";
 
// Daten aus der Datenbank holen
$abfrage = "SELECT * FROM $tblname";
$stmt = $db->query($abfrage);
$dsz = $stmt->rowCount();
 
// Wenn "Sortieren" geklickt wurde, nach Auswahl sortieren
if ($_POST["Sortieren"] == "Sortieren") {
    $wahl = $_POST["wahl"];
 
    // SQL-Abfrage mit ORDER BY für die ausgewählte Spalte
    $abfrage = "SELECT * FROM $tblname ORDER BY $wahl";
    $stmt = $db->query($abfrage);
}
?>
 
<!-- Formular zur Sortierung -->
<form action="apfeldb_sortieren.php" method="POST">
    <?php
    echo "<table border='#000000'>";
 
    // Radiobuttons für die Spaltenauswahl
    echo "<tr align='center'><td><input type='Radio' name='wahl' value='Name'></td>
          <td><input type='Radio' name='wahl' value='Strasse'></td>
          <td><input type='Radio' name='wahl' value='Ort'></td>
          <td><input type='Radio' name='wahl' value='Sorte'></td>
          <td><input type='Radio' name='wahl' value='Menge'></td></tr>";
 
    // Tabellenüberschriften
    echo "<tr align='center' bgcolor='#C0C0C0'><td><b>Name</b></td>
          <td><b>Straße</b></td>
          <td><b>Ort</b></td>
          <td><b>Sorte</b></td>
          <td><b>Menge</b></td></tr>";
 
    // Ausgabe der Datensätze
    foreach ($stmt as $i => $row) {
        $name = $row['Name'];
        $strasse = $row['Strasse'];
        $ort = $row['Ort'];
        $sorte = $row['Sorte'];
        $menge = $row['Menge'];
 
        // Wechselnde Hintergrundfarbe für jede zweite Zeile
        echo ($i % 2 == 1) ? "<tr bgcolor='#C0C0C0'>" : "<tr>";
        echo "<td>$name</td><td>$strasse</td><td>$ort</td><td>$sorte</td><td>$menge</td></tr>";
    }
 
    echo "</table>";
    ?>
    <br>
    <input type="Submit" name="Sortieren" value="Sortieren">
</form>
 
<?php
 
// MySQL-Verbindung schließen
$db = null;
echo "<br>Verbindung beendet!";
echo "<br><br><a href='appleshop.html'>Zurück</a>";
 
?>