Zum Inhalt springen

Schulprojekt · M295 und M322

Antiquariat Kassius

Ein Online-Antiquariat für seltene und wertvolle Bücher, von der Gestaltung in Figma bis zur datenbankgestützten Web-Applikation.

Screenshot der Antiquariat-Kassius-Website

Über das Projekt

In den Modulen M322 und M295 habe ich zusammen einen vollständigen Webshop für ein fiktives Antiquariat entwickelt: M322 die Benutzeroberfläche, M295 das Backend dahinter. Die Aufgabe war, eine dynamische Website mit Datenbankanbindung zu bauen, vom Konzept bis zur fertigen, lauffähigen Anwendung.

Bevor ich eine Zeile Code geschrieben habe, habe ich in Figma einen kompletten Style-Guide und das gesamte Interface gestaltet: Farben, Typografie, Komponenten und alle Seiten. So stand das Design fest, bevor die Umsetzung begann.

Danach habe ich die Website mit PHP umgesetzt. Die Verbindung zur MySQL-Datenbank läuft über PDO mit vorbereiteten Statements (Prepared Statements), die vor SQL-Injection schützen. Die gesamte Anwendung läuft in einer Docker-Umgebung.

Auf einen vollen MVC-Aufbau mit eigenem Router habe ich bewusst verzichtet. Stattdessen arbeite ich mit Page Controllern: Jede PHP-Datei steht für eine URL und kümmert sich selbst um ihre Logik und ihre Ausgabe, ohne Framework dazwischen. Für ein Projekt dieser Grösse liess sich damit für mich leichter nachvollziehen, was bei welchem Seitenaufruf passiert.

Funktionen

Öffentlicher Bereich: Buchsammlung mit Live-Suche über mehrere Felder, Filter nach Kategorie und Zustand sowie Detailseiten für jedes Buch.
Admin-Login: sichere Anmeldung mit gehashten Passwörtern (password_verify) und Session-Verwaltung.
Buchverwaltung (CRUD): Bücher hinzufügen, bearbeiten und löschen, inklusive Foto-Upload.
Kundenverwaltung und Passwort-Änderung im geschützten Admin-Bereich.
PDO mit Prepared Statements als Schutz vor SQL-Injection, containerisiert mit Docker.

Einblick in den Code

Aus M322 kommt der Style-Guide. Seine Farben stehen eins zu eins als CSS-Variablen im Stylesheet, jede Seite nimmt ihre Farben nur von dort:

:root {
    --primary: #1a3a5c;
    --accent: #8B1E3F;
    --bg: #F5F1E8;
    --text: #1a1a2e;
    --text-muted: #6b6b6b;
    --white: #ffffff;
    --green: #16a34a;
}

Aus M295 kommt das Backend. Die Sortierung der Bücherliste steht in der URL, Spaltennamen lassen sich aber nicht als Platzhalter an ein Prepared Statement übergeben. Deshalb wählt der Wert aus der URL nur einen Eintrag aus einer festen Liste, alles andere fällt auf den Titel zurück:

$orderMap = ['titel' => 'b.Title', 'autor' => 'b.autor', 'katalog' => 'b.katalog, b.nummer'];
$order = $orderMap[$sortBy] ?? 'b.Title';

Mehr Code mit Erklärung steht auf den beiden Modulseiten: zur Oberfläche Navigation, Formulare, Tabellen und Barrierefreiheit, zum Backend Login mit Sessions, Passwort-Hashing, die Suche über vier Felder, Ausgabe-Escaping und die Prüfung auf dem Server.

Technologien

PHP PDO / MySQL Figma Docker HTML / CSS