Lernziele

  • HTML-Ausgaben mit PHP erzeugen können.
  • Eingabeverarbeitung und Fehlerbehandlung umsetzen können.
  • Datei-, Array-, String-, und Datums-Funktionen kennen und anwenden können.
  • Logik und Darstellung mit Templates trennen kennen.

Kontext

Erstellen Sie eine einfache PHP-Anwendung zur Verwaltung eines Lauftagebuchs mit folgenden Eigenschaften:

  • Für jeden Kalendertag gibt es höchstens eine Eintragung.
  • Eine Eintragung besteht aus: Datum, gelaufene Strecke (in km) und gelaufene Zeit (in Sekunden)
  • Die Daten sollen in einer einzelnen Text-Datei auf dem Webserver gespeichert werden, auf dem auch die PHP-Skripte liegen (sodass man die Datei einfach herunterladen kann).
  • Verschiedene Nutzer oder Authorisierung brauchen Sie nicht zu unterstützen, d.h. es ist in Ordnung, wenn verschiedene Nutzer auf die gleichen Daten zugreifen.

Allgemeine Hinweise:

  • Deployen Sie Anwendung auf Heroku; hinterlegen Sie Ihr Projekt auf dem f4-Server.
  • Nutzen Sie keine PHP-Bibliotheken außer Twig.
  • Sie können beliebige Ihnen vertraute Frontend-Technologien einsetzen (also CSS- und JavaScript-Bibliotheken).

1. Basisfunktionalität

Schreiben Sie eine Anwendung in PHP, die Folgendes realisiert:

  • Detailansicht: Auflistung der bisherigen Lauftage mit Datum, gelaufener Strecke, gelaufener Zeit und errechneter (und sinnvoll gerundeter) Durchschnittgeschwindigkeit; aufsteigend sortiert nach Datum.
  • Eingabe: Formular zur Eintragung eines neuen Lauftages. Wird dabei ein Tag angegeben, für den es schon einen Eintrag gibt, wird der existierende Eintrag überschrieben. Eingabeformate:
    • Datum: JJJJ-MM-TT (das ist der interne Standard von input type=date)
    • Strecke: nn (ganzzahlig) oder nn.n (Dezimalstelle hinter einem Punkt)
    • Zeit: hh:mm:ss
  • Gesamtansicht: Anzeige der Anzahl der Lauftage und die Anzahl der Gesamttage die zwischen dem ersten und letzten Lauftag liegen; außerdem Gesamtlaufzeit und Gesamtkilometer.

Es ist Ihnen überlassen, wie viele PHP-Dateien und wie viele HTTP-Request-Ziele Sie anlegen (möglich wäre z.B. eine einzige Webseite/Skript mit allen drei Funktionen, oder auch zwei oder drei separate Webseiten/Skripte).

Das Datenformat für die Speicherung dürfen Sie frei wählen. Bei den Formulareingaben dürfen Sie zunächst von gültigen und sinnvollen Eingaben ausgehen.

2. Fehlerbehandlung bei der Eingabe

Ihre Anwendung soll nun folgende Eingabefehler behandeln:

  • Falsches Datumsformat (d.h. etwas anderes als JJJJ-MM-TT, z.B. für alte Browser, die input type=date nicht kennen)
  • Datum in der Zukunft
  • Ungültiges Streckenformat (keine Zahl)
  • Negative Strecke oder Strecke der Länge 0
  • Ungültiges Zeitformat
  • Negative Zeit oder Zeit der Länge 0

Grundlegende Behandlung: Wenn einer der o.g. Fehlerfälle auftritt, soll kein neuer Eintrag auf dem Server gespeichert werden und dem Nutzer soll eine Fehlermeldung angezeigt werden.

Erweiterte Behandlung: Zusätzlich zur grundlegenden Behandlung soll dem Nutzer nun im Fehlerfall genau mitgeteilt werden, was alles schief gelaufen ist. D.h. wenn mehrere Fehler aufgetreten sind, sollen davon auch alle berichtet werden.

3. Ergänzende Funktionalität: Einträge Löschen

In der Detailansicht der Lauftage soll neben jedem Eintrag ein Lösch-Link angezeigt werden. Beim Klick auf diesen Link wird der Eintrag aus der Server-Datei gelöscht.

4. Templates

Benutzen Sie Twig um die Erzeugung von HTML-Code und Verarbeitungslogik von einander zu trennen. Binden Sie Twig in Ihr Projekt über Composer ein.


Bewertungskriterien (max. 10 Punkte)

  • Basisfunktionalität ist implementiert (5 Punkte).
  • Grundlegende Fehlerbehandlung ist implementiert.
  • Erweiterte Fehlerbehandlung ist implementiert.
  • Löschfunktionalität ist implementiert.
  • Die PHP-Dateien beinhalten keine Darstellungslogik oder HTML-Code. Für die Darstellung werden Twig-Templates verwendet (2 Punkte).