diff --git a/Zweites Jahr/csv/file_read.php b/Zweites Jahr/csv/file_read.php index 7a6e0a6..4d816fd 100644 --- a/Zweites Jahr/csv/file_read.php +++ b/Zweites Jahr/csv/file_read.php @@ -31,7 +31,7 @@ echo "
$yo"; // Äußere Schleife: Zeile auslesen - while(!feof($fp)){ // solange nicht das Ende der Datei erreich + while(!feof($fp)){ // solange nicht das Ende der Datei erreicht ist $row_array = fgetcsv($fp); /* $yo2 = print_r($header_array); echo "
$yo2";*/ diff --git a/lernen/ka-1-lbt3+4/README.MD b/lernen/ka-1-lbt3+4/README.MD new file mode 100644 index 0000000..1910755 --- /dev/null +++ b/lernen/ka-1-lbt3+4/README.MD @@ -0,0 +1,131 @@ +# 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) + +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! 🚀 diff --git a/lernen/ka-1-lbt3+4/access.log b/lernen/ka-1-lbt3+4/access.log new file mode 100644 index 0000000..3de7e85 --- /dev/null +++ b/lernen/ka-1-lbt3+4/access.log @@ -0,0 +1,3 @@ +TIMESTAMP | LOG-LEVEL | NACHRICHT +Mon, 12 Jan 2026 22:17:35 +0100 | access | Es wurde nicht auf die Datei zugegriffen +Mon, 12 Jan 2026 22:20:11 +0100 | access | Es wurde nicht auf die Datei zugegriffen diff --git a/lernen/ka-1-lbt3+4/aufgabe1.php b/lernen/ka-1-lbt3+4/aufgabe1.php new file mode 100644 index 0000000..ec8fc45 --- /dev/null +++ b/lernen/ka-1-lbt3+4/aufgabe1.php @@ -0,0 +1,40 @@ +exec('CREATE TABLE IF NOT EXISTS `user`( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(255), + email VARCHAR(255), + created_at TIME, + status VARCHAR(30) +);'); +echo "TABLE CREATED (IF NOT EXISTS)
"; + print_r($lagerbestandProProdukt); + echo ""; + + foreach($lagerbestandProProdukt as $row){ + if ($row[1] >= 1){ + echo "Von '$row[0]' haben wir aktuell $row[1] (ID: $row[2]).
$yo"; + +while(!feof($fp)){ // solange nicht das Ende der Datei erreicht ist + + // Inner Schleife: Spalten ausgeben + for ($i = 0; $i < count($header); $i++){ + echo "$header[$i]: $header[$i]
--------------------------------
"; +} + +// WRITE TO FILE + +//$row = [7, "NZXTKeyboard", 120, "Tastatur"]; +// file, data (array), seperator +//fputcsv($fp, $row, ","); + diff --git a/lernen/ka-1-lbt3+4/debug.log b/lernen/ka-1-lbt3+4/debug.log new file mode 100644 index 0000000..30ddeca --- /dev/null +++ b/lernen/ka-1-lbt3+4/debug.log @@ -0,0 +1,3 @@ +TIMESTAMP | LOG-LEVEL | NACHRICHT +Mon, 12 Jan 2026 22:17:35 +0100 | debug | Das ka.php wurde gedebugt +Mon, 12 Jan 2026 22:20:11 +0100 | debug | Das ka.php wurde gedebugt diff --git a/lernen/ka-1-lbt3+4/docker-compose.yml b/lernen/ka-1-lbt3+4/docker-compose.yml new file mode 100644 index 0000000..fc7d8f5 --- /dev/null +++ b/lernen/ka-1-lbt3+4/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.8' + +services: + mysql: + image: mysql:latest + container_name: mysql-db + environment: + MYSQL_ROOT_PASSWORD: deinPasswort + MYSQL_DATABASE: testdb + MYSQL_USER: phpuser + MYSQL_PASSWORD: phpPasswort + ports: + - "3306:3306" + volumes: + - mysql-data:/var/lib/mysql + restart: unless-stopped + + phpmyadmin: + image: phpmyadmin:latest + container_name: phpmyadmin + environment: + PMA_HOST: mysql + PMA_PORT: 3306 + ports: + - "8080:80" + depends_on: + - mysql + restart: unless-stopped + +volumes: + mysql-data: diff --git a/lernen/ka-1-lbt3+4/error.log b/lernen/ka-1-lbt3+4/error.log new file mode 100644 index 0000000..302bfb0 --- /dev/null +++ b/lernen/ka-1-lbt3+4/error.log @@ -0,0 +1,3 @@ +TIMESTAMP | LOG-LEVEL | NACHRICHT +Mon, 12 Jan 2026 22:17:35 +0100 | error | Es gab kein Fehler +Mon, 12 Jan 2026 22:20:11 +0100 | error | Es gab kein Fehler diff --git a/lernen/ka-1-lbt3+4/produkt.csv b/lernen/ka-1-lbt3+4/produkt.csv new file mode 100644 index 0000000..9110c5b --- /dev/null +++ b/lernen/ka-1-lbt3+4/produkt.csv @@ -0,0 +1,8 @@ +ID,Name,Preis,Kategorie +1,"Mac Book",2600, pc +2,Spezi, 15, getränk +3,Watch, 500, uhr +4,iPhone,1500,Handy +5,"NZXT Mini",100,Tastatur +6,"NZXT Keyboard",120,Tastatur +7,NZXTKeyboard,120,Tastatur