# PHP Übungsaufgaben: PDO & File Handling

## PDO Aufgaben

### Aufgabe 1: Benutzerverwaltung mit PDO X

Erstelle ein Verwaltungssystem für Benutzer mit folgenden Features:

- Datenbank `benutzer_verwaltung` mit Tabelle `users` (id, username, email, created_at, status)
- CRUD-Operationen (Create, Read, Update, Delete) mit PDO
- Prepared Statements für alle Queries
- Error Handling mit try-catch
- Pagination für die Benutzeranzeige (20 Benutzer pro Seite)

**Bonusaufgabe:** Implementiere eine Suchfunktion, die nach username oder email filtert.

---

### Aufgabe 2: Transaktionen und Rollback X

Erstelle ein Bestell-System mit zwei Tabellen:

- `produkte` (id, name, preis, lagerbestand)
- `bestellungen` (id, produkt_id, anzahl, datum)

Implementiere eine Bestellfunktion, die:

- Den Lagerbestand prüft
- Bei ausreichendem Lager eine Bestellung anlegt UND den Lagerbestand reduziert
- PDO-Transaktionen nutzt (beginTransaction, commit, rollback)
- Bei Fehlern oder fehlendem Lagerbestand einen Rollback durchführt

---

## File Handling Aufgaben

### Aufgabe 3: Log-System (TXT) X

Entwickle ein mehrstufiges Logging-System:

- Schreibe Logs in verschiedene Dateien: `error.log`, `access.log`, `debug.log`
- Jeder Log-Eintrag enthält: Timestamp, Log-Level (ERROR/INFO/DEBUG), Nachricht
- Implementiere eine Funktion `writeLog($level, $message)`
- Erstelle eine Funktion, die die letzten N Zeilen einer Log-Datei ausliest

**Bonusaufgabe:** Implementiere Log-Rotation (wenn Datei > 1MB, erstelle neue Datei mit Timestamp).

---

### Aufgabe 4: CSV Import/Export System

Erstelle ein System für Produktdaten:

- **Import:** Lese CSV-Datei mit Produkten (ID, Name, Preis, Kategorie) und importiere sie in eine Datenbank
- **Export:** Exportiere Datenbankeinträge als CSV-Datei
- Validierung der CSV-Daten (Preis muss numerisch sein, Pflichtfelder prüfen)
- Fehlerhafte Zeilen in separate `fehler.csv` schreiben

---

### Aufgabe 5: XML Konfigurationsdatei (XML)

Erstelle ein Konfigurations-Management-System:

- Lese eine XML-Konfigurationsdatei mit Datenbank-Verbindungsparametern, E-Mail-Settings, etc.
- Schreibe eine Klasse `ConfigManager`, die:
  - XML mit SimpleXML oder DOMDocument parst
  - Konfigurationswerte auslesen kann (`getConfig('database.host')`)
  - Konfigurationswerte ändern und zurück in XML schreiben kann
- Erstelle eine Funktion, die XML nach JSON konvertiert

---

## Kombinierte Aufgabe

### Aufgabe 6: Kontaktverwaltung mit Multi-Format Support

Entwickle eine vollständige Kontaktverwaltung:

- **Datenbank:** Tabelle `kontakte` (id, vorname, nachname, email, telefon, firma)
- **PDO:** Alle CRUD-Operationen mit PDO
- **Export-Funktionen:**
  - Als CSV exportieren
  - Als XML exportieren
  - Als JSON exportieren (bonus)
- **Import-Funktionen:**
  - CSV-Import mit Validierung
  - XML-Import
- **Logging:** Alle Aktionen (Erstellen, Ändern, Löschen) in `contacts.log` protokollieren

**Anforderungen:**

- Fehlerbehandlung bei allen File- und DB-Operationen
- Prepared Statements für SQL
- Datei-Upload für CSV/XML-Import
- Benutzerfreundliche Fehler-/Erfolgsmeldungen

---

## Zusätzliche Challenges

### Challenge 1: Backup-System

Erstelle ein automatisches Backup-System:

- Exportiere komplette Datenbank-Tabelle als SQL-Dump in TXT-Datei
- Komprimiere Backup mit ZIP
- Speichere mit Timestamp im Dateinamen
- Alte Backups (> 7 Tage) automatisch löschen

---

### Challenge 2: XML-Feed-Parser

Erstelle einen RSS/XML-Feed-Parser:

- Parse einen externen XML-Feed (z.B. News-Feed)
- Speichere relevante Daten in Datenbank
- Aktualisiere nur neue Einträge (vermeide Duplikate)
- Erstelle einen eigenen XML-Feed aus den DB-Daten

---

## Hinweise

- Nutze immer Prepared Statements für SQL-Queries
- Implementiere ordentliches Error Handling
- Kommentiere deinen Code
- Teste alle Edge Cases (leere Dateien, fehlerhafte Daten, etc.)

Viel Erfolg! 🚀
