251 lines
5.1 KiB
Markdown
251 lines
5.1 KiB
Markdown
# Geizkragen – Preisvergleichs- und Produktplattform
|
||
|
||
## Kurzüberblick
|
||
|
||
Geizkragen ist eine webbasierte Anwendung zur Produktsuche und zum Preisvergleich. Nutzer können Produkte durchsuchen, vergleichen und in einer persönlichen Wunschliste verwalten.
|
||
Das Projekt dient als technische Demonstration einer klassischen PHP-basierten Webanwendung mit Datenbankanbindung.
|
||
|
||
---
|
||
|
||
## Funktionsumfang
|
||
|
||
* Produktsuche (inkl. API-Endpunkt)
|
||
* Vergleich mehrerer Produkte
|
||
* Wunschliste (benutzergebunden)
|
||
* Benutzerregistrierung und Login
|
||
* Benutzerkonto-Verwaltung
|
||
* Administrationsbereich zur Benutzerverwaltung
|
||
* Hinzufügen neuer Produkte
|
||
* Produktdetailseiten
|
||
* Einfache statistische Auswertungen
|
||
* Grundlegendes Empfehlungssystem
|
||
|
||
---
|
||
|
||
## Projektstruktur
|
||
|
||
```bash
|
||
geizkragen/
|
||
│
|
||
├── index.php
|
||
├── productpage.php
|
||
├── compare.php
|
||
├── wunschliste.php
|
||
├── login.php
|
||
├── register.php
|
||
├── account.php
|
||
├── admin_users.php
|
||
│
|
||
├── api/
|
||
│ └── search_products.php
|
||
│
|
||
├── assets/
|
||
│ ├── css/
|
||
│ ├── images/
|
||
│ └── icons/
|
||
│
|
||
├── header.php
|
||
├── footer.php
|
||
├── style.css
|
||
├── stats.json
|
||
└── .htaccess
|
||
```
|
||
|
||
---
|
||
|
||
## Installation und Setup
|
||
|
||
### Voraussetzungen
|
||
|
||
* Webserver (z. B. Apache)
|
||
* PHP (empfohlen ≥ 7.x)
|
||
* MySQL oder MariaDB
|
||
|
||
---
|
||
|
||
### Installation
|
||
|
||
```bash
|
||
git clone <repository-url>
|
||
cd geizkragen
|
||
```
|
||
|
||
Oder manuell:
|
||
Projekt in das Webserver-Verzeichnis kopieren, z. B.:
|
||
|
||
```
|
||
C:\xampp\htdocs\geizkragen
|
||
```
|
||
|
||
---
|
||
|
||
### Datenbankeinrichtung
|
||
|
||
1. Neue Datenbank erstellen
|
||
2. Tabellen entsprechend dem Schema anlegen
|
||
3. Zugangsdaten in den PHP-Dateien konfigurieren
|
||
|
||
---
|
||
|
||
### Start
|
||
|
||
Webserver starten und im Browser öffnen:
|
||
|
||
```
|
||
http://localhost/geizkragen
|
||
```
|
||
|
||
---
|
||
|
||
## API
|
||
|
||
### Produktsuche
|
||
|
||
```
|
||
GET /api/search_products.php?q=Suchbegriff
|
||
```
|
||
|
||
Antwort:
|
||
|
||
* JSON mit passenden Produkten
|
||
|
||
---
|
||
|
||
## Technische Architektur
|
||
|
||
### Backend
|
||
|
||
* PHP
|
||
* Serverseitige Verarbeitung
|
||
* Teilweise API-Struktur
|
||
|
||
### Frontend
|
||
|
||
* HTML5
|
||
* CSS
|
||
* Klassisches serverseitiges Rendering
|
||
|
||
### Datenhaltung
|
||
|
||
* MySQL / MariaDB
|
||
* Ergänzend JSON (Statistiken)
|
||
|
||
---
|
||
|
||
## Sicherheit und Hinweis zur öffentlichen Nutzung
|
||
|
||
Dieses Repository ist öffentlich zugänglich.
|
||
Der aktuelle Stand ist als Lern- bzw. Entwicklungsprojekt zu verstehen und **nicht für den produktiven Einsatz im Internet vorgesehen**.
|
||
|
||
Bekannte Einschränkungen:
|
||
|
||
* Sicherheitsmechanismen sind nicht vollständig implementiert
|
||
* Authentifizierung und Session-Handling sollten überprüft werden
|
||
* Eingabevalidierung und Schutz gegen SQL-Injection sind teilweise unzureichend
|
||
* Keine Garantie für Datenschutz oder Datensicherheit
|
||
|
||
**Empfehlung:**
|
||
Vor einem produktiven Einsatz müssen grundlegende Sicherheitsmaßnahmen implementiert werden.
|
||
|
||
---
|
||
|
||
## Empfohlene Sicherheitsmaßnahmen
|
||
|
||
* Verwendung von Prepared Statements (PDO/MySQLi)
|
||
* Passwort-Hashing mit `password_hash()`
|
||
* CSRF-Schutz für Formulare
|
||
* Strikte Validierung und Sanitizing aller Eingaben
|
||
* Sichere Session-Verwaltung (Session-Regeneration)
|
||
* Fehlerausgaben im Produktivbetrieb deaktivieren
|
||
|
||
---
|
||
|
||
## Erweiterungsmöglichkeiten
|
||
|
||
* Einführung eines MVC-Patterns
|
||
* Trennung von Backend und Frontend (API-first)
|
||
* Nutzung eines modernen Frontend-Frameworks
|
||
* Verbesserung der Benutzeroberfläche (Responsive Design)
|
||
* Erweiterung des Empfehlungssystems
|
||
* Automatisierte Tests
|
||
|
||
---
|
||
|
||
## Entwicklungsumgebung
|
||
|
||
Empfohlen:
|
||
|
||
* PhpStorm oder Visual Studio Code
|
||
* MySQL Workbench
|
||
* XAMPP oder vergleichbare lokale Serverumgebung
|
||
|
||
---
|
||
|
||
## Lizenz
|
||
|
||
Derzeit ist keine Lizenz definiert.
|
||
Ohne Lizenz ist die Nutzung, Veränderung und Weitergabe rechtlich eingeschränkt.
|
||
|
||
Empfehlung:
|
||
Eine Open-Source-Lizenz wie MIT oder Apache 2.0 hinzufügen.
|
||
|
||
---
|
||
|
||
## Autor
|
||
|
||
Fabian Schieder
|
||
Paul Eisenbock
|
||
|
||
---
|
||
|
||
## Fachliche Einschätzung
|
||
|
||
Das Projekt ist ein solides Beispiel für eine klassische PHP-Webanwendung mit Datenbankanbindung.
|
||
Für Lernzwecke ist die Struktur sinnvoll, jedoch fehlen klare architektonische Trennungen und sicherheitsrelevante Mechanismen.
|
||
|
||
Für eine Weiterentwicklung sind insbesondere folgende Punkte entscheidend:
|
||
|
||
* Strukturierung (MVC oder ähnliche Muster)
|
||
* Absicherung der Datenbankzugriffe
|
||
* Saubere Trennung von Logik und Darstellung
|
||
* Skalierbarkeit durch API-basierte Architektur
|
||
|
||
---
|
||
|
||
## Typische Fehlerquellen und Best Practices
|
||
|
||
### Häufige Probleme
|
||
|
||
* SQL-Injection durch direkte Queries
|
||
* Fehlendes Passwort-Hashing
|
||
* Vermischung von PHP und HTML
|
||
* Unsichere Session-Verwaltung
|
||
* Fehlende Eingabevalidierung
|
||
|
||
### Best Practices
|
||
|
||
* Prepared Statements konsequent verwenden
|
||
* Zentrale Konfigurationsdateien nutzen
|
||
* Logging und Fehlerhandling implementieren
|
||
* Code modularisieren
|
||
* Sicherheitskonzepte früh integrieren
|
||
|
||
---
|
||
|
||
## Typischer Ablauf
|
||
|
||
1. Benutzer sucht ein Produkt
|
||
2. Ergebnisse werden angezeigt
|
||
3. Produktdetailseite wird geöffnet
|
||
4. Optional: Vergleich oder Speicherung in Wunschliste
|
||
|
||
---
|
||
|
||
## Zusammenfassung
|
||
|
||
* PHP-basierte Preisvergleichsplattform
|
||
* Klassische serverseitige Architektur
|
||
* Öffentliche Repository mit Lerncharakter
|
||
* Sicherheit derzeit nicht ausreichend für Produktion
|
||
* Gute Basis für Erweiterung und Refactoring
|