Dokumentation: Das Comic-Archiv – Struktur & Lösungsansätze
Diese Dokumentation gibt einen Überblick über die Architektur, die Kernfunktionen und die technischen Lösungsstrategien des Comic-Archivs.
1. Projektübersicht & Architektur
Das Ziel des Projekts ist die Erstellung einer robusten und benutzerfreundlichen Webanwendung zur Verwaltung einer Comicsammlung. Die Architektur wurde bewusst auf mehrere Dateien aufgeteilt, um eine klare Trennung der Zuständigkeiten zu gewährleisten und die Wartbarkeit zu erhöhen.
Dateistruktur:
index.php(Startseite): Dient als zentraler Navigations-Hub. Sie zeigt eine Übersicht und lädt alle anderen Anwendungsbereiche in einen iFrame-Container. Dies erzeugt das Gefühl einer Single-Page-Application (SPA), bei der der Benutzer die Hauptseite nie verlässt.start.php(Titeleingabe): Das Herzstück der Datenerfassung. Hier werden einzelne Comics erfasst, bearbeitet und gelöscht.serie.php(Serieneingabe): Eine spezialisierte Maske zur schnellen Erfassung ganzer Comic-Serien.comics.php(Datenbankanzeige): Eine reine Ansichts- und Suchseite, optimiert für das Durchsuchen und Filtern des gesamten Archivs.backend.php(Datenbankwartung): Ein Werkzeugkasten für fortgeschrittene Datenpflege, wie die Massenbearbeitung von Autoren oder das Finden von Duplikaten.backup.php(Datensicherung): Eine kritische Sicherheitsfunktion zum Erstellen und Wiederherstellen von Datenbank-Backups.
Zentrale Hilfsdateien:
Um Code-Wiederholungen zu vermeiden (DRY-Prinzip) und die Wartung zu vereinfachen, wurden drei zentrale Dateien ausgelagert:
config.php: Enthält ausschließlich die Zugangsdaten zur Datenbank. Ändern sich diese, muss nur diese eine Datei angepasst werden.functions.php: Beinhaltet alle wiederkehrenden PHP-Funktionen (z.B. zur Namensformatierung oder zur Erstellung von Sortier-Links).style.css: Definiert das gesamte visuelle Erscheinungsbild der Anwendung. Dies sorgt für ein konsistentes Design und beschleunigt die Ladezeiten durch Browser-Caching.
2. Kernfunktionen & Technische Lösungen
Dateneingabe (start.php & serie.php)
- Problem: Die manuelle Eingabe von sich wiederholenden Daten (wie Autorennamen oder Verlage) ist fehleranfällig und zeitaufwendig.
- Lösung:
- Normalisierte Datenbanken: Es wurden separate Tabellen
AutorenDBundZeichnerDBerstellt. Diese enthalten jeden Künstlernamen nur ein einziges Mal. - Datenbankgestützte Vorschläge: Die Eingabefelder für „Autor“, „Zeichner“, „Verlag“ und „Serie“ nutzen HTML5-
<datalist>-Elemente. Diese werden dynamisch mit den bereits vorhandenen Einträgen aus der Datenbank gefüllt, was die Tipparbeit reduziert und die Konsistenz erhöht. - Intelligentes Ausfüllen: Ein JavaScript-Listener füllt automatisch das Feld „Erscheinungsjahr“ mit dem frühesten bekannten Jahr aus, sobald eine bereits existierende Serie ausgewählt wird.
- KI-gestützte Erfassung: Die Integration der Gemini-API ermöglicht es, durch das Fotografieren eines Covers die meisten Felder automatisch ausfüllen zu lassen, was den Erfassungsprozess massiv beschleunigt.
- Normalisierte Datenbanken: Es wurden separate Tabellen
Datenbankanzeige & Suche (comics.php)
- Problem: Eine große Datenmenge muss effizient durchsuchbar, sortierbar und übersichtlich dargestellt werden.
- Lösung:
- Serverseitige Verarbeitung: Alle Such-, Sortier- und Paginierungs-Operationen finden direkt auf dem Server statt. So werden immer nur die relevanten Daten an den Browser gesendet, was auch bei Tausenden von Einträgen schnell bleibt.
- Flexible Sortierung: Die
createSortLink()-Funktion generiert dynamisch die Links in den Tabellenköpfen und merkt sich den aktuellen Sortierstatus über GET-Parameter. - Intelligente Paginierung: Die
generatePaginationLinks()-Funktion zeigt bei vielen Seiten nicht mehr alle Seitenzahlen an, sondern kürzt die Anzeige intelligent (z.B. „1, 2, 3, …, 20, 21, …“), um die Navigation übersichtlich zu halten. - Inline-Bearbeitung: Ein JavaScript ermöglicht es, ausgewählte Tabellenzeilen direkt in bearbeitbare Formularfelder umzuwandeln und alle Änderungen gesammelt zu speichern. Dies vermeidet den Umweg über eine separate Bearbeitungsseite für kleine Korrekturen.
- Interaktive Künstlernamen: Autoren- und Zeichnernamen werden als klickbare Links dargestellt, die eine neue Suche nach dem jeweiligen Künstler auslösen.
Datenbankwartung (backend.php)
- Problem: Inkonsistente Daten (z.B. „Marvel“ vs. „Marvel Comic Group“) erschweren die Suche und Auswertung.
- Lösung:
- Normalisierungsfunktion: Die
normalize_for_similarity()-Funktion ist das Herzstück der Duplikatssuche. Sie konvertiert einen String in eine vereinfachte Basisform (Kleinschreibung, Entfernung von Suffixen wie „Verlag“ oder „Comics“), um semantisch gleiche, aber unterschiedlich geschriebene Einträge zu finden. - Kontrollierte Zusammenführung: Anstatt Änderungen automatisch durchzuführen, präsentiert das Tool dem Benutzer eine Liste der gefundenen Duplikatsgruppen. Der Benutzer hat die volle Kontrolle und kann für jede Gruppe den korrekten „Master-Eintrag“ auswählen, einen neuen Namen manuell eingeben oder die Änderung überspringen.
- Normalisierungsfunktion: Die
3. Sicherheit
- SQL-Injection-Prävention: Alle Datenbankabfragen, die Benutzereingaben enthalten, werden konsequent über Prepared Statements (
$conn->prepare(),$stmt->bind_param()) ausgeführt. Dies ist die wichtigste Maßnahme, um die Datenbank vor bösartigen Angriffen zu schützen. - Cross-Site-Scripting (XSS) Prävention: Alle Daten, die aus der Datenbank gelesen und im HTML ausgegeben werden, werden mit
htmlspecialchars()behandelt. Dies verhindert, dass schädlicher Code in die Seite eingeschleust und im Browser anderer Benutzer ausgeführt wird. - Datensicherung: Die
backup.phpnutzt serverseitige Systembefehle (mysqldump). Um die Sicherheit zu erhöhen, werden alle an diese Befehle übergebenen Variablen mitescapeshellarg()behandelt, was Command-Injection-Angriffe verhindert.