Compare commits
6 Commits
dev/robert
...
dev/m4_saf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c69ffd7aa2 | ||
|
|
b2acdfe783 | ||
|
|
3206c60ce2 | ||
|
|
644248d1ff | ||
|
|
b8d937d110 | ||
|
|
9c61333473 |
@@ -21,7 +21,7 @@ $newletterCount = 0;
|
|||||||
$link = mysqli_connect(
|
$link = mysqli_connect(
|
||||||
"127.0.0.1", // Host der Datenbank
|
"127.0.0.1", // Host der Datenbank
|
||||||
"root", // Benutzername zur Anmeldung
|
"root", // Benutzername zur Anmeldung
|
||||||
"admin", // Passwort
|
"wm#32", // Passwort
|
||||||
"emensawerbeseite" // Auswahl der Datenbanken (bzw. des Schemas)
|
"emensawerbeseite" // Auswahl der Datenbanken (bzw. des Schemas)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -223,7 +223,6 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
@@ -261,36 +260,43 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|||||||
|
|
||||||
$tabelle = "<table class=\"speisen\"><tr class=\"speisen\"> <td>Gerichte</td><td>Preis intern</td><td>Preis extern</td><td>Bild</td></tr>";
|
$tabelle = "<table class=\"speisen\"><tr class=\"speisen\"> <td>Gerichte</td><td>Preis intern</td><td>Preis extern</td><td>Bild</td></tr>";
|
||||||
|
|
||||||
$verwendete_allergene = [];
|
$verwendete_allergene_code = [];
|
||||||
$verwendete_allergene_string = "";
|
$verwendete_allergene_string = "";
|
||||||
|
|
||||||
while ($row_gerichte = mysqli_fetch_assoc($result_sql_gerichte)) {
|
while ($row_gerichte = mysqli_fetch_assoc($result_sql_gerichte)) {
|
||||||
|
|
||||||
|
// Abfrage der vorhandenen Allergene im aktuellen Gericht
|
||||||
|
|
||||||
$sql_gericht_hat_allergene = "SELECT * FROM gericht_hat_allergen WHERE gericht_id=" . $row_gerichte['id'];
|
$sql_gericht_hat_allergene = "SELECT * FROM gericht_hat_allergen WHERE gericht_id=" . $row_gerichte['id'];
|
||||||
$result_sql_gericht_hat_allergene = mysqli_query($link, $sql_gericht_hat_allergene);
|
$result_sql_gericht_hat_allergene = mysqli_query($link, $sql_gericht_hat_allergene);
|
||||||
$allergene = "";
|
$allergene = "";
|
||||||
while ($row_allergene = mysqli_fetch_assoc($result_sql_gericht_hat_allergene)) {
|
while ($row_allergene = mysqli_fetch_assoc($result_sql_gericht_hat_allergene)) {
|
||||||
$allergene .= $row_allergene['code'] . ", ";
|
$allergene .= $row_allergene['code'] . ", ";
|
||||||
|
|
||||||
if (!in_array($row_allergene['code'], $verwendete_allergene)) {
|
if (!in_array($row_allergene['code'], $verwendete_allergene_code)) {
|
||||||
$verwendete_allergene[] = $row_allergene['code'];
|
$verwendete_allergene_code[] = $row_allergene['code'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Preise in EUR
|
||||||
|
|
||||||
$preisintern = number_format($row_gerichte['preisintern'], 2, ',', '.');
|
$preisintern = number_format($row_gerichte['preisintern'], 2, ',', '.');
|
||||||
$preisextern = number_format($row_gerichte['preisextern'], 2, ',', '.');
|
$preisextern = number_format($row_gerichte['preisextern'], 2, ',', '.');
|
||||||
|
|
||||||
|
// Ausgabe des aktuellen Gerichts
|
||||||
|
|
||||||
$tabelle .= "<tr class=\"speisen\"><td>" . $row_gerichte['name'] . " <sup>" . $allergene . "</sup></td><td>" . $preisintern . "€</td><td>" . $preisextern . "€</td><td>Kein Bild in der Datenbank </td></tr>";
|
$tabelle .= "<tr class=\"speisen\"><td>" . $row_gerichte['name'] . " <sup>" . $allergene . "</sup></td><td>" . $preisintern . "€</td><td>" . $preisextern . "€</td><td>Kein Bild in der Datenbank </td></tr>";
|
||||||
}
|
}
|
||||||
$tabelle .= "</table>";
|
$tabelle .= "</table>";
|
||||||
echo $tabelle;
|
echo $tabelle;
|
||||||
|
|
||||||
|
// Abfrage der Allergen Code und Name
|
||||||
|
|
||||||
$sql_allergen = "SELECT code, name FROM allergen";
|
$sql_allergen = "SELECT code, name FROM allergen";
|
||||||
$result_sql_allergen = mysqli_query($link, $sql_allergen);
|
$result_sql_allergen = mysqli_query($link, $sql_allergen);
|
||||||
|
|
||||||
while ($row_allergen = mysqli_fetch_assoc($result_sql_allergen)){
|
while ($row_allergen = mysqli_fetch_assoc($result_sql_allergen)){
|
||||||
if (in_array($row_allergen['code'], $verwendete_allergene)){
|
if (in_array($row_allergen['code'], $verwendete_allergene_code)){
|
||||||
$verwendete_allergene_string .= "<sup>".$row_allergen['code']."</sup> ". $row_allergen['name']. ", ";
|
$verwendete_allergene_string .= "<sup>".$row_allergen['code']."</sup> ". $row_allergen['name']. ", ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1
|
2
|
||||||
@@ -1 +1 @@
|
|||||||
[{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Ro","email":"robert-joel@web.de","language":"deutsch","terms":"on"},{"name":"Robert","email":"robert-joel@web.de","language":"deutsch","terms":"on"}]
|
[{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Ro","email":"robert-joel@web.de","language":"deutsch","terms":"on"},{"name":"Robert","email":"robert-joel@web.de","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"}]
|
||||||
8
M4/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
8
M4/.idea/M4.iml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
12
M4/.idea/dataSources.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
|
<data-source source="LOCAL" name="emensawerbeseite" uuid="0a2c3473-febe-491a-b3f1-82e9ba5b153f">
|
||||||
|
<driver-ref>mariadb</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
|
||||||
|
<jdbc-url>jdbc:mariadb://localhost:3306</jdbc-url>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
M4/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/M4.iml" filepath="$PROJECT_DIR$/.idea/M4.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
20
M4/.idea/php.xml
generated
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MessDetectorOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCSFixerOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||||
|
<option name="highlightLevel" value="WARNING" />
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PhpProjectSharedConfiguration" php_language_level="8.0" />
|
||||||
|
<component name="PhpStanOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PsalmOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
M4/.idea/sqldialects.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="SqlDialectMappings">
|
||||||
|
<file url="PROJECT" dialect="MariaDB" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
M4/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
19
M4/Dossier/.$Aufgabe1.drawio.bkp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<mxfile host="Electron" modified="2023-12-01T15:21:01.688Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.2 Chrome/114.0.5735.289 Electron/25.9.4 Safari/537.36" etag="78gUQK1TRnweegfurtHK" version="22.1.2" type="device">
|
||||||
|
<diagram name="Seite-1" id="jhCbnHoXzx65MXILfqUJ">
|
||||||
|
<mxGraphModel dx="1050" dy="725" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-1" value="" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="320" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-2" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="80" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-3" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="560" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
91
M4/Dossier/.$Aufgabe1.drawio.dtmp
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<mxfile host="Electron" modified="2023-12-02T22:05:22.197Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.2 Chrome/114.0.5735.289 Electron/25.9.4 Safari/537.36" etag="rtvPorWLK5CfuI4500ka" version="22.1.2" type="device">
|
||||||
|
<diagram name="Seite-1" id="jhCbnHoXzx65MXILfqUJ">
|
||||||
|
<mxGraphModel dx="1048" dy="722" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-1" value="erstellt" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="320" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-2" value="Wunschgericht" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="560" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-3" value="Ersteller" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="80" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-4" value="Name" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="560" y="140" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-5" value="Beschreibung" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="680" y="140" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-6" value="Erstellungs-datum" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="500" y="180" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-7" value="ID" style="ellipse;whiteSpace=wrap;html=1;fontStyle=4" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="620" y="180" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-12" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="8l75yZ3mhxg1qXRySu_G-5" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="700" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="750" y="190" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-13" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.621;entryY=0.005;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-7" target="8l75yZ3mhxg1qXRySu_G-2" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="730" y="280" as="sourcePoint" />
|
||||||
|
<mxPoint x="780" y="230" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-14" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="8l75yZ3mhxg1qXRySu_G-4" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="600" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="628" y="154" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-15" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;exitX=0.15;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-2" target="8l75yZ3mhxg1qXRySu_G-6" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="610" y="250" as="sourcePoint" />
|
||||||
|
<mxPoint x="610" y="170" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-17" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="480" y="279.66" as="sourcePoint" />
|
||||||
|
<mxPoint x="560" y="279.66" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-18" value="Name" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="80" y="160" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-19" value="<u>E-Mail</u>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="170" y="160" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-20" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-3" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="100" y="260" as="sourcePoint" />
|
||||||
|
<mxPoint x="120" y="200" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-21" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="209.65999999999997" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="209.65999999999997" y="200" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-22" value="N" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="530" y="250" width="30" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-23" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="240" y="250" width="30" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-24" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="240" y="280" as="sourcePoint" />
|
||||||
|
<mxPoint x="320" y="280" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
91
M4/Dossier/Aufgabe1.drawio
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<mxfile host="Electron" modified="2023-12-02T22:05:19.234Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.2 Chrome/114.0.5735.289 Electron/25.9.4 Safari/537.36" etag="UqWXQEsGpaBe1QuKew26" version="22.1.2" type="device">
|
||||||
|
<diagram name="Seite-1" id="jhCbnHoXzx65MXILfqUJ">
|
||||||
|
<mxGraphModel dx="1048" dy="722" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-1" value="erstellt" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="320" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-2" value="Wunschgericht" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="560" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-3" value="Ersteller" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="80" y="240" width="160" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-4" value="Name" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="560" y="140" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-5" value="Beschreibung" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="680" y="140" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-6" value="Erstellungs-datum" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="500" y="180" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-7" value="ID" style="ellipse;whiteSpace=wrap;html=1;fontStyle=4" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="620" y="180" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-12" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="8l75yZ3mhxg1qXRySu_G-5" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="700" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="750" y="190" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-13" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.621;entryY=0.005;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-7" target="8l75yZ3mhxg1qXRySu_G-2" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="730" y="280" as="sourcePoint" />
|
||||||
|
<mxPoint x="780" y="230" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-14" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="8l75yZ3mhxg1qXRySu_G-4" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="600" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="628" y="154" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-15" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;exitX=0.15;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-2" target="8l75yZ3mhxg1qXRySu_G-6" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="610" y="250" as="sourcePoint" />
|
||||||
|
<mxPoint x="610" y="170" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-17" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="480" y="279.66" as="sourcePoint" />
|
||||||
|
<mxPoint x="560" y="279.66" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-18" value="Name" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="80" y="160" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-19" value="<u>E-Mail</u>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="170" y="160" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-20" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;" parent="1" source="8l75yZ3mhxg1qXRySu_G-3" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="100" y="260" as="sourcePoint" />
|
||||||
|
<mxPoint x="120" y="200" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-21" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="209.65999999999997" y="240" as="sourcePoint" />
|
||||||
|
<mxPoint x="209.65999999999997" y="200" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-22" value="N" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="530" y="250" width="30" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-23" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="240" y="250" width="30" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="8l75yZ3mhxg1qXRySu_G-24" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="240" y="280" as="sourcePoint" />
|
||||||
|
<mxPoint x="320" y="280" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
BIN
M4/Dossier/ERD M4-1-1.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
144
M4/Dossier/M4.md
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
# Aufgabe 1
|
||||||
|
> Dauer: 2 h
|
||||||
|
## 1)
|
||||||
|

|
||||||
|
## 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 .= "<tr class=\"speisen\"><td>" . $row_gerichte['name'] . " <sup>" . $allergene . "</sup></td><td>" . $preisintern . "€</td><td>" . $preisextern . "€</td><td>Kein Bild in der Datenbank </td></tr>";
|
||||||
|
$tabelle .= "<tr class=\"speisen\"><td>" . htmlspecialchars($row_gerichte['name']) . " <sup>" . htmlspecialchars($allergene) . "</sup></td><td>" . htmlspecialchars($preisintern) . "€</td><td>" . htmlspecialchars($preisextern) . "€</td><td>Kein Bild in der Datenbank </td></tr>";
|
||||||
|
|
||||||
|
|
||||||
|
// Zeile 202
|
||||||
|
$verwendete_allergene_string .= "<sup>".$row_allergen['code']."</sup> ". $row_allergen['name']. ", ";
|
||||||
|
$verwendete_allergene_string .= "<sup>". htmlspecialchars($row_allergen['code']) ."</sup> ". 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.
|
||||||
|
|
||||||
|
# Aufgabe 4
|
||||||
|
> Dauer 1,5 h
|
||||||
|
1. Eindeutigkeit für die Kombination aus Gericht und Kategorie sicherstellen
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_kategorie
|
||||||
|
ADD CONSTRAINT gericht_kategorie_unique UNIQUE (gericht_id, kategorie_id);
|
||||||
|
````
|
||||||
|
2. In der Tabelle gericht soll eine Abfrage nach Name beschleunigt werden.
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht
|
||||||
|
ADD INDEX idx_name (name);
|
||||||
|
````
|
||||||
|
3. Bei Löschung eines Gerichts sollen
|
||||||
|
1) die zugehörigen Zuordnungen zu einer Kategorie sowie
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_kategorie
|
||||||
|
DROP FOREIGN KEY gericht_hat_kategorie_ibfk_1, -- (gericht_id) -> gericht(id)
|
||||||
|
ADD CONSTRAINT gericht_hat_kategorie_ibfk_1_new
|
||||||
|
FOREIGN KEY (gericht_id) REFERENCES gericht(id)
|
||||||
|
ON DELETE CASCADE;
|
||||||
|
````
|
||||||
|
2) die zugehörigen Zuordnungen zu Allergenen automatisch mit gelöscht werden.
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_allergen
|
||||||
|
DROP FOREIGN KEY gericht_hat_allergen_ibfk_2, -- (gericht_id) -> gericht(id)
|
||||||
|
ADD CONSTRAINT gericht_hat_allergen_ibfk_2_new
|
||||||
|
FOREIGN KEY (gericht_id) REFERENCES gericht(id)
|
||||||
|
ON DELETE CASCADE;
|
||||||
|
````
|
||||||
|
4. Eine Kategorie kann nur dann gelöscht werden, wenn
|
||||||
|
1) dieser keine Gerichte zugeordnet sind und
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_kategorie
|
||||||
|
ADD CONSTRAINT fk_gericht_hat_kategorie_kategorie_id
|
||||||
|
FOREIGN KEY (kategorie_id) REFERENCES kategorie(id)
|
||||||
|
ON DELETE RESTRICT;
|
||||||
|
````
|
||||||
|
2) diese keine Kindkategorien besitzt.
|
||||||
|
````sql
|
||||||
|
ALTER TABLE kategorie
|
||||||
|
ADD CONSTRAINT fk_kategorie_eltern_id
|
||||||
|
FOREIGN KEY (eltern_id) REFERENCES kategorie(id)
|
||||||
|
ON DELETE RESTRICT;
|
||||||
|
````
|
||||||
|
5. Wird der Code eines Allergens verändert, so ändert sich dieser Code automatisch in den referenzierenden Datensätzen.
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_allergen
|
||||||
|
DROP FOREIGN KEY gericht_hat_allergen_ibfk_1, -- (code) -> allergen(code)
|
||||||
|
ADD CONSTRAINT gericht_hat_allergen_ibfk_1_new
|
||||||
|
FOREIGN KEY (code) REFERENCES allergen(code)
|
||||||
|
ON UPDATE CASCADE;
|
||||||
|
````
|
||||||
|
6. Eine Kombination aus ``gericht_id`` und ``kategorie_id`` in ``gericht_hat_kategorie`` soll als Primärschlüssel dienen.
|
||||||
|
````sql
|
||||||
|
ALTER TABLE gericht_hat_kategorie
|
||||||
|
ADD PRIMARY KEY (gericht_id, kategorie_id);
|
||||||
|
````
|
||||||
1
M4/Werbeseite/besucher.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
218
|
||||||
BIN
M4/Werbeseite/fh-logo.jpg
Normal file
|
After Width: | Height: | Size: 64 KiB |
31
M4/Werbeseite/gerichte.php
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Praktikum DBWT. Autoren:
|
||||||
|
* Şafak, Hazinedar, 3108590
|
||||||
|
* Robert, Joel, 3672729
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
$gerichte = [
|
||||||
|
1 => ['name' => 'Rindfleich mit Bambus, Kaiserschoten und roter Paprika, dazu Mie Nudeln',
|
||||||
|
'priceint' => 3.50,
|
||||||
|
"priceex" => 6.20,
|
||||||
|
"img" =>"img/bambus.jpg"
|
||||||
|
],
|
||||||
|
2 => ['name' => 'Spinatrisotto mit kleinen Samosateigecken und gemischter Salat',
|
||||||
|
'priceint' => 2.90,
|
||||||
|
"priceex" => 5.30,
|
||||||
|
"img" =>"img/risotto.jpg"
|
||||||
|
],
|
||||||
|
3 => ['name' => 'Spaghetti Bolognese',
|
||||||
|
'priceint' => 3,
|
||||||
|
"priceex" => 5,
|
||||||
|
"img" =>"img/bolo.jpg"
|
||||||
|
],
|
||||||
|
4 => ['name' => 'Spaghetti Carbonara',
|
||||||
|
'priceint' => 3,
|
||||||
|
"priceex" => 5,
|
||||||
|
"img" =>"img/carbonara.jpg"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
?>
|
||||||
BIN
M4/Werbeseite/img/bambus.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
M4/Werbeseite/img/bolo.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
M4/Werbeseite/img/carbonara.jpg
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
M4/Werbeseite/img/risotto.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
274
M4/Werbeseite/index.php
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Praktikum DBWT. Autoren:
|
||||||
|
* Şafak, Hazinedar, 3108590
|
||||||
|
* Robert, Joel, 3672729
|
||||||
|
*/
|
||||||
|
|
||||||
|
include "gerichte.php";
|
||||||
|
|
||||||
|
$besucherCount = 0;
|
||||||
|
$newletterCount = 0;
|
||||||
|
|
||||||
|
// Datenbankanbindung
|
||||||
|
//$link = mysqli_connect(
|
||||||
|
//"127.0.0.1", // Host der Datenbank
|
||||||
|
//"root", // Benutzername zur Anmeldung
|
||||||
|
//"wm#32", // Passwort
|
||||||
|
//"emensawerbeseite" // Auswahl der Datenbanken (bzw. des Schemas)
|
||||||
|
//);
|
||||||
|
|
||||||
|
$link = mysqli_connect(
|
||||||
|
"127.0.0.1", // Host der Datenbank
|
||||||
|
"root", // Benutzername zur Anmeldung
|
||||||
|
"wm#32", // Passwort
|
||||||
|
"emensawerbeseite" // Auswahl der Datenbanken (bzw. des Schemas)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$link) {
|
||||||
|
echo "Verbindung fehlgeschlagen: ", mysqli_connect_error();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Besucher counter
|
||||||
|
|
||||||
|
//Aktuelle Besucher Zahl
|
||||||
|
$sql_besucher = "SELECT besucher FROM besucher_counter WHERE id=1";
|
||||||
|
$result_sql_besucher = mysqli_query($link, $sql_besucher);
|
||||||
|
$besucher = mysqli_fetch_assoc($result_sql_besucher);
|
||||||
|
|
||||||
|
//Updatet Besucher Zahl
|
||||||
|
$besucherCount = $besucher["besucher"] + 1;
|
||||||
|
$sql_besucher = "UPDATE besucher_counter SET besucher =". mysqli_real_escape_string($link, $besucherCount);
|
||||||
|
$result_sql_besucher = mysqli_query($link, $sql_besucher);
|
||||||
|
|
||||||
|
//Newletter counter
|
||||||
|
if (file_exists("newletter.txt")) {
|
||||||
|
$newsFile = fopen("newletter.txt", "r");
|
||||||
|
$newletterCount = fgets($newsFile);
|
||||||
|
fclose($newsFile);
|
||||||
|
} else {
|
||||||
|
$newsFile = fopen("newletter.txt", "w");
|
||||||
|
fwrite($newsFile, 0);
|
||||||
|
fclose($newsFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Newletter Anmeldung
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
$name = $_POST['name'];
|
||||||
|
$email = $_POST['email'];
|
||||||
|
$language = $_POST['language'];
|
||||||
|
$terms = $_POST['terms'];
|
||||||
|
|
||||||
|
$errors = array();
|
||||||
|
//Error handling
|
||||||
|
if (empty(trim($name))) {
|
||||||
|
$errors[] = "Bitte geben Sie einen Namen ein.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($terms)) {
|
||||||
|
$errors[] = "Bitte stimmen Sie den Datenschutzbestimmungen zu.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$errors[] = "Bitte geben Sie eine gültige E-Mail-Adresse ein.";
|
||||||
|
}
|
||||||
|
|
||||||
|
$spam_domains = array("rcpt.at", "damnthespam.at", "wegwerfmail.de", "trashmail");
|
||||||
|
|
||||||
|
foreach ($spam_domains as $domain) {
|
||||||
|
if (str_contains($email, $domain)) {
|
||||||
|
$errors[] = "Bitte geben Sie eine gültige E-Mail-Adresse ein, keine Wegwerf- oder Spam-E-Mail-Adresse.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($errors)) {
|
||||||
|
$data = array(
|
||||||
|
"name" => $name,
|
||||||
|
"email" => $email,
|
||||||
|
"language" => $language,
|
||||||
|
"terms" => $terms
|
||||||
|
);
|
||||||
|
//File writing
|
||||||
|
$file = "subscriptions.json";
|
||||||
|
$current_data = file_exists($file) ? json_decode(file_get_contents($file), true) : array();
|
||||||
|
$current_data[] = $data;
|
||||||
|
|
||||||
|
if (file_put_contents($file, json_encode($current_data))) {
|
||||||
|
echo '<script type="text/javascript"> alert("Vielen Dank für Ihre Anmeldung zum Newsletter.");</script>';
|
||||||
|
|
||||||
|
//Newsletter counter
|
||||||
|
$newletterCount++;
|
||||||
|
$newsFile = fopen("newletter.txt", "w");
|
||||||
|
fwrite($newsFile, $newletterCount);
|
||||||
|
fclose($newsFile);
|
||||||
|
} else {
|
||||||
|
echo '<script type="text/javascript">alert("Es gab einen Fehler bei Ihrer Anmeldung. Bitte versuchen Sie es erneut.");</script>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$error_string = "";
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
$error_string .= $error . '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '<script type="text/javascript">alert("' . $error_string . '");</script>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Ihre E-Mensa</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="grid">
|
||||||
|
<div>
|
||||||
|
<img src="fh-logo.jpg" alt="FH-Logo">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#ankündigung">Ankündigung</a>
|
||||||
|
<a href="#speisen">Speisen</a>
|
||||||
|
<a href="#zahlen">Zahlen</a>
|
||||||
|
<a href="#kontakt">Kontakt</a>
|
||||||
|
<a href="#wichtig">Wichtig für uns</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="grid">
|
||||||
|
<div></div>
|
||||||
|
<div>
|
||||||
|
<img src="mensa21.jpg" alt="Essen">
|
||||||
|
<h1 id="ankündigung">Bald gibt es auch Essen online ;)</h1>
|
||||||
|
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
|
||||||
|
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
||||||
|
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
|
||||||
|
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
||||||
|
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
||||||
|
sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
|
||||||
|
<h1 id="speisen">Köstlichkeiten die Sie erwarten</h1>
|
||||||
|
|
||||||
|
<!-- Speisekarte -->
|
||||||
|
<?php
|
||||||
|
//Gerichte aus Datenbank
|
||||||
|
$sql_gerichte = "SELECT * FROM gericht ORDER BY RAND() LIMIT 5";
|
||||||
|
$result_sql_gerichte = mysqli_query($link, $sql_gerichte);
|
||||||
|
|
||||||
|
$tabelle = "<table class=\"speisen\"><tr class=\"speisen\"> <td>Gerichte</td><td>Preis intern</td><td>Preis extern</td><td>Bild</td></tr>";
|
||||||
|
|
||||||
|
$verwendete_allergene_code = [];
|
||||||
|
$verwendete_allergene_string = "";
|
||||||
|
|
||||||
|
while ($row_gerichte = mysqli_fetch_assoc($result_sql_gerichte)) {
|
||||||
|
|
||||||
|
// Abfrage der vorhandenen Allergene im aktuellen Gericht
|
||||||
|
|
||||||
|
$sql_gericht_hat_allergene = "SELECT * FROM gericht_hat_allergen WHERE gericht_id=" . $row_gerichte['id'];
|
||||||
|
$result_sql_gericht_hat_allergene = mysqli_query($link, $sql_gericht_hat_allergene);
|
||||||
|
$allergene = "";
|
||||||
|
while ($row_allergene = mysqli_fetch_assoc($result_sql_gericht_hat_allergene)) {
|
||||||
|
$allergene .= $row_allergene['code'] . ", ";
|
||||||
|
|
||||||
|
if (!in_array($row_allergene['code'], $verwendete_allergene_code)) {
|
||||||
|
$verwendete_allergene_code[] = $row_allergene['code'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preise in EUR
|
||||||
|
|
||||||
|
$preisintern = number_format($row_gerichte['preisintern'], 2, ',', '.');
|
||||||
|
$preisextern = number_format($row_gerichte['preisextern'], 2, ',', '.');
|
||||||
|
|
||||||
|
// Ausgabe des aktuellen Gerichts
|
||||||
|
|
||||||
|
$tabelle .= "<tr class=\"speisen\"><td>" . htmlspecialchars($row_gerichte['name']) . " <sup>" . htmlspecialchars($allergene) . "</sup></td><td>" . htmlspecialchars($preisintern) . "€</td><td>" . htmlspecialchars($preisextern) . "€</td><td>Kein Bild in der Datenbank </td></tr>";
|
||||||
|
}
|
||||||
|
$tabelle .= "</table>";
|
||||||
|
echo $tabelle;
|
||||||
|
|
||||||
|
// Abfrage der Allergen Code und Name
|
||||||
|
|
||||||
|
$sql_allergen = "SELECT code, name FROM allergen";
|
||||||
|
$result_sql_allergen = mysqli_query($link, $sql_allergen);
|
||||||
|
|
||||||
|
while ($row_allergen = mysqli_fetch_assoc($result_sql_allergen)){
|
||||||
|
if (in_array($row_allergen['code'], $verwendete_allergene_code)){
|
||||||
|
$verwendete_allergene_string .= "<sup>". htmlspecialchars($row_allergen['code']) ."</sup> ". htmlspecialchars($row_allergen['name']) . ", ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $verwendete_allergene_string;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<h1>Für Sie nichts dabei? <a href="../Werbeseite/wunschgericht.php">Wunschgericht erfassen</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<h1 id="zahlen">E-Mensa in Zahlen</h1>
|
||||||
|
<div class="zahlen">
|
||||||
|
<p><?php echo htmlspecialchars($besucherCount); ?> Besuche</p>
|
||||||
|
<p><?php echo htmlspecialchars($newletterCount); ?> Anmeldungen zum Newsletter</p><p>
|
||||||
|
<?php
|
||||||
|
$sql_gerichte = "SELECT COUNT(id) FROM gericht";
|
||||||
|
$result_sql_gerichte = mysqli_query($link, $sql_gerichte);
|
||||||
|
$ausgabe = mysqli_fetch_assoc($result_sql_gerichte);
|
||||||
|
echo htmlspecialchars($ausgabe["COUNT(id)"]);
|
||||||
|
?>
|
||||||
|
Speisen
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<h1 id="kontakt">Interesse geweckt? Wir informieren</h1>
|
||||||
|
|
||||||
|
<form method="post">
|
||||||
|
<div class="formular">
|
||||||
|
<div>
|
||||||
|
<label for="name">Name:</label> <br>
|
||||||
|
<input type="text" name="name" id="name" placeholder="Bitte geben Sie Ihren Namen ein">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="email">E-Mail:</label> <br>
|
||||||
|
<input type="email" name="email" id="email" placeholder="Bitte geben Sie Ihre E-Mail ein">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="language">Newsletter bitte in:</label> <br>
|
||||||
|
<select name="language" id="language">
|
||||||
|
<option value="deutsch">Deutsch</option>
|
||||||
|
<option value="englisch">Englisch</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<input required type="checkbox" name="terms" id="terms">
|
||||||
|
<label for="terms">Den Datenschutzbestimmungen stimme ich zu</label>
|
||||||
|
<button type="submit">Zum Newsletter anmelden</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<h1 id="wichtig">Das ist uns wichtig</h1>
|
||||||
|
<div class="wichtig">
|
||||||
|
<ul class="wichtigListe">
|
||||||
|
<li>Beste frische saisonale Zutaten</li>
|
||||||
|
<li>Ausgewogen abwechslungsreiche Gerichte</li>
|
||||||
|
<li>Sauberkeit</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<h1 class="freude">Wir freuen uns auf Ihren Besuch!</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
<table class="fusszeile">
|
||||||
|
<tr>
|
||||||
|
<td>(c) E-Mensa GmbH</td>
|
||||||
|
<td>Şafak Hazinedar & Robert Joel</td>
|
||||||
|
<td><a href="">Impressum</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
M4/Werbeseite/mensa21.jpg
Normal file
|
After Width: | Height: | Size: 153 KiB |
1
M4/Werbeseite/newletter.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2
|
||||||
90
M4/Werbeseite/style.css
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
* {
|
||||||
|
font-family: Arial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 200px auto 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speisen {
|
||||||
|
border: solid;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speisen td {
|
||||||
|
border: solid;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speisen td:not(:first-of-type) {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zahlen {
|
||||||
|
list-style-type: none;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zahlen p {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formular {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
justify-content: start;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wichtig {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wichtigListe {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.freude {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
border-top: 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fusszeile {
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fusszeile td:first-child {
|
||||||
|
border-left: none;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fusszeile td {
|
||||||
|
border-left: 3px solid;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
1
M4/Werbeseite/subscriptions.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"},{"name":"Ro","email":"robert-joel@web.de","language":"deutsch","terms":"on"},{"name":"Robert","email":"robert-joel@web.de","language":"deutsch","terms":"on"},{"name":"Max","email":"max@gmail.com","language":"deutsch","terms":"on"}]
|
||||||
104
M4/Werbeseite/wunschgericht.php
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
$gericht_name = $_POST['gericht_name'];
|
||||||
|
$gericht_beschreibung = $_POST['gericht_beschreibung'];
|
||||||
|
$ersteller_name = $_POST['ersteller_name'];
|
||||||
|
$ersteller_email = $_POST['ersteller_email'];
|
||||||
|
|
||||||
|
// Datenbankverbindung
|
||||||
|
$link = mysqli_connect(
|
||||||
|
"127.0.0.1",
|
||||||
|
"root",
|
||||||
|
"wm#32",
|
||||||
|
"emensawerbeseite"
|
||||||
|
);
|
||||||
|
if (!$link) {
|
||||||
|
echo "Verbindung fehlgeschlagen: ", mysqli_connect_error();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$error_count = 0;
|
||||||
|
$spam_domains = array("rcpt.at", "damnthespam.at", "wegwerfmail.de", "trashmail");
|
||||||
|
|
||||||
|
foreach ($spam_domains as $domain) {
|
||||||
|
if (str_contains($ersteller_email, $domain)) {
|
||||||
|
echo '<script type="text/javascript"> alert("Fehler bei den übermittelten Daten");</script>';
|
||||||
|
$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 '<script type="text/javascript"> alert("Ihr Wunschgericht wurde erfolgreich gespeichert!");</script>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo '<script type="text/javascript"> alert("Es gab einen Fehler: "' . mysqli_error($link) . '</script>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqli_close($link);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Ihre E-Mensa</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="grid">
|
||||||
|
<div>
|
||||||
|
<img src="fh-logo.jpg" alt="FH-Logo">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="index.php#ankündigung">Ankündigung</a>
|
||||||
|
<a href="index.php#speisen">Speisen</a>
|
||||||
|
<a href="index.php#zahlen">Zahlen</a>
|
||||||
|
<a href="index.php#kontakt">Kontakt</a>
|
||||||
|
<a href="index.php#wichtig">Wichtig für uns</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<form method="post" action="wunschgericht.php">
|
||||||
|
<div class="formular">
|
||||||
|
<label for="gericht_name">Name des Gerichts:</label>
|
||||||
|
<input type="text" name="gericht_name" id="gericht_name" required>
|
||||||
|
<br>
|
||||||
|
<label for="gericht_beschreibung">Beschreibung des Gerichts:</label>
|
||||||
|
<textarea name="gericht_beschreibung" id="gericht_beschreibung" required></textarea>
|
||||||
|
<br>
|
||||||
|
<label for="ersteller_name">Ihr Name:</label>
|
||||||
|
<input type="text" name="ersteller_name" id="ersteller_name">
|
||||||
|
<br>
|
||||||
|
<label for="ersteller_email">Ihre E-Mail Adresse:</label>
|
||||||
|
<input type="text" name="ersteller_email" id="ersteller_email" required>
|
||||||
|
<input type="submit" value="Wunsch abschicken">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
<footer>
|
||||||
|
<table class="fusszeile">
|
||||||
|
<tr>
|
||||||
|
<td>(c) E-Mensa GmbH</td>
|
||||||
|
<td>Şafak Hazinedar & Robert Joel</td>
|
||||||
|
<td><a href="">Impressum</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</footer>
|
||||||
|
</html>
|
||||||