From ae071b453ccd9f68b499c991f90f9655009085fe Mon Sep 17 00:00:00 2001 From: danielvici123 Date: Mon, 12 Jan 2026 22:58:40 +0100 Subject: [PATCH] learning, task4/6 4 -> not working 5,6 -> not done yet --- Zweites Jahr/csv/file_read.php | 2 +- lernen/ka-1-lbt3+4/README.MD | 131 ++++++++++++++++++++++++++ lernen/ka-1-lbt3+4/access.log | 3 + lernen/ka-1-lbt3+4/aufgabe1.php | 40 ++++++++ lernen/ka-1-lbt3+4/aufgabe2.php | 49 ++++++++++ lernen/ka-1-lbt3+4/aufgabe3.php | 67 +++++++++++++ lernen/ka-1-lbt3+4/aufgabe4.php | 46 +++++++++ lernen/ka-1-lbt3+4/debug.log | 3 + lernen/ka-1-lbt3+4/docker-compose.yml | 31 ++++++ lernen/ka-1-lbt3+4/error.log | 3 + lernen/ka-1-lbt3+4/produkt.csv | 8 ++ 11 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 lernen/ka-1-lbt3+4/README.MD create mode 100644 lernen/ka-1-lbt3+4/access.log create mode 100644 lernen/ka-1-lbt3+4/aufgabe1.php create mode 100644 lernen/ka-1-lbt3+4/aufgabe2.php create mode 100644 lernen/ka-1-lbt3+4/aufgabe3.php create mode 100644 lernen/ka-1-lbt3+4/aufgabe4.php create mode 100644 lernen/ka-1-lbt3+4/debug.log create mode 100644 lernen/ka-1-lbt3+4/docker-compose.yml create mode 100644 lernen/ka-1-lbt3+4/error.log create mode 100644 lernen/ka-1-lbt3+4/produkt.csv 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)
"; + +// CREATE USER +$createUser = $pdo ->exec('INSERT INTO user VALUES( + null, + "danielvici223", + "daniel@danielvici.com", + "11:00:00", + "active" +);'); + +echo "USER CREATED
"; +// update haben wir nicht gemacht + +// DELETE USER +$deleteUser = $pdo ->exec('DELETE FROM user WHERE id=1'); + +// pagination <- keine was das ist? +echo "USER 1 DELETED
"; + + +} catch (PDOException $e) { + echo "". $e .""; +} + +?> \ No newline at end of file diff --git a/lernen/ka-1-lbt3+4/aufgabe2.php b/lernen/ka-1-lbt3+4/aufgabe2.php new file mode 100644 index 0000000..a65b13f --- /dev/null +++ b/lernen/ka-1-lbt3+4/aufgabe2.php @@ -0,0 +1,49 @@ +exec($produkteTabelle); + echo "TABELLE produkte ERSTELLT
"; + $createTable = $pdo->exec($produkteBestellung); + echo "TABELLE Bestellung ERSTELLT
"; + + $lagerbestandProProduktQuery = 'SELECT `name`, lagerbestand, id FROM produkte'; + $lagerbestandProProdukt = $pdo->query($lagerbestandProProduktQuery)->fetchAll(); + + echo "
";
+    print_r($lagerbestandProProdukt);
+    echo "
"; + + foreach($lagerbestandProProdukt as $row){ + if ($row[1] >= 1){ + echo "Von '$row[0]' haben wir aktuell $row[1] (ID: $row[2]).
"; + } else { + echo "Von '$row[0]' haben wir nichts mehr
"; + $createBestellung = $pdo->exec("INSERT INTO bestellungen VALUES( + null, + $row[2], + 999, + '2025-01-12' + )"); + echo "Von '$row[0]' wurden 999 stück bestellt."; + } + } + + + +} catch (PDOException $e) { + echo "Error: ", $e->getMessage(); +} \ No newline at end of file diff --git a/lernen/ka-1-lbt3+4/aufgabe3.php b/lernen/ka-1-lbt3+4/aufgabe3.php new file mode 100644 index 0000000..e4d2a61 --- /dev/null +++ b/lernen/ka-1-lbt3+4/aufgabe3.php @@ -0,0 +1,67 @@ +AUFGABE 3"; + +// file names +$error = "error.log"; +$access = "access.log"; +$debug = "debug.log"; + +// read function +function read($file){ + $fileName = $file.".log"; + $fp = fopen($fileName, 'r') or die ("Cannot open file"); // open file + $fileLineCount = count(file($fileName)); // count lines + // if file is empty + if ($fileLineCount == 0) { + echo "Datei '".$file.".log' ist leer
"; + } else { + //echo "TIMESTAMP | LOG-LEVEL | NACHRICHT
"; + foreach(file($fileName) as $line){ + echo "$line
"; + } + } + fclose($fp); +} + +function writeLog($level, $message){ + $fileName = $level.".log"; + $fp = fopen($fileName, 'a') or die ("Cannot open file"); + // get current time + $now = date(DATE_RFC2822, time()); + + $fileLineCount = count(file($fileName)); // count lines + // if file is empty + if ($fileLineCount == 0) { + fwrite($fp, "TIMESTAMP | LOG-LEVEL | NACHRICHT\n"); + } + $data = "$now | $level | $message\n"; + fwrite($fp, $data); + echo "Wurde geloggt
"; + fclose($fp); +} + +echo "

READ LOGS BEFORE WRITE

"; + +echo "

Error Log

"; +read("error"); +echo "

Access Log

"; +read("access"); +echo "

Debug Log

"; +read("debug"); +// ------------------------------------------ +echo "

WRITE LOGS

"; + +writeLog("error", "Es gab kein Fehler"); +writeLog("access", "Es wurde nicht auf die Datei zugegriffen"); +writeLog("debug","Das ka.php wurde gedebugt"); +// ------------------------------------------ +echo "

READ LOGS AFTER WRITE

"; + +echo "

Error Log

"; +read("error"); +echo "

Access Log

"; +read("access"); +echo "

Debug Log

"; +read("debug"); diff --git a/lernen/ka-1-lbt3+4/aufgabe4.php b/lernen/ka-1-lbt3+4/aufgabe4.php new file mode 100644 index 0000000..3e0daf8 --- /dev/null +++ b/lernen/ka-1-lbt3+4/aufgabe4.php @@ -0,0 +1,46 @@ + all (read, write ...) +if(!$fp){ + die("Error while opening file!"); +} + +$header = fgetcsv($fp, 0, ","); + +fclose($fp); + +// READ FILE + +$fp = @fopen($file, "W"); + +$yo = print_r($header); +echo "
 $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]
"; + } + echo "

--------------------------------

"; +} + +// 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