Die Aufgabe
Aufgabe 6: PHP DB-Klasse (12 Punkte)
Im Folgenden finden Sie eine rudimentäre PHP-Modell-Klasse basierend auf mysqli. Sie beruht auf der Terminkalender-Aufgabe 4 und soll die Verwaltung von Terminen ermöglichen. Zum Speichern der Daten wird die folgende Tabelle genutzt:
CREATE TABLE Termine ( tid INTEGER NOT NULL, -- Termin-ID datum DATE NOT NULL, -- Datum txt VARCHAR(50), -- Kommentar rid INTEGER NOT NULL REFERENCES RUBRIKEN(rid))a) Die zu erstellende Klasse soll in MVC-Anwendungen sinnvoll eingesetzt werden können. Ergänzen Sie den Rahmencode sinnvoll. Wichtige fehlende Stellen sind mit XXX markiert.
class TerminDB { public $tid; public $datum; public $txt; public $rid; // Alle Termine der Rubrik $rid ab dem Datum $datum public static function getTerminFromRubrikDatum($db, $rid, $datum) { # XXX SQL Statement $sql = $stmt = $db->prepare($sql); # XXX Parameter binden $stmt->execute(); # XXX Ergebnis lesen $stmt->close(); return $erg; } public function insert($db) { # XXX SQL Statement $sql = # XXX Daten einfügen $erg = $stmt->execute(); # XXX Statement schließen return $erg; } # XXX Ggf. weitere erforderliche Methoden: }b) Nutzen Sie Ihre in Teil a) erstellte Klasse nun. Ergänzen Sie den folgenden Programmcode (ohne Fehlerbehandlung). Es soll zunächst ein Termin angelegt werden. Anschließend werden die Termine einer Rubrik ab einem Datum gesucht:
$db = new mysqli('localhost', 'myUser', 'myPw', 'myDB'); # XXX Anlegen eines neuen Termins: tid=7 am 15.07.2026,# Text "Klausur IProg", in der Rubrik mit rid=3 # XXX Lesen aller Termine der Rubrik 3 ab dem 01.07.2026$ergebnis = Die Aufgabe ist aus dem Gedächtnisprotokoll nachgebaut. Das Protokoll nennt nur die Tabelle, die 12 Punkte und: „Wie in der Probeklausur gab es hier Rahmencode zu ergänzen und dann die gebaute Klasse anzuwenden.“ Den Rahmencode haben wir darum nach Klausur 2, Aufgabe 6 gebaut. Den Namen der Suchmethode nennt das Protokoll in Aufgabe 7: getTerminFromRubrikDatum. Im Protokoll fehlt in der Tabelle das Komma hinter txt, und die Rubrik-Tabelle heißt einmal RUBRIK, einmal RUBRIKEN. Wir ergänzen das Komma und nehmen RUBRIKEN wie in Aufgabe 4.
In eigenen Worten: Die Klasse TerminDB ist das Modell für die Tabelle Termine: Nur sie spricht mit der Datenbank. Die Suche liefert alle Termine einer Rubrik ab einem Datum. insert speichert einen Termin. In Teil b ruft man beides auf.
findBetweenPunkte, Speichern mit insert, Konstruktor bei den weiteren Methoden.?, den Wert setzt bind_param ein. Das heißt Prepared Statement und schützt vor SQL-Injection.- Den Rahmen lesen: Attribute, zwei Methoden.
- Suche: SQL, Parameter binden, Ergebnis lesen.
- insert: SQL, Daten binden, Statement schließen.
- Den fehlenden Konstruktor ergänzen.
- Teil b: Termin anlegen, Termine suchen.