246 lines
5.7 KiB
Markdown
246 lines
5.7 KiB
Markdown
# 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
|