Compare commits
21 Commits
43d1eddc8c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11a260008e | ||
|
|
ec20b28fc4 | ||
|
|
19c2ba6e1f | ||
|
|
be93d16a61 | ||
|
|
0e3c68542d | ||
|
|
ae071b453c | ||
|
|
3ded7fe223 | ||
|
|
b540d8a11a | ||
|
|
cc73d75998 | ||
|
|
cb023b88de | ||
|
|
e59c3c4e59 | ||
|
|
3a3c99701f | ||
|
|
576d664240 | ||
|
|
a1040bd5db | ||
|
|
d26d5ea4a7 | ||
|
|
b98c0037f7 | ||
|
|
4413283006 | ||
|
|
385226a4a3 | ||
| f5408a6ad0 | |||
|
|
58b1ff7eef | ||
|
|
688c610a85 |
111
Zweites Jahr/Kryptologie/caeser-verschluesselung.php
Normal file
111
Zweites Jahr/Kryptologie/caeser-verschluesselung.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
// WIP
|
||||
|
||||
// Caesar-Chiffre Funktion
|
||||
function caesar($text, $shift) {
|
||||
|
||||
$textArr = str_split($text, 1);
|
||||
// definition is gewohnheit aus angular
|
||||
$textAscii = [];
|
||||
$resAscii = [];
|
||||
$resArr = [];
|
||||
|
||||
for($i = 0; $i > count($textArr); $i++){
|
||||
// jeder buchstabe des textes wird zum array,
|
||||
// in dessen ascii zeichen, $resAscii hinzugefügt
|
||||
array_push($textAscii, ord($textArr[$i]));
|
||||
// verschiebung
|
||||
$resAscii[$i] =+ $shift;
|
||||
// ascii buchstaben werden in ein wort gemacht
|
||||
array_push($resArr, chr($resAscii[$i]));
|
||||
}
|
||||
// aus array ein wort machen
|
||||
$result = implode("", $resArr);
|
||||
|
||||
$yo = print_r($textArr);
|
||||
echo "<pre> $yo </pre>";
|
||||
$yo = print_r($textAscii);
|
||||
echo "<pre> $yo </pre>";
|
||||
$yo = print_r($resAscii);
|
||||
echo "<pre> $yo </pre>";
|
||||
$yo = print_r($resArr);
|
||||
echo "<pre> $yo </pre>";
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Formularverarbeitung
|
||||
$output = "";
|
||||
$text = "";
|
||||
$shift = 0;
|
||||
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
$text = $_POST["text"] ?? "";
|
||||
$shift = intval($_POST["shift"] ?? 0);
|
||||
|
||||
if (isset($_POST["encrypt"])) {
|
||||
$output = caesar($text, $shift);
|
||||
}
|
||||
|
||||
if (isset($_POST["decrypt"])) {
|
||||
$output = caesar($text, -$shift);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Caesar Chiffre</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background: #f4f4f4;
|
||||
padding: 30px;
|
||||
}
|
||||
.box {
|
||||
background: white;
|
||||
padding: 20px;
|
||||
max-width: 500px;
|
||||
margin: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
textarea, input {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
label{
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="box">
|
||||
<h2>Caesar Chiffre</h2>
|
||||
|
||||
<form method="post">
|
||||
<label for="text">Nachricht:</label>
|
||||
<textarea name="text" rows="4"><?= htmlspecialchars($text) ?></textarea>
|
||||
|
||||
<label>Verschiebung:</label>
|
||||
<input type="number" name="shift" min = 1 max = 26 value="<?= htmlspecialchars($shift) ?>">
|
||||
<!--<input type="number" name="shift" value="<?= htmlspecialchars($shift) ?>">-->
|
||||
|
||||
<button type="submit" name="encrypt">Verschlüsseln</button>
|
||||
<button type="submit" name="decrypt">Entschlüsseln</button>
|
||||
|
||||
<label for="result"> Verschlüsselte Nachricht:</label>
|
||||
<textarea name="result" rows="4" readonly><?= htmlspecialchars($output ?: $text) ?></textarea>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,27 +1,55 @@
|
||||
# Zweites Jahr
|
||||
|
||||
## Infos
|
||||
|
||||
## Gemacht
|
||||
*Wir eventuell nie aktuell sein.*
|
||||
Wichtige Informationen
|
||||
|
||||
- Wir eventuell nie aktuell sein.
|
||||
- Stundenplan - [Link](https://wvss-mannheim.webuntis.com/WebUntis/?school=wvss-mannheim#/basic/timetablePublic/class?entityId=2583)
|
||||
|
||||
|
||||
## 16-01-26 - PHP
|
||||
- Modulo
|
||||
|
||||
## 14-01-26 - PHP
|
||||
- Kryptologie (LBT3)
|
||||
|
||||
## 12-12-25 - PHP (SQL)
|
||||
- Aufgabe von gester überarbeitet
|
||||
- Unterrichts Projekt:
|
||||
- Verschiedene wege um daten aus db anzuzeigen
|
||||
- Form um user anzulegen
|
||||
|
||||
## 11-12-25 - PHP (XML)
|
||||
- XML aus PHP erstellt
|
||||
- CSV Datei in XML Datei konvertiert
|
||||
|
||||
## 10-12-25 - PHP
|
||||
|
||||
- Unterrichtsprojekt begonnen:
|
||||
- Verbindung zur Datenbank
|
||||
|
||||
## 9-12-25 - PHP (SQL)
|
||||
|
||||
- Datenbank durch PHP erstellt und Daten hinzufügen
|
||||
|
||||
### 21-11-25 - PHP
|
||||
|
||||
- Aufgabe von gestern Kontroliert + Kommentare hinzugefügt
|
||||
- XML von AP1 Aufgabe
|
||||
- Aufgabe von gestern Kontroliert + Kommentare hinzugefügt
|
||||
- XML von AP1 Aufgabe
|
||||
|
||||
### 20-11-25 - PHP
|
||||
|
||||
- GETTER in PHP
|
||||
- Übung zu OOP
|
||||
- GETTER in PHP
|
||||
- Übung zu OOP
|
||||
|
||||
### 19-11-25 - PHP
|
||||
|
||||
- Übung Datei lesen/schreiben (Log Access)
|
||||
|
||||
- Übung Datei lesen/schreiben (Log Access)
|
||||
|
||||
### 18-11-25 - PHP
|
||||
|
||||
- Datein lesen
|
||||
|
||||
- Datein lesen CSV
|
||||
|
||||
### Davor
|
||||
|
||||
|
||||
65
Zweites Jahr/XML/createXmlDocument.php
Normal file
65
Zweites Jahr/XML/createXmlDocument.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set("display_errors", 1);
|
||||
|
||||
|
||||
/*
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<personen>
|
||||
<benutzer>
|
||||
<benutzername>maier1</benutzername>
|
||||
<passwort>mXabc123m!</passwort>
|
||||
<vorname>Hubertus</vorname>
|
||||
<nachname>Maier</nachname>
|
||||
<email>maier1@bfpohg.de</email>
|
||||
</benutzer>
|
||||
|
||||
<benutzer> ... </benutzer>
|
||||
</personen>
|
||||
*/
|
||||
|
||||
// create xml docs
|
||||
$xmlDoc = new DOMDocument("1.0", "utf-8");
|
||||
$xmlDoc->formatOutput=true;
|
||||
|
||||
// Root element
|
||||
$xmlRoot = $xmlDoc->createElement("personen");
|
||||
$xmlDoc->appendChild($xmlRoot);
|
||||
|
||||
// first node - benutzer
|
||||
$xmlPerson = $xmlDoc->createElement("benutzer");
|
||||
|
||||
// child node of benutzer: benutzername
|
||||
$xmlBenutzername = $xmlDoc->createElement("benutzername", "Daniel");
|
||||
$xmlPerson->appendChild($xmlBenutzername);
|
||||
|
||||
// child node of benutzer: passwort
|
||||
$xmlPasswort = $xmlDoc->createElement("passwort", "danielISTcool");
|
||||
$xmlPerson->appendChild($xmlPasswort);
|
||||
|
||||
// append node to root
|
||||
$xmlRoot->appendChild($xmlPerson);
|
||||
|
||||
// --- SECOND USER ---
|
||||
// second node - benutzer
|
||||
$xmlPerson = $xmlDoc->createElement("benutzer");
|
||||
|
||||
// child node of benutzer: benutzername
|
||||
$xmlBenutzername = $xmlDoc->createElement("benutzername", "Peter");
|
||||
$xmlPerson->appendChild($xmlBenutzername);
|
||||
|
||||
// child node of benutzer: passwort
|
||||
$xmlPasswort = $xmlDoc->createElement("passwort", "12345");
|
||||
$xmlPerson->appendChild($xmlPasswort);
|
||||
|
||||
// append node to root
|
||||
$xmlRoot->appendChild($xmlPerson);
|
||||
|
||||
// create file
|
||||
$bytes = $xmlDoc->save(__DIR__ . "/personen.xml");
|
||||
var_dump($bytes);
|
||||
|
||||
echo $bytes . "<br>";
|
||||
echo __DIR__;
|
||||
?>
|
||||
11
Zweites Jahr/XML/personen.xml
Normal file
11
Zweites Jahr/XML/personen.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<personen>
|
||||
<benutzer>
|
||||
<benutzername>Daniel</benutzername>
|
||||
<passwort>danielISTcool</passwort>
|
||||
</benutzer>
|
||||
<benutzer>
|
||||
<benutzername>Peter</benutzername>
|
||||
<passwort>12345</passwort>
|
||||
</benutzer>
|
||||
</personen>
|
||||
36
Zweites Jahr/XML/readXmlDocument.php
Normal file
36
Zweites Jahr/XML/readXmlDocument.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
error_reporting(E_ALL);
|
||||
ini_set("display_errors", 1);
|
||||
|
||||
echo "<h1>XML Ausgabe</h1>";
|
||||
|
||||
// load xml file
|
||||
$xmlDoc = new DOMDocument();
|
||||
$xmlDoc->load("personen.xml");
|
||||
|
||||
echo "<h2>Einfach</h1>";
|
||||
|
||||
// simple output
|
||||
echo $xmlDoc->saveXML();
|
||||
|
||||
echo "<hr>";
|
||||
|
||||
echo "<h2>Gesamte Knoten</h1>";
|
||||
|
||||
// output of individual nodes
|
||||
$benutzer=$xmlDoc->getElementsByTagName("benutzer");
|
||||
|
||||
foreach($benutzer as $benutzerDaten){
|
||||
echo "<strong>Person: </strong>".$benutzerDaten->textContent."<br>";
|
||||
}
|
||||
|
||||
echo "<hr>";
|
||||
echo "<h2>Element eines Knotens</h1>";
|
||||
// output of an node's element
|
||||
foreach($benutzer as $benutzerDaten){
|
||||
foreach($benutzerDaten->childNodes as $element){
|
||||
if($element->nodeName == "benutzername"){
|
||||
echo "<strong>Person: </strong>".$element->textContent."<br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
157
Zweites Jahr/aufgaben/PDO_Info.html
Executable file
157
Zweites Jahr/aufgaben/PDO_Info.html
Executable file
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PDO SQL Schritte</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f4;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
margin-top: 30px;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.step {
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
width: 170px;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.step:hover {
|
||||
background-color: #e5f4ff;
|
||||
}
|
||||
|
||||
.info-box {
|
||||
background-color: white;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
width: 60%;
|
||||
margin: 40px auto 0 auto;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.code-snippet {
|
||||
background: #f0f0f0;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
text-align: left;
|
||||
white-space: pre-wrap;
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PDO - Grundlegende SQL-Kommandos</h1>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="step" data-step="tryCatch">
|
||||
<h2>try catch</h2>
|
||||
<p>besseres finden von Fehlern</p>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="connect">
|
||||
<h2>PDO verbinden</h2>
|
||||
<p>Datenbank verbinden</p>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="create">
|
||||
<h2>CREATE TABLE</h2>
|
||||
<p>Tabelle anlegen</p>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="insert">
|
||||
<h2>INSERT</h2>
|
||||
<p>Daten einfügen</p>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="select">
|
||||
<h2>SELECT</h2>
|
||||
<p>Daten lesen</p>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="delete">
|
||||
<h2>DELETE</h2>
|
||||
<p>Daten löschen</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="info-box" class="info-box">
|
||||
<h2 id="info-title"></h2>
|
||||
<p id="info-text"></p>
|
||||
<pre id="code-snippet" class="code-snippet"></pre>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const steps = {
|
||||
|
||||
tryCatch: {
|
||||
title:"try{}catch{}",
|
||||
desc:"Benutze try und catch um Fehler besser erkennen zu können",
|
||||
code:`try{\n$pdo = new PDO("mysql:host=localhost;dbname=testdb","root","");\n}catch(PDOException $e){\necho $e->getMessage();\n}`
|
||||
},
|
||||
|
||||
connect: {
|
||||
title: "PDO Verbindung",
|
||||
desc: "So stellst du eine einfache Verbindung zu MySQL her.",
|
||||
code: `Wenn die Datenbank bereits existiert:\n\n<?php\n\ &dollarpdo = new PDO("mysql:host=localhost;dbname=testdb", "root", "");\necho "Verbindung erfolgreich!";\n?>\n\nWenn die Datenbank noch nicht exisitert:\n\n<?php\n$pdo = new PDO("mysql:host=localhost", "root", "");\n$pdo->exec("CREATE DATABASE IF NOT EXISTS testdb");\n$pdo = new PDO("mysql:host=localhost;dbname=testdb","root","");\n?>\n?>`
|
||||
},
|
||||
|
||||
create: {
|
||||
title: "CREATE TABLE",
|
||||
desc: "Eine neue Tabelle namens 'users' erstellen.",
|
||||
code: `<?php\n$sql = "CREATE TABLE users (\n id INT AUTO_INCREMENT PRIMARY KEY,\n username VARCHAR(50),\n email VARCHAR(100)\n)";\n$pdo->exec($sql);\necho "Tabelle 'users' wurde erstellt!";\n?>`
|
||||
},
|
||||
|
||||
insert: {
|
||||
title: "INSERT",
|
||||
desc: "Einen Datensatz in die Tabelle einfügen.",
|
||||
code: `<?php\n$sql = "INSERT INTO person VALUES (\n 'value1'\n 'value2';\n .....\n );\n";\n$pdo->exec($sql)\n?>`
|
||||
},
|
||||
|
||||
select: {
|
||||
title: "SELECT",
|
||||
desc: "Daten aus der Tabelle auslesen.",
|
||||
code: `<?php\n$sql = "SELECT * FROM users";\n$result = $pdo->query($sql);\n\n$valuesArray=$values->fetchAll();\necho"<pre>";\nprint_r($valluesArray);\necho"</pre>"; "<br>";\n}\n?>`
|
||||
},
|
||||
|
||||
delete: {
|
||||
title: "DELETE",
|
||||
desc: "Ein Benutzer wird gelöscht (hier: ID = 1).",
|
||||
code: `<?php\n$sql = "DELETE FROM users WHERE id = 1";\n$pdo->exec($sql);\necho "Benutzer mit ID 1 gelöscht!";\n?>`
|
||||
}
|
||||
};
|
||||
|
||||
document.querySelectorAll(".step").forEach(box => {
|
||||
box.addEventListener("click", () => {
|
||||
const key = box.dataset.step;
|
||||
|
||||
document.getElementById("info-title").textContent = steps[key].title;
|
||||
document.getElementById("info-text").textContent = steps[key].desc;
|
||||
document.getElementById("code-snippet").textContent = steps[key].code;
|
||||
|
||||
document.getElementById("info-box").style.display = "block";
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
69
Zweites Jahr/aufgaben/csvToXml/convertCSVtoXML.php
Normal file
69
Zweites Jahr/aufgaben/csvToXml/convertCSVtoXML.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<h1>CSV -> XML</h1>
|
||||
<?php
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set("display_errors", 1);
|
||||
|
||||
// DOM struktur
|
||||
/*
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<personen>
|
||||
<nr> </nr>
|
||||
<vorname> </vorname>
|
||||
<nachname> </nachname>
|
||||
</personen
|
||||
*/
|
||||
|
||||
// READ CSV FILE
|
||||
$fileCSV = "e2fi2.csv";
|
||||
if(!file_exists($fileCSV)){
|
||||
die("File $fileCSV doesn't exist or not found!");
|
||||
}
|
||||
|
||||
$fp = @fopen($fileCSV, 'r');
|
||||
if(!$fp){
|
||||
die("Error while opening CSV file!");
|
||||
}
|
||||
$header_array =fgetcsv($fp, 0, ";");
|
||||
|
||||
|
||||
// CREATE XML DOM
|
||||
$xmlDoc = new DOMDocument("1.0", "utf-8");
|
||||
$xmlDoc->formatOutput=true;
|
||||
|
||||
$xmlRoot = $xmlDoc->createElement("data");
|
||||
$xmlDoc->appendChild($xmlRoot);
|
||||
|
||||
|
||||
// FILL XML FILE WITH CSV DATA
|
||||
while(($row_array = fgetcsv($fp, 0, ";")) !== false){
|
||||
// skip emty value
|
||||
if ($row_array === null || $row_array === []) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// create sub elemente
|
||||
$xmlSchueler = $xmlDoc->createElement("schuelerdata");
|
||||
// for the count of elements in a row do this
|
||||
for ($i = 0; $i < count($row_array); $i++){
|
||||
// make sure there is a header to row
|
||||
if (!isset($header_array[$i])){
|
||||
continue;
|
||||
}
|
||||
|
||||
// get current collumn
|
||||
$column = $header_array[$i];
|
||||
|
||||
// create a new element with name of column and row data
|
||||
$xmlSchuelerDaten = $xmlDoc->createElement($column, $row_array[$i]);
|
||||
$xmlSchueler->appendChild($xmlSchuelerDaten);
|
||||
}
|
||||
// save element
|
||||
$xmlRoot-> appendChild($xmlSchueler);
|
||||
}
|
||||
|
||||
// Save whole XML file
|
||||
$fileXML = "e2fi2.xml";
|
||||
$xmlDoc->save(__DIR__ . "/$fileXML");
|
||||
|
||||
echo "CSV FILE ($fileCSV) CONVERTED TO XML ($fileXML) AND SAVED";
|
||||
19
Zweites Jahr/aufgaben/csvToXml/e2fi2.csv
Normal file
19
Zweites Jahr/aufgaben/csvToXml/e2fi2.csv
Normal file
@@ -0,0 +1,19 @@
|
||||
Nr;Vorname;Nachname
|
||||
1;Noah;Bassmann
|
||||
2;Dawid;Brueller
|
||||
3;Maksim;Dessauer
|
||||
4;Jonas;Gassenhauer
|
||||
5;Klara;Goettinger
|
||||
6;Marc;Hausmueller
|
||||
7;Timo;Heiterberg
|
||||
8;Johannes;Kachelmann
|
||||
9;Konstantin;Matern
|
||||
10;Anna;Manna
|
||||
11;Kamil;Nether
|
||||
12;Tobias;Scholz
|
||||
13;Eric;Schmidt
|
||||
14;Ferdinand;Tetris
|
||||
15;Damien;Tapfer
|
||||
16;Uemit;Toser
|
||||
17;Sebastian;Wenger
|
||||
18;Fabio;Wellenwein
|
||||
|
93
Zweites Jahr/aufgaben/csvToXml/e2fi2.xml
Normal file
93
Zweites Jahr/aufgaben/csvToXml/e2fi2.xml
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<data>
|
||||
<schuelerdata>
|
||||
<Nr>1</Nr>
|
||||
<Vorname>Noah</Vorname>
|
||||
<Nachname>Bassmann</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>2</Nr>
|
||||
<Vorname>Dawid</Vorname>
|
||||
<Nachname>Brueller</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>3</Nr>
|
||||
<Vorname>Maksim</Vorname>
|
||||
<Nachname>Dessauer</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>4</Nr>
|
||||
<Vorname>Jonas</Vorname>
|
||||
<Nachname>Gassenhauer</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>5</Nr>
|
||||
<Vorname>Klara</Vorname>
|
||||
<Nachname>Goettinger</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>6</Nr>
|
||||
<Vorname>Marc</Vorname>
|
||||
<Nachname>Hausmueller</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>7</Nr>
|
||||
<Vorname>Timo</Vorname>
|
||||
<Nachname>Heiterberg</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>8</Nr>
|
||||
<Vorname>Johannes</Vorname>
|
||||
<Nachname>Kachelmann</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>9</Nr>
|
||||
<Vorname>Konstantin</Vorname>
|
||||
<Nachname>Matern</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>10</Nr>
|
||||
<Vorname>Anna</Vorname>
|
||||
<Nachname>Manna</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>11</Nr>
|
||||
<Vorname>Kamil</Vorname>
|
||||
<Nachname>Nether</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>12</Nr>
|
||||
<Vorname>Tobias</Vorname>
|
||||
<Nachname>Scholz</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>13</Nr>
|
||||
<Vorname>Eric</Vorname>
|
||||
<Nachname>Schmidt</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>14</Nr>
|
||||
<Vorname>Ferdinand</Vorname>
|
||||
<Nachname>Tetris</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>15</Nr>
|
||||
<Vorname>Damien</Vorname>
|
||||
<Nachname>Tapfer</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>16</Nr>
|
||||
<Vorname>Uemit</Vorname>
|
||||
<Nachname>Toser</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>17</Nr>
|
||||
<Vorname>Sebastian</Vorname>
|
||||
<Nachname>Wenger</Nachname>
|
||||
</schuelerdata>
|
||||
<schuelerdata>
|
||||
<Nr>18</Nr>
|
||||
<Vorname>Fabio</Vorname>
|
||||
<Nachname>Wellenwein</Nachname>
|
||||
</schuelerdata>
|
||||
</data>
|
||||
@@ -0,0 +1,6 @@
|
||||
SELECT book.bibNr, book.titel, COUNT(book.bibNr) AS ausleihAnzahl
|
||||
FROM buch as book
|
||||
LEFT JOIN Ausleihe as rent ON book.bibNr = rent.bibNr
|
||||
AND YEAR(rent.ausleihdatum) = 2015
|
||||
GROUP BY book.bibNr, book.titel
|
||||
ORDER BY ausleihAnzahl ASC
|
||||
@@ -0,0 +1,4 @@
|
||||
SELECT bibNr, COUNT(*) AS orderAnzahl
|
||||
FROM Ausleihe
|
||||
GROUP BY bibNr
|
||||
HAVING COUNT(*) > 10;
|
||||
61
Zweites Jahr/aufgaben/saveLibaryDataInXml/task.md
Normal file
61
Zweites Jahr/aufgaben/saveLibaryDataInXml/task.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# 2.2 XML
|
||||
|
||||
## 2.2.1
|
||||
|
||||
- Namen sind klar und deutlich
|
||||
- inhaltlich korrekt geordnet
|
||||
|
||||
## 2.2.2
|
||||
|
||||
````xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<data>
|
||||
<buch>
|
||||
<bibNr> </bibNr>
|
||||
<title> </title>
|
||||
<zustand> </zustand>
|
||||
<seitenanzahl> </seitenanzahl>
|
||||
</buch>
|
||||
<avmedium>
|
||||
<bibNr> </bibNr>
|
||||
<title> </title>
|
||||
<zustand> </zustand>
|
||||
<dauer> </dauer>
|
||||
</avmedium>
|
||||
</data>
|
||||
````
|
||||
|
||||
### 2.3 SQL
|
||||
|
||||
## 2.3.1
|
||||
### Meine Lösung
|
||||
```sql
|
||||
SELECT book.bibNr, book.titel, COUNT(book.bibNr) AS wieOftAusgeliehen
|
||||
FROM buch AS book
|
||||
LEFT JOIN Ausleihe AS rent ON book.bibNr = rent.bibNr
|
||||
AND YEAR(rent.ausleihdatum) = 2015
|
||||
GROUP BY book.bibNr, book.titel
|
||||
ORDER BY wieOftAusgeliehen ASC
|
||||
```
|
||||
### Lösung des Lehrers
|
||||
```sql
|
||||
SELECT a.bibNr, b.titel, COUNT(*) AS wieOftAusgeliehen
|
||||
FROM Ausleihe, Buch
|
||||
WHERE AUsleihe.bibNr=Buch.bibNr
|
||||
WHERE Aulsiehe.ausleihdatum BETWEEN "2015-01-01" AND "2015-12-32"
|
||||
GROUP BY bibNr, titel
|
||||
ORDER BY COUNT(*) DESC;
|
||||
```
|
||||
|
||||
## 2.3.2
|
||||
|
||||
```sql
|
||||
SELECT bibNr, COUNT(*) AS orderAnzahl
|
||||
FROM Ausleihe
|
||||
GROUP BY bibNr
|
||||
HAVING COUNT(*) > 10; -- HAVING bei solchen funktionen
|
||||
```
|
||||
|
||||
## 2.3.3
|
||||
|
||||
Gute Frage, frag chatgpt!
|
||||
27
Zweites Jahr/aus_anderen_Faechern/subnetze.md
Normal file
27
Zweites Jahr/aus_anderen_Faechern/subnetze.md
Normal file
@@ -0,0 +1,27 @@
|
||||
Sufix - Maske - Max IPs
|
||||
|
||||
/29 - / - 8
|
||||
/28 - / - 16
|
||||
/27 - / - 32
|
||||
/26 - / - 64
|
||||
/25 - 255.255.255.128 - 128
|
||||
/24 - 255.255.255.0 - 255
|
||||
/23 - 255.255.254.0 - 511
|
||||
/22 - 255.255.252.0 - 1024
|
||||
/21 - 255.255.248.0 - 2048
|
||||
/20
|
||||
|
||||
|
||||
|
||||
---
|
||||
bsp. /21 -> 21x 1
|
||||
|
||||
Dez - Binär - Anzahl 1
|
||||
255 - 1111 1111 - 8
|
||||
255 - 1111 1111 - 8
|
||||
248 - 1111 1000 - 5
|
||||
|
||||
|
||||
|
||||
128|64|32|16 | 8|4|2|1
|
||||
|
||||
59
Zweites Jahr/aus_anderen_Faechern/vlsm_übung.md
Normal file
59
Zweites Jahr/aus_anderen_Faechern/vlsm_übung.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# VLSM Übung
|
||||
## Übung 1
|
||||
|
||||
Netz: 10.10.32.0/20
|
||||
|
||||
Netze zu erstellen:
|
||||
|
||||
A - 1022 /22
|
||||
B - 400 /23
|
||||
C - 63 /25
|
||||
D - 12 /28
|
||||
|
||||
Sonstige Anweisungen
|
||||
|
||||
Nach größe Sortieren
|
||||
|
||||
### Netz A:
|
||||
10.10.32.0/21 - 10.10.39.255
|
||||
|
||||
Subnetsmaske:
|
||||
255.255.248.0
|
||||
|
||||
|
||||
#### Rechnung
|
||||
|
||||
Subnetzmaske:
|
||||
Address in Binär
|
||||
0000 1010 . 0000 1010 . 0010 0000 . 0000 0000
|
||||
Letzte Adresse (in Binär & Normal)
|
||||
0000 1010 . 0000 1010 . 0010 0111 . 1111 1111
|
||||
10.10.39.255
|
||||
Subnetmaske in Binär
|
||||
1111 1111 . 1111 1111 . 1111 1000 . 0000 0000
|
||||
|
||||
|
||||
### Netz B:
|
||||
10.10.40.0/23 - 10.10.41.255
|
||||
255.255.254.0
|
||||
|
||||
### Netz C:
|
||||
10.10.42.0/25 - 10.10.42.127
|
||||
|
||||
255.255.255. 1000 0000 -> 128
|
||||
10.10.42. 0111 1111 -> 127
|
||||
|
||||
### Netz D:
|
||||
|
||||
10.10.42.128/28 - 10.10.42.143
|
||||
255.255.255. 1111 0000 -> 240 (Subnetzmaske)
|
||||
10.10.42. 1000 1111 (Bis IP)
|
||||
|
||||
> Info zur Bis IP
|
||||
> Alle 1 wurden zu 0 und alle 0 wurden zu 1 aber
|
||||
> nicht in der 4 Gruppe sondern nun in der 8 Gruppe
|
||||
|
||||
Vergleich Von - Bis (Binär)
|
||||
10.10.42.
|
||||
0000 1010 . 0000 1010 . 0010 1010 . 0111 1111
|
||||
0000 1010 . 0000 1010 . 0010 1010 . 1000 1111
|
||||
@@ -31,7 +31,7 @@
|
||||
echo "<pre> $yo </pre>";
|
||||
|
||||
// Ä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 "<pre> $yo2 </pre>";*/
|
||||
26
Zweites Jahr/modulo.php
Normal file
26
Zweites Jahr/modulo.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
$ergebnis = (int)(7/2);
|
||||
echo $ergebnis."<br>";
|
||||
|
||||
$ergebnis = 7%3;
|
||||
echo "Restwert: ".$ergebnis."<br>";
|
||||
|
||||
// Ist ZAhl gerade?
|
||||
|
||||
$zahl = 5;
|
||||
|
||||
if($zahl % 2 == 0)echo "$zahl is gerade.<br>";
|
||||
else echo "$zahl ist ungerade.<br>";
|
||||
|
||||
// LEtze Zahl einer ZAhl ermitteln
|
||||
|
||||
$zahl = 123;
|
||||
|
||||
echo $zahl % 10; // In Zahl steht 3 wenn $zahl%=3
|
||||
|
||||
echo "<br>".$zahl."<br>";
|
||||
|
||||
echo (int)($zahl/10); // 123 -> 12
|
||||
25
Zweites Jahr/pdo_a2-a4_create-db.php
Normal file
25
Zweites Jahr/pdo_a2-a4_create-db.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
// USERNAME, password
|
||||
//$pdo = new PDO("mysql:host=localhost", "phpmyadmin", "server");
|
||||
$pdo = new PDO("mysql:host=localhost;dbname=person","phpmyadmin","server");
|
||||
|
||||
|
||||
$createTable= 'CREATE TABLE IF NOT EXISTS schueler(
|
||||
id INTEGER AUTO_INCREMENT PRIMARY KEY, -- zahl, wird automatisch ausgefüllt
|
||||
frstName VARCHAR(255) NOT NULL,
|
||||
lastName VARCHAR(255) NOT NULL
|
||||
);';
|
||||
|
||||
$pdo->exec($createTable);
|
||||
echo 'TABELLE ERSTELLT <br>';
|
||||
|
||||
$createUser ='INSERT INTO schueler VALUES(
|
||||
null, -- null da "AUTO_INCREMENT" gestzt wurde
|
||||
"Schüler Vorname",
|
||||
"Schüler Nachname"
|
||||
)';
|
||||
|
||||
$pdo->exec($createUser);
|
||||
echo 'NUTZER ERSTELLT <br>';
|
||||
|
||||
?>
|
||||
22
Zweites Jahr/pdo_a5.php
Normal file
22
Zweites Jahr/pdo_a5.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// USERNAME, password
|
||||
//$pdo = new PDO("mysql:host=localhost", "phpmyadmin", "server");
|
||||
$pdo = new PDO("mysql:host=localhost;dbname=person","phpmyadmin","server");
|
||||
|
||||
|
||||
$selectAll= 'SELECT * FROM schueler;';
|
||||
|
||||
$allValues = $pdo->query($selectAll);
|
||||
// $query -> gibt was aus
|
||||
// $exec -> gibt nix aus
|
||||
|
||||
echo "<pre>";
|
||||
print_r($allValues->fetchAll());
|
||||
echo "</pre>";
|
||||
echo 'Alle einträge: <br>';
|
||||
|
||||
foreach($allValues as $value){
|
||||
echo $value["id"]."|".$value['frstName']."|".$value['lastName']."<br>";
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
// db_connection_data.php
|
||||
|
||||
|
||||
$db_engine ="mysql";
|
||||
$db_name = "E2FI1_2025";
|
||||
$db_host = "localhost";
|
||||
$db_user = "phpmyadmin";
|
||||
$db_password = "server";
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
// db_connection_function.php
|
||||
|
||||
function db_connect(){
|
||||
require_once("db_connection_data.php");
|
||||
// db_server = "mysql:dbname=testdb;host:localhost";
|
||||
$db_server = "$db_engine:dbname=$db_name;host=$db_host";
|
||||
try {
|
||||
$dbh = new PDO ($db_server, $db_user, $db_password);
|
||||
echo "<p>DB Connection succesfull established!</p>";
|
||||
return $dbh;
|
||||
} catch (PDOException $e){
|
||||
//echo "Could not connect to DB!<br> ";
|
||||
die("More:".$e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Test:
|
||||
// db_connect();
|
||||
121
Zweites Jahr/unterrichts_projekt/pdo_test.php
Normal file
121
Zweites Jahr/unterrichts_projekt/pdo_test.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PDO >> TEST <<</title>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
// pdo_test.php
|
||||
// holt sich den code aus der datei
|
||||
require_once "inc/db_connection_function.php";
|
||||
|
||||
// etsablish db connect
|
||||
// verbindet sich mit der datenbank
|
||||
$dbh = db_connect();
|
||||
|
||||
// get data from fields:
|
||||
$u_firstname = $_REQUEST['firstname'];
|
||||
$u_lastname = $_REQUEST['lastname'];
|
||||
$u_email = $_REQUEST['email'];
|
||||
|
||||
// definiert den SQL befehl um
|
||||
// einen Nutzer korrekt in der DB anzulegen
|
||||
$addUser="INSERT INTO user VALUES(
|
||||
NULL,
|
||||
'$u_firstname',
|
||||
'$u_lastname',
|
||||
'$u_email'
|
||||
)";
|
||||
|
||||
// Versucht code auszufügen (try{...}) wenn das fehlschlägt
|
||||
// nimmt er sich den error und es wird anderer code ausgeführt
|
||||
// (catch(...){...})
|
||||
try {
|
||||
// führe befehl aus
|
||||
$dbh->exec($addUser);
|
||||
// gib aus das der user erstellt wurde
|
||||
echo "USER CREATED";
|
||||
// kein error also null
|
||||
$custErrMsg = NULL;
|
||||
} catch (PDOException $e) {
|
||||
// weise error nachricht var zu
|
||||
$errMsg = $e->getMessage();
|
||||
// weise error code var zu
|
||||
$errCode = $e->getCode();
|
||||
//echo "ERROR: user could not created. try again later";
|
||||
//echo "<br> Error Message: $errMsg";
|
||||
//echo "<br> Error-Code: $errCode";
|
||||
|
||||
switch ($errCode) {
|
||||
case "23000": $custErrMsg = "<p>Email-Adress already exists</p>"; break;
|
||||
default: $custErrMsg = "<p>Oooooops, something went wrong!</p>";
|
||||
}
|
||||
}
|
||||
echo $custErrMsg;
|
||||
|
||||
// ####################################
|
||||
// read records from db
|
||||
|
||||
// result consists of multiple rows and columns
|
||||
|
||||
// wähle * (alles) aus 'user' (tabelle)
|
||||
$readUser = "SELECT * FROM user";
|
||||
|
||||
/*speicher das ergebnis in der variable,
|
||||
// führe den SQL befehl aus und wandle
|
||||
// das ergebnis in einen array um.
|
||||
// resultReadUser = $dbh->query($readUser)->fetchAll();
|
||||
$dbh->exec($readUser);
|
||||
|
||||
echo "<pre>";
|
||||
print_r($resultReadUser);
|
||||
echo "</pre>";
|
||||
|
||||
ODER
|
||||
|
||||
// speicher das ergebnis in der variable,
|
||||
// führe den SQL befehl aus
|
||||
*/
|
||||
$resultReadUser = $dbh->query($readUser);
|
||||
|
||||
// gebe alles aus dem array aus
|
||||
echo "ID | VORNAME | NACHNAME | MAIL<br>";
|
||||
foreach($resultReadUser as $row) {
|
||||
echo "$row[0] | $row[1] | $row[2] | $row[3]<br>";
|
||||
}
|
||||
|
||||
// ---
|
||||
// result consists of one row and multiple columns
|
||||
// gibt eine spalte
|
||||
$UserID = 1;
|
||||
$getUserById = "SELECT * FROM user WHERE u_id = $UserID";
|
||||
$resultGetUserById = $dbh->query($getUserById)->fetch();
|
||||
echo "<pre>";
|
||||
print_r($resultGetUserById);
|
||||
echo "</pre>";
|
||||
|
||||
echo "<p>Search User ID $UserID:</p>";
|
||||
if($resultGetUserById){
|
||||
echo "<p>User found: {$resultGetUserById['u_firstname']} {$resultGetUserById['u_lastname']}</p>";
|
||||
} else {
|
||||
echo "<p>No User found</p>";
|
||||
}
|
||||
|
||||
// ---
|
||||
// result represents one cell
|
||||
// gibt eine zelle zurück
|
||||
$getFirstnameByUserId = "SELECT u_firstname FROM user WHERE u_id = $UserID ";
|
||||
$resultFristnameByUserId = $dbh->query($getFirstnameByUserId)->fetchColumn();
|
||||
|
||||
echo "<p>Search Firstname of User ID $UserID:</p>";
|
||||
if($resultFristnameByUserId){
|
||||
echo "<p>Firstname of User found: $resultFristnameByUserId</p>";
|
||||
} else {
|
||||
echo "<p>No User found</p>";
|
||||
}
|
||||
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
24
Zweites Jahr/unterrichts_projekt/pdo_test_form.php
Normal file
24
Zweites Jahr/unterrichts_projekt/pdo_test_form.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>PDO Testset</h1>
|
||||
<h2>Entry Form</h2>
|
||||
<p>Please insert your data and press 'save'</p>
|
||||
<form action = "pdo_test.php">
|
||||
<label>Firstname:
|
||||
<input name = "firstname">
|
||||
</label><br>
|
||||
<label>Lastname:
|
||||
<input name = "lastname">
|
||||
</label><br>
|
||||
<label>Email:
|
||||
<input name = "email">
|
||||
</label><br>
|
||||
<button>Save!</button>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<personen>
|
||||
<benutzer>
|
||||
<benuztername>maier1</benuztername>
|
||||
<passwort>mXabc123m!<passwort>
|
||||
<vorname>Hubertus</vorname>
|
||||
<nachname>Maier</nachname>
|
||||
<email>maier1@bfpohg.de</email>
|
||||
</benutzer>
|
||||
|
||||
<benutzer> ... </benutzer>
|
||||
</personen>
|
||||
*/
|
||||
|
||||
// create xml docs
|
||||
$doc = new DOMDocumnet()
|
||||
|
||||
|
||||
|
||||
?>
|
||||
131
lernen/ka-1-lbt3+4/README.MD
Normal file
131
lernen/ka-1-lbt3+4/README.MD
Normal file
@@ -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) 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! 🚀
|
||||
3
lernen/ka-1-lbt3+4/access.log
Normal file
3
lernen/ka-1-lbt3+4/access.log
Normal file
@@ -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
|
||||
40
lernen/ka-1-lbt3+4/aufgabe1.php
Normal file
40
lernen/ka-1-lbt3+4/aufgabe1.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// datenbank heißt absichtlich lernenjahr2 und nicht benutzer_verwaltung
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=localhost;dbname=lernenjahr2","root","deinPasswort");
|
||||
|
||||
|
||||
// Tabelle erstellen
|
||||
$createTable = $pdo ->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) <br>";
|
||||
|
||||
// CREATE USER
|
||||
$createUser = $pdo ->exec('INSERT INTO user VALUES(
|
||||
null,
|
||||
"danielvici223",
|
||||
"daniel@danielvici.com",
|
||||
"11:00:00",
|
||||
"active"
|
||||
);');
|
||||
|
||||
echo "USER CREATED <br>";
|
||||
// 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 <br>";
|
||||
|
||||
|
||||
} catch (PDOException $e) {
|
||||
echo "". $e ."";
|
||||
}
|
||||
|
||||
?>
|
||||
49
lernen/ka-1-lbt3+4/aufgabe2.php
Normal file
49
lernen/ka-1-lbt3+4/aufgabe2.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=localhost;dbname=lernenjahr2","root","deinPasswort");
|
||||
|
||||
$produkteTabelle = 'CREATE TABLE IF NOT EXISTS produkte (
|
||||
id INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255),
|
||||
preis INTEGER,
|
||||
lagerbestand INTEGER)';
|
||||
|
||||
$produkteBestellung = 'CREATE TABLE IF NOT EXISTS bestellungen (
|
||||
id INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||
produkt_id INTEGER,
|
||||
anzahl INTEGER,
|
||||
datum DATE)';
|
||||
|
||||
$createTable = $pdo->exec($produkteTabelle);
|
||||
echo "TABELLE produkte ERSTELLT <br>";
|
||||
$createTable = $pdo->exec($produkteBestellung);
|
||||
echo "TABELLE Bestellung ERSTELLT <br>";
|
||||
|
||||
$lagerbestandProProduktQuery = 'SELECT `name`, lagerbestand, id FROM produkte';
|
||||
$lagerbestandProProdukt = $pdo->query($lagerbestandProProduktQuery)->fetchAll();
|
||||
|
||||
echo "<pre>";
|
||||
print_r($lagerbestandProProdukt);
|
||||
echo "</pre>";
|
||||
|
||||
foreach($lagerbestandProProdukt as $row){
|
||||
if ($row[1] >= 1){
|
||||
echo "Von '$row[0]' haben wir aktuell $row[1] (ID: $row[2]). <br>";
|
||||
} else {
|
||||
echo "Von '$row[0]' haben wir nichts mehr <br>";
|
||||
$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();
|
||||
}
|
||||
67
lernen/ka-1-lbt3+4/aufgabe3.php
Normal file
67
lernen/ka-1-lbt3+4/aufgabe3.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
ini_set("display_errors", "on");
|
||||
|
||||
echo "<h1>AUFGABE 3</h1>";
|
||||
|
||||
// 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 <br>";
|
||||
} else {
|
||||
//echo "TIMESTAMP | LOG-LEVEL | NACHRICHT<br>";
|
||||
foreach(file($fileName) as $line){
|
||||
echo "$line<br>";
|
||||
}
|
||||
}
|
||||
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 <br>";
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
echo "<h2>READ LOGS BEFORE WRITE</h2>";
|
||||
|
||||
echo "<h3>Error Log</h3>";
|
||||
read("error");
|
||||
echo "<h3>Access Log</h3>";
|
||||
read("access");
|
||||
echo "<h3>Debug Log</h3>";
|
||||
read("debug");
|
||||
// ------------------------------------------
|
||||
echo "<h2>WRITE LOGS</h2>";
|
||||
|
||||
writeLog("error", "Es gab kein Fehler");
|
||||
writeLog("access", "Es wurde nicht auf die Datei zugegriffen");
|
||||
writeLog("debug","Das ka.php wurde gedebugt");
|
||||
// ------------------------------------------
|
||||
echo "<h2>READ LOGS AFTER WRITE</h2>";
|
||||
|
||||
echo "<h3>Error Log</h3>";
|
||||
read("error");
|
||||
echo "<h3>Access Log</h3>";
|
||||
read("access");
|
||||
echo "<h3>Debug Log</h3>";
|
||||
read("debug");
|
||||
47
lernen/ka-1-lbt3+4/aufgabe4.php
Normal file
47
lernen/ka-1-lbt3+4/aufgabe4.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
// ###########
|
||||
// # WICHTIG #
|
||||
// ###########
|
||||
// geht nicht!
|
||||
|
||||
ini_set("display_errors", "on");
|
||||
|
||||
// Datei
|
||||
$file = "produkt.csv";
|
||||
|
||||
if(!file_exists($file)){
|
||||
die("File $file doesn't exist or not found!");
|
||||
// Beende das Skript
|
||||
}
|
||||
|
||||
$fp = @fopen($file, 'r');
|
||||
if(!$fp){
|
||||
die("Error while opening file!");
|
||||
}
|
||||
|
||||
$header = fgetcsv($fp);
|
||||
|
||||
|
||||
// READ FILE <- GEHT NICHT
|
||||
|
||||
$yo = print_r($header);
|
||||
echo "<pre> $yo </pre>";
|
||||
|
||||
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]<br>";
|
||||
}
|
||||
echo "<p> -------------------------------- </p>";
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
|
||||
// WRITE TO FILE <- GEHT
|
||||
// $fp = @fopen($file, "W");
|
||||
//$row = [7, "NZXTKeyboard", 120, "Tastatur"];
|
||||
// file, data (array), seperator
|
||||
//fputcsv($fp, $row, ",");
|
||||
|
||||
3
lernen/ka-1-lbt3+4/debug.log
Normal file
3
lernen/ka-1-lbt3+4/debug.log
Normal file
@@ -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
|
||||
31
lernen/ka-1-lbt3+4/docker-compose.yml
Normal file
31
lernen/ka-1-lbt3+4/docker-compose.yml
Normal file
@@ -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:
|
||||
3
lernen/ka-1-lbt3+4/error.log
Normal file
3
lernen/ka-1-lbt3+4/error.log
Normal file
@@ -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
|
||||
8
lernen/ka-1-lbt3+4/produkt.csv
Normal file
8
lernen/ka-1-lbt3+4/produkt.csv
Normal file
@@ -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
|
||||
|
Reference in New Issue
Block a user