Geizkragen/README.md

246 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <repository-url>
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