diff --git a/M4/.$Aufgabe1.drawio.bkp b/M4/Dossier/.$Aufgabe1.drawio.bkp similarity index 100% rename from M4/.$Aufgabe1.drawio.bkp rename to M4/Dossier/.$Aufgabe1.drawio.bkp diff --git a/M4/Dossier/.$Aufgabe1.drawio.dtmp b/M4/Dossier/.$Aufgabe1.drawio.dtmp new file mode 100644 index 0000000..92492d0 --- /dev/null +++ b/M4/Dossier/.$Aufgabe1.drawio.dtmp @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/M4/Aufgabe1.drawio b/M4/Dossier/Aufgabe1.drawio similarity index 74% rename from M4/Aufgabe1.drawio rename to M4/Dossier/Aufgabe1.drawio index 47dcdad..0372087 100644 --- a/M4/Aufgabe1.drawio +++ b/M4/Dossier/Aufgabe1.drawio @@ -1,85 +1,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/M4/Dossier/ERD M4-1-1.png b/M4/Dossier/ERD M4-1-1.png new file mode 100644 index 0000000..cd34f7f Binary files /dev/null and b/M4/Dossier/ERD M4-1-1.png differ diff --git a/M4/Dossier/M4.md b/M4/Dossier/M4.md new file mode 100644 index 0000000..534d5da --- /dev/null +++ b/M4/Dossier/M4.md @@ -0,0 +1,86 @@ +# Aufgabe 1 +> Dauer: 2 h +## 1) +![ERD](ERD M4-1-1.png) +## 2) Datenbankentwurf in Relationenschreibweise +```sql +use emensawerbeseite; + +-- Tabelle 'Ersteller' erstellen +CREATE TABLE IF NOT EXISTS Ersteller ( + EMail VARCHAR(255) PRIMARY KEY, + Name VARCHAR(255) DEFAULT 'anonym' +); + +-- Tabelle 'Wunschgericht' erstellen +CREATE TABLE IF NOT EXISTS Wunschgericht ( + ID INT AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR(255) NOT NULL, + Beschreibung TEXT, + Erstellungsdatum DATE NOT NULL, + Ersteller_EMail VARCHAR(255) NOT NULL, + FOREIGN KEY (Ersteller_EMail) REFERENCES Ersteller(EMail) +); +``` +## 6) +### a) +````sql +select * from wunschgericht order by Erstellungsdatum desc limit 5; +```` +### b) +````sql +-- basierend auf M3 6) 4) +select ersteller.Name, + count(Ersteller_EMail) as anzahl from wunschgericht, ersteller where ersteller.EMail = wunschgericht.Ersteller_EMail +group by Ersteller_EMail +order by anzahl desc ; +```` +--- +# Aufgabe 2 +> Dauer: 2h + +Bei der Übergabe von Daten in die DB müssen diese geprüft werden. +Bei der Ausgabe von Daten aus der DB im HTML Code müssen diese Maskiert werden. + ````php +// wunschgericht.php +// Zeile 33 +$sql_ersteller_exists = "SELECT * FROM ersteller WHERE EMail = '" . $ersteller_email . "'"; +$sql_ersteller_exists = "SELECT * FROM ersteller WHERE EMail = '" . mysqli_real_escape_string($link, $ersteller_email) . "'"; + +// Zeile 36 +$sql_ersteller = "INSERT INTO ersteller(EMail, Name) VALUES ('" . $ersteller_email . "','" . $ersteller_name . "')"; +$sql_ersteller = "INSERT INTO ersteller(EMail, Name) VALUES ('" . mysqli_real_escape_string($link, $ersteller_email) . "','" . mysqli_real_escape_string($link, $ersteller_name) . "')"; + +// Zeile 42 +$sql = "INSERT INTO wunschgericht(Name, Beschreibung, Erstellungsdatum, Ersteller_EMail) VALUES ('" . $gericht_name . "','" . $gericht_beschreibung . "','". $date ."','" . $ersteller_email . "')"; +$sql = "INSERT INTO wunschgericht(Name, Beschreibung, Erstellungsdatum, Ersteller_EMail) VALUES ('" . mysqli_real_escape_string($link, $gericht_name) . "','" . mysqli_real_escape_string($link, $gericht_beschreibung) . "','".$date."','" . mysqli_real_escape_string($link, $ersteller_email) . "')"; +?> +```` + +````php +// index.php +// Zeile 43 +$sql_besucher = "UPDATE besucher_counter SET besucher =".$besucherCount; +$sql_besucher = "UPDATE besucher_counter SET besucher =". mysqli_real_escape_string($link, $besucherCount); + +// Zeile 190 +$tabelle .= "" . $row_gerichte['name'] . " " . $allergene . "" . $preisintern . "€" . $preisextern . "€Kein Bild in der Datenbank "; +$tabelle .= "" . htmlspecialchars($row_gerichte['name']) . " " . htmlspecialchars($allergene) . "" . htmlspecialchars($preisintern) . "€" . htmlspecialchars($preisextern) . "€Kein Bild in der Datenbank "; + + +// Zeile 202 +$verwendete_allergene_string .= "".$row_allergen['code']." ". $row_allergen['name']. ", "; +$verwendete_allergene_string .= "". htmlspecialchars($row_allergen['code']) ." ". htmlspecialchars($row_allergen['name']) . ", "; + +// Zeile 214f +echo $besucherCount; +echo $newletterCount; + +echo htmlspecialchars($besucherCount); +echo htmlspecialchars($newletterCount); + +// Zeile 220 +echo $ausgabe["COUNT(id)"]; +echo htmlspecialchars($ausgabe["COUNT(id)"]); +```` +Bei der Newsletteranmeldung sollte man sich auch ggf. überlegen, wie man die Eingaben prüft un zu vermeiden, das schadhafter Code gespeichert und später abgerufen wird. diff --git a/M4/Werbeseite/index.php b/M4/Werbeseite/index.php index 80da3e9..9bdd6b0 100644 --- a/M4/Werbeseite/index.php +++ b/M4/Werbeseite/index.php @@ -39,7 +39,7 @@ $besucher = mysqli_fetch_assoc($result_sql_besucher); //Updatet Besucher Zahl $besucherCount = $besucher["besucher"] + 1; -$sql_besucher = "UPDATE besucher_counter SET besucher =".$besucherCount; +$sql_besucher = "UPDATE besucher_counter SET besucher =". mysqli_real_escape_string($link, $besucherCount); $result_sql_besucher = mysqli_query($link, $sql_besucher); //Newletter counter @@ -96,9 +96,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { $current_data[] = $data; if (file_put_contents($file, json_encode($current_data))) { - echo ''; + echo ''; //Newsletter counter $newletterCount++; @@ -106,9 +104,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { fwrite($newsFile, $newletterCount); fclose($newsFile); } else { - echo ''; + echo ''; } } else { $error_string = ""; @@ -116,9 +112,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { $error_string .= $error . '\n'; } - echo ''; + echo ''; } } @@ -193,7 +187,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Ausgabe des aktuellen Gerichts - $tabelle .= "" . $row_gerichte['name'] . " " . $allergene . "" . $preisintern . "€" . $preisextern . "€Kein Bild in der Datenbank "; + $tabelle .= "" . htmlspecialchars($row_gerichte['name']) . " " . htmlspecialchars($allergene) . "" . htmlspecialchars($preisintern) . "€" . htmlspecialchars($preisextern) . "€Kein Bild in der Datenbank "; } $tabelle .= ""; echo $tabelle; @@ -205,26 +199,25 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { while ($row_allergen = mysqli_fetch_assoc($result_sql_allergen)){ if (in_array($row_allergen['code'], $verwendete_allergene_code)){ - $verwendete_allergene_string .= "".$row_allergen['code']." ". $row_allergen['name']. ", "; + $verwendete_allergene_string .= "". htmlspecialchars($row_allergen['code']) ." ". htmlspecialchars($row_allergen['name']) . ", "; } } - echo $verwendete_allergene_string; + echo $verwendete_allergene_string; ?> -

Für Sie nichts dabei? Wunschgericht erfassen

+

Für Sie nichts dabei? Wunschgericht erfassen

E-Mensa in Zahlen

-

Besuche

-

Anmeldungen zum Newsletter

-

+

Besuche

+

Anmeldungen zum Newsletter

Speisen

diff --git a/M4/Werbeseite/wunschgericht.php b/M4/Werbeseite/wunschgericht.php index ca3e097..b0ec1d9 100644 --- a/M4/Werbeseite/wunschgericht.php +++ b/M4/Werbeseite/wunschgericht.php @@ -17,14 +17,38 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { exit(); } - // Einfügen in die Datenbank - $sql = "INSERT INTO wunschgericht (name, beschreibung) VALUES ('" . mysqli_real_escape_string($link, $gericht_name) . "', '" . mysqli_real_escape_string($link, $gericht_beschreibung) . "')"; - $result = mysqli_query($link, $sql); + $error_count = 0; + $spam_domains = array("rcpt.at", "damnthespam.at", "wegwerfmail.de", "trashmail"); - if ($result) { - echo "Ihr Wunschgericht wurde erfolgreich gespeichert!"; - } else { - echo "Es gab einen Fehler: " . mysqli_error($link); + foreach ($spam_domains as $domain) { + if (str_contains($ersteller_email, $domain)) { + echo ''; + $error_count++; + break; + } + } + + if(!$error_count){ + // Ersteller in DB eintragen + $sql_ersteller_exists = "SELECT * FROM ersteller WHERE EMail = '" . mysqli_real_escape_string($link, $ersteller_email) . "'"; + $result_ersteller_exists = mysqli_query($link,$sql_ersteller_exists); + if(mysqli_num_rows($result_ersteller_exists) == 0){ + $sql_ersteller = "INSERT INTO ersteller(EMail, Name) VALUES ('" . mysqli_real_escape_string($link, $ersteller_email) . "','" . mysqli_real_escape_string($link, $ersteller_name) . "')"; + $result_ersteller = mysqli_query($link,$sql_ersteller); + } + + // Gericht in die DB eintragen + $date = date("Y-m-d"); + $sql = "INSERT INTO wunschgericht(Name, Beschreibung, Erstellungsdatum, Ersteller_EMail) + VALUES ('" . mysqli_real_escape_string($link, $gericht_name) . "','" . mysqli_real_escape_string($link, $gericht_beschreibung) . "','".$date."','" . mysqli_real_escape_string($link, $ersteller_email) . "')"; + $result = mysqli_query($link, $sql); + + if ($result) { + echo ''; + } + else { + echo ''; + } } mysqli_close($link);