# 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
