diff --git a/README.md b/README.md index e69de29..e1db15c 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,245 @@ +# Geizkragen – Preisvergleichs- und Produktplattform + +## Kurzüberblick + +Geizkragen ist eine webbasierte Anwendung zur Produktsuche, zum Preisvergleich und zur Verwaltung von Benutzerinteraktionen (z. B. Wunschliste, Konto). +Die Anwendung basiert auf einer klassischen serverseitigen Architektur mit PHP und relationaler Datenbank. + +--- + +## Funktionsumfang + +* Produktsuche (inkl. API-Endpunkt) +* Vergleich mehrerer Produkte +* Wunschliste (benutzergebunden) +* Benutzerregistrierung und Login +* Benutzerkonto-Verwaltung +* Adminbereich zur Benutzerverwaltung +* Hinzufügen neuer Produkte +* Produktdetailseiten +* Statistikfunktionen (JSON-basiert) +* Einfaches Empfehlungssystem + +--- + +## Projektstruktur + +```bash +geizkragen/ +│ +├── index.php # Startseite +├── productpage.php # Produktdetails +├── compare.php # Produktvergleich +├── wunschliste.php # Wunschliste +├── login.php # Login +├── register.php # Registrierung +├── account.php # Benutzerkonto +├── admin_users.php # Admin-Panel +│ +├── api/ +│ └── search_products.php # Produktsuche API +│ +├── assets/ +│ ├── css/ # Stylesheets +│ ├── images/ # Bilder / DB-Design +│ └── icons/ # Icons +│ +├── header.php # Header-Komponente +├── footer.php # Footer-Komponente +├── style.css # Globales Styling +├── stats.json # Statistiken +└── .htaccess # Serverkonfiguration +``` + +--- + +## Installation und Setup + +### Voraussetzungen + +* Webserver (z. B. Apache) +* PHP (empfohlen ≥ 7.x) +* MySQL oder MariaDB + +--- + +### Installation + +```bash +git clone +cd geizkragen +``` + +Alternativ: +Projekt entpacken nach: + +``` +C:\xampp\htdocs\geizkragen +``` + +--- + +### Datenbankeinrichtung + +1. Neue Datenbank erstellen +2. Tabellen entsprechend dem vorhandenen Schema anlegen +3. Zugangsdaten in den PHP-Dateien konfigurieren + +--- + +### Start + +* Webserver starten (z. B. Apache über XAMPP) +* Anwendung aufrufen: + +``` +http://localhost/geizkragen +``` + +--- + +## API + +### Produktsuche + +``` +GET /api/search_products.php?q=Suchbegriff +``` + +Antwort: + +* JSON-Format mit passenden Produkten + +--- + +## Technische Architektur + +### Backend + +* PHP (serverseitige Verarbeitung) +* Teilweise REST-ähnliche API-Struktur + +### Frontend + +* HTML5 +* CSS +* Serverseitiges Rendering (kein SPA) + +### Datenhaltung + +* Relationale Datenbank (MySQL/MariaDB) +* Ergänzend JSON-Dateien (z. B. Statistiken) + +--- + +## Zentrale Module + +| Modul | Funktion | +| --------------------- | -------------------------- | +| compare.php | Vergleich von Produkten | +| productAdder.php | Hinzufügen neuer Produkte | +| wunschliste.php | Verwaltung der Wunschliste | +| admin_users.php | Benutzerverwaltung | +| ad_recommendation.php | Empfehlungssystem | + +--- + +## Sicherheit (Bewertung und Empfehlungen) + +Aktueller Stand deutet auf grundlegende Implementierung hin, jedoch mit Verbesserungspotenzial. + +Empfohlene Maßnahmen: + +* Verwendung von Prepared Statements (PDO/MySQLi) +* Passwort-Hashing mit `password_hash()` und `password_verify()` +* Validierung und Sanitizing sämtlicher Eingaben +* CSRF-Schutz bei Formularen +* Session-Härtung (z. B. Regeneration von Session-IDs) + +--- + +## Erweiterungsmöglichkeiten + +* Einführung eines MVC-Patterns zur besseren Trennung von Logik und Darstellung +* Ausbau der API zu einer vollständigen REST-Schnittstelle +* Integration eines modernen Frontends (z. B. Vue oder React) +* Verbesserung der UI/UX (Responsive Design) +* Automatisierte Tests (Unit/Integration) +* Erweiterung des Empfehlungssystems (z. B. Scoring oder ML-basierte Ansätze) + +--- + +## Entwicklungsumgebung + +Empfohlen: + +* IDE: PhpStorm oder Visual Studio Code +* Datenbank-Tools: MySQL Workbench +* Lokaler Server: XAMPP oder vergleichbar + +--- + +## Lizenz + +Derzeit ist keine Lizenz definiert. +Empfehlung: Verwendung einer MIT-Lizenz oder vergleichbarer Open-Source-Lizenz. + +--- + +## Autor + +Fabian Schieder + +--- + +## Fachliche Einschätzung + +Das Projekt stellt eine solide Grundlage für eine klassische datenbankgestützte Webanwendung dar. +Architektonisch handelt es sich um eine typische serverseitig gerenderte PHP-Anwendung ohne klare Trennung der Schichten. + +Aus technischer Sicht sind folgende Punkte besonders relevant für die Weiterentwicklung: + +* Entkopplung von Präsentation und Logik (z. B. MVC) +* Verbesserung der Sicherheit (insbesondere Datenbankzugriffe und Authentifizierung) +* Modularisierung und Wartbarkeit des Codes +* Optional: Übergang zu API-first-Architektur + +--- + +## Typische Fehlerquellen und Best Practices + +### Häufige Probleme + +* Unsichere SQL-Queries (SQL-Injection) +* Fehlendes oder falsches Passwort-Hashing +* Vermischung von HTML und PHP (erschwerte Wartung) +* Fehlende Eingabevalidierung +* Unsichere Session-Verwaltung + +### Best Practices + +* Prepared Statements konsequent einsetzen +* Trennung von Logik und Darstellung +* Verwendung von zentralen Konfigurationsdateien +* Strukturierte Fehlerbehandlung +* Logging implementieren + +--- + +## Typischer Ablauf (Use Case) + +1. Benutzer sucht ein Produkt (API-Aufruf) +2. Anzeige der Ergebnisse auf der Startseite +3. Auswahl eines Produkts (Detailseite) +4. Optionaler Vergleich mit anderen Produkten +5. Speicherung in der Wunschliste + +--- + +## Zusammenfassung + +* PHP-basierte Webanwendung für Produktsuche und Preisvergleich +* Klassische serverseitige Architektur +* Enthält Benutzerverwaltung, Vergleich und API +* Erweiterbar in Richtung moderne Webarchitektur +* Sicherheit und Struktur sollten verbessert werden