assignments/Assignment_007/readme.md

71 lines
3.5 KiB
Markdown

# Filmdatenbank mit echter Datenbank
📆 **Fällig: 07.01.2024** 📆
Ziel dieser Übung ist es, bei der Filmdatenbank aus der letzten Übung eine echte Datenbank einzusetzen und somit die Session nicht länger als Datenspeicher missbrauchen zu müssen.
## Lernziele
* Serverseitige Programmierung mit PHP
* Grundlegende PHP Sprach- und Kontrollstrukturen
* Verwendung des PHP-Datenbankinterfaces
* Einfache SQL-Statements (`INSERT`, `DELETE`, `SELECT` und `CREATE TABLE`)
## Teil 1: Datenbankunterstützung einbinden
Für dieses Assignment verwenden Sie SQLite3 als Datenbank, weil hierfür kein Server installiert werden muss, man aber trotzdem eine vollwertige Datenbank bekommt. SQLite3 legt die Datenbank in einer Datei ab, die vom PHP-Programm benutzt werden kann.
Kopieren Sie Ihre vorhergehende Version der Filmdatenbank und binden Sie zusätzlich PDO und SQLite3 ein, indem Sie eine entsprechende `composer.json`-Datei schreiben und `composer` ausführen.
```json
{
"require": {
"twig/twig": "^3.0",
"ext-pdo": "*",
"ext-sqlite3": "*"
}
}
```
Laden Sie [composer herunter](https://getcomposer.org/) und führen Sie dann folgendes Kommando im Verzeichnis aus, in dem auch die Datei `composer.json` liegt:
```console
$ php composer.phar install
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
...
$
```
Es entsteht ein neues Verzeichnis `vendor`, in dem sich die Bibliotheken befinden.
## Teil 2: Datenbankzugriff
Schreiben Sie eine Klasse `DbFilm`, welche den Datenbankzugriff durchführt. Diese sollte folgende Eigenschaften haben:
1. Falls die Datenbankdatei noch nicht existiert, legt die Klasse die Tabelle `film` an und schreibt die Klasse die Stammdaten (Standard-Film-Liste aus der vorherigen Übung in die Datenbank).
2. Über die Methode `insert_film` kann man einen neuen Film einfügen. Man übergibt ihr ein Film-Objekt, das in der Datenbank persistiert wird.
3. Die Methode `read_filme` liest alle Filme ein und gibt ein Array von `Film`-Objekten zurück.
4. Die Methode `delete_film` bekommt die ID eines Films und löscht ihn aus der Datenbank.
Die SQLIte3-Datenbank wird automatisch angelegt, wenn Sie das PDO-Objekt mit `new \PDO("sqlite:" . DB_FILE);` erzeugen. Die Tabellen müssen Sie über ein `CREATE TABLE` erzeugen und die Stammdaten per `INSERT` einfügen.
## Teil 3: Dynamische Webseite
Schreiben Sie die Lösung zum vorhergehenden Assignment so um, dass nicht mehr die Session, sondern die Datenbank benutzt wird. Sie werden Ihre Film-Klasse um ein weiteres Attribut (`$id`) für den Primärschlüssel aus der Datenbank erweitern wollen.
Die Sortierfunktion müssen Sie nicht implementieren, sondern können sie einfach weglassen.
## Abgabe
Verwenden Sie das Ihnen zugeordnete Git-Repository und legen Sie für jedes Assignment einen Ordner an: `Assignment_01`, `Assignment_02`, ...
Innerhalb des Ordners für das Assignment legen Sie bitte folgende drei Ordner an:
* `src`: Der Source-Code, der nicht im Webroot liegen soll / kann
* `doc`: Zusätzliche Dokumentation, die Sie zur Verfügung stellen wollen
* `site`: Die fertige Webanwendung. Dieser Ordner ist das _Webroot_ der Anwendung
Legen Sie die Lösung so in Ihrem Repository ab, dass man das Repository einfach clonen kann, dann in den Ordner `site` geht und dort einen Webserver (z.B. `php -S localhost:8080`) starten kann. Die Seite sollte dann korrekt aufrufbar sein.