[1700856041000, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/sqlDataSources.xml b/.idea/sqlDataSources.xml
new file mode 100644
index 0000000..219de65
--- /dev/null
+++ b/.idea/sqlDataSources.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
new file mode 100644
index 0000000..0c5bd08
--- /dev/null
+++ b/.idea/sqldialects.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..d41f5cc
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1700736495450
+
+
+ 1700736495450
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/M3/Datenbank_erstellen.txt b/M3/Datenbank_erstellen.txt
new file mode 100644
index 0000000..0ca5288
--- /dev/null
+++ b/M3/Datenbank_erstellen.txt
@@ -0,0 +1,166 @@
+create or replace database emensawerbeseite;
+
+use emensawerbeseite;
+
+create table gericht (
+ id int8 primary key auto_increment,
+ name varchar(80) not null unique,
+ beschreibung varchar(80) not null,
+ erfasst_am date not null,
+ vegetarisch boolean not null,
+ vegan boolean not null,
+ preisintern double not null,
+ preisextern double not null
+);
+
+
+create table allergen(
+ code char(4) primary key ,
+ name varchar(300) not null,
+ typ varchar(20) not null
+);
+
+create table kategorie(
+ id int8 primary key ,
+ name varchar(80) not null,
+ eltern_id int8 ,
+ CONSTRAINT FOREIGN KEY (eltern_id) REFERENCES kategorie(id),
+ bildname varchar(200)
+);
+
+create table gericht_hat_allergen(
+ code char(4),
+ CONSTRAINT FOREIGN KEY (code) REFERENCES allergen(code),
+ gericht_id int8 not null,
+ CONSTRAINT FOREIGN KEY (gericht_id) REFERENCES gericht(id)
+);
+
+create table gericht_hat_kategorie(
+ gericht_id int8 not null,
+ CONSTRAINT FOREIGN KEY (gericht_id) REFERENCES gericht(id),
+ kategorie_id int8 not null,
+ CONSTRAINT FOREIGN KEY (kategorie_id) REFERENCES kategorie(id)
+);
+
+create table besucher_counter(
+ id int primary key,
+ besucher int8
+);
+
+
+INSERT INTO `besucher_counter` ()
+VALUES (1,1);
+
+
+INSERT INTO `allergen` (`code`, `name`, `typ`) VALUES
+ ('a', 'Getreideprodukte', 'Getreide (Gluten)'),
+ ('a1', 'Weizen', 'Allergen'),
+ ('a2', 'Roggen', 'Allergen'),
+ ('a3', 'Gerste', 'Allergen'),
+ ('a4', 'Dinkel', 'Allergen'),
+ ('a5', 'Hafer', 'Allergen'),
+ ('a6', 'Dinkel', 'Allergen'),
+ ('b', 'Fisch', 'Allergen'),
+ ('c', 'Krebstiere', 'Allergen'),
+ ('d', 'Schwefeldioxid/Sulfit', 'Allergen'),
+ ('e', 'Sellerie', 'Allergen'),
+ ('f', 'Milch und Laktose', 'Allergen'),
+ ('f1', 'Butter', 'Allergen'),
+ ('f2', 'Käse', 'Allergen'),
+ ('f3', 'Margarine', 'Allergen'),
+ ('g', 'Sesam', 'Allergen'),
+ ('h', 'Nüsse', 'Allergen'),
+ ('h1', 'Mandeln', 'Allergen'),
+ ('h2', 'Haselnüsse', 'Allergen'),
+ ('h3', 'Walnüsse', 'Allergen'),
+ ('i', 'Erdnüsse', 'Allergen');
+
+INSERT INTO `gericht` (`id`, `name`, `beschreibung`, `erfasst_am`, `vegan`, `vegetarisch`, `preisintern`, `preisextern`) VALUES
+ (1, 'Bratkartoffeln mit Speck und Zwiebeln', 'Kartoffeln mit Zwiebeln und gut Speck', '2020-08-25', 0, 0, 2.3, 4),
+ (3, 'Bratkartoffeln mit Zwiebeln', 'Kartoffeln mit Zwiebeln und ohne Speck', '2020-08-25', 1, 1, 2.3, 4),
+ (4, 'Grilltofu', 'Fein gewürzt und mariniert', '2020-08-25', 1, 1, 2.5, 4.5),
+ (5, 'Lasagne', 'Klassisch mit Bolognesesoße und Creme Fraiche', '2020-08-24', 0, 0, 2.5, 4.5),
+ (6, 'Lasagne vegetarisch', 'Klassisch mit Sojagranulatsoße und Creme Fraiche', '2020-08-24', 0, 1, 2.5, 4.5),
+ (7, 'Hackbraten', 'Nicht nur für Hacker', '2020-08-25', 0, 0, 2.5, 4),
+ (8, 'Gemüsepfanne', 'Gesundes aus der Region, deftig angebraten', '2020-08-25', 1, 1, 2.3, 4),
+ (9, 'Hühnersuppe', 'Suppenhuhn trifft Petersilie', '2020-08-25', 0, 0, 2, 3.5),
+ (10, 'Forellenfilet', 'mit Kartoffeln und Dilldip', '2020-08-22', 0, 0, 3.8, 5),
+ (11, 'Kartoffel-Lauch-Suppe', 'der klassische Bauchwärmer mit frischen Kräutern', '2020-08-22', 0, 1, 2, 3),
+ (12, 'Kassler mit Rosmarinkartoffeln', 'dazu Salat und Senf', '2020-08-23', 0, 0, 3.8, 5.2),
+ (13, 'Drei Reibekuchen mit Apfelmus', 'grob geriebene Kartoffeln aus der Region', '2020-08-23', 0, 1, 2.5, 4.5),
+ (14, 'Pilzpfanne', 'die legendäre Pfanne aus Pilzen der Saison', '2020-08-23', 0, 1, 3, 5),
+ (15, 'Pilzpfanne vegan', 'die legendäre Pfanne aus Pilzen der Saison ohne Käse', '2020-08-24', 1, 1, 3, 5),
+ (16, 'Käsebrötchen', 'schmeckt vor und nach dem Essen', '2020-08-24', 0, 1, 1, 1.5),
+ (17, 'Schinkenbrötchen', 'schmeckt auch ohne Hunger', '2020-08-25', 0, 0, 1.25, 1.75),
+ (18, 'Tomatenbrötchen', 'mit Schnittlauch und Zwiebeln', '2020-08-25', 1, 1, 1, 1.5),
+ (19, 'Mousse au Chocolat', 'sahnige schweizer Schokolade rundet jedes Essen ab', '2020-08-26', 0, 1, 1.25, 1.75),
+ (20, 'Suppenkreation á la Chef', 'was verschafft werden muss, gut und günstig', '2020-08-26', 0, 0, 0.5, 0.9);
+
+INSERT INTO `gericht_hat_allergen` (`code`, `gericht_id`) VALUES
+ ('h', 1),
+ ('a3', 1),
+ ('a4', 1),
+ ('f1', 3),
+ ('a6', 3),
+ ('i', 3),
+ ('a3', 4),
+ ('f1', 4),
+ ('a4', 4),
+ ('h3', 4),
+ ('d', 6),
+ ('h1',7),
+ ('a2', 7),
+ ('h3', 7),
+ ('c', 7),
+ ('a3', 8),
+ ('h3', 10),
+ ('d', 10),
+ ('f', 10),
+ ('f2', 12),
+ ('h1', 12),
+ ('a5',12),
+ ('c', 1),
+ ('a2', 9),
+ ('i', 14),
+ ('f1', 1),
+ ('a1', 15),
+ ('a4', 15),
+ ('i', 15),
+ ('f3', 15),
+ ('h3', 15);
+
+INSERT INTO `kategorie` (`id`, `eltern_id`, `name`, `bildname`) VALUES
+ (1, NULL, 'Aktionen', 'kat_aktionen.png'),
+ (2, NULL, 'Menus', 'kat_menu.gif'),
+ (3, 2, 'Hauptspeisen', 'kat_menu_haupt.bmp'),
+ (4, 2, 'Vorspeisen', 'kat_menu_vor.svg'),
+ (5, 2, 'Desserts', 'kat_menu_dessert.pic'),
+ (6, 1, 'Mensastars', 'kat_stars.tif'),
+ (7, 1, 'Erstiewoche', 'kat_erties.jpg');
+
+INSERT INTO `gericht_hat_kategorie` (`kategorie_id`, `gericht_id`) VALUES
+ (3, 1), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 9), (4, 16), (4, 17), (4, 18), (5, 16), (5, 17), (5, 18);
+
+
+
+
+SELECT DISTINCT name, GROUP_CONCAT(code) FROM gericht g JOIN gericht_hat_allergen a ON g.id = a.gericht_id GROUP BY name ASC;
+
+SELECT DISTINCT name, GROUP_CONCAT(code) FROM gericht g LEFT JOIN gericht_hat_allergen a ON g.id = a.gericht_id GROUP BY name ASC
+;
+SELECT DISTINCT allergen.code, GROUP_CONCAT(gericht.name) AS gericht FROM allergen
+LEFT JOIN gericht_hat_allergen on allergen.code = gericht_hat_allergen.code
+LEFT JOIN gericht ON gericht_hat_allergen.gericht_id = gericht_id
+GROUP BY allergen.name
+ORDER BY code ASC;
+
+
+SELECT kategorie.name, COUNT(kategorie_id) AS anzahl FROM gericht_hat_kategorie, kategorie
+WHERE kategorie.id = gericht_hat_kategorie.kategorie_id
+GROUP BY kategorie_id
+ORDER BY anzahl ASC;
+
+SELECT kategorie.name, COUNT(kategorie_id) AS anzahl FROM gericht_hat_kategorie, kategorie
+WHERE kategorie.id = gericht_hat_kategorie.kategorie_id AND kategorie_id > 2
+GROUP BY kategorie_id
+ORDER BY anzahl ASC;
\ No newline at end of file
diff --git a/M3/Diagram.drawio.png b/M3/Diagram.drawio.png
new file mode 100644
index 0000000..f4e2ae9
Binary files /dev/null and b/M3/Diagram.drawio.png differ
diff --git a/M3/M3.md b/M3/M3.md
index d823256..9e265ef 100644
--- a/M3/M3.md
+++ b/M3/M3.md
@@ -52,4 +52,67 @@ INSERT INTO gericht_hat_kategorie VALUES (21, 3);
```
+# Aufgabe 6
+## Abfragen
+
+1) Alle Gerichte mit allen zugehörigen Allergenen
+``` sql
+SELECT DISTINCT name, GROUP_CONCAT(code) FROM gericht g JOIN gericht_hat_allergen a ON g.id = a.gericht_id GROUP BY name ASC;
+```
+2) Ändern Sie die vorherige Abfrage so ab, dass alle existierenden Gerichte dargestellt werden (auch wenn keine Allergene enthalten sind).
+``` sql
+SELECT DISTINCT name, GROUP_CONCAT(code) FROM gericht g LEFT JOIN gericht_hat_allergen a ON g.id = a.gericht_id GROUP BY name ASC;
+```
+3) Ändern Sie die vorherige Abfrage so ab, so dass im Ergebnis alle existierenden Allergene dargestellt werden (auch wenn diese nicht einem Gericht zugeordnet sind).
+``` sql
+SELECT DISTINCT allergen.code, GROUP_CONCAT(gericht.name) AS gericht FROM allergen LEFT JOIN gericht_hat_allergen on allergen.code = gericht_hat_allergen.code LEFT JOIN gericht ON gericht_hat_allergen.gericht_id = gericht_id
+GROUP BY allergen.name
+ORDER BY code ASC;
+```
+4) Die Anzahl der Gerichte pro Kategorie aufsteigend sortiert nach Anzahl.
+``` sql
+SELECT kategorie.name, COUNT(kategorie_id) AS anzahl FROM gericht_hat_kategorie, kategorie
+WHERE kategorie.id = gericht_hat_kategorie.kategorie_id
+GROUP BY kategorie_id
+ORDER BY anzahl ASC;
+```
+5) Ändern Sie die vorherige Abfrage so ab, dass dabei nur die Kategorien dargestellt werden, die mehr als 2 Gerichte besitzen.
+``` sql
+SELECT kategorie.name, COUNT(kategorie_id) AS anzahl FROM gericht_hat_kategorie, kategorie
+WHERE kategorie.id = gericht_hat_kategorie.kategorie_id AND kategorie_id > 2
+GROUP BY kategorie_id
+ORDER BY anzahl ASC;
+```
+
+
+# Aufgabe 7
+elter_kategorie:
+``` sql
+FOREIGN KEY (id) REFERENCES kategorie(id),
+```
+
+gericht_hat_allergen:
+``` sql
+code char(4),
+FOREIGN KEY (code) REFERENCES allergen(code),
+gericht_id int8 not null,
+FOREIGN KEY (gericht_id) REFERENCES gericht(id)
+
+```
+
+gericht_hat_kategorie:
+``` sql
+gericht_id int8 not null,
+FOREIGN KEY (gericht_id) REFERENCES gericht(id),
+kategorie_id int8 not null,
+FOREIGN KEY (kategorie_id) REFERENCES kategorie(id)
+
+```
+# Aufgabe 11
+
+## Relationenmodell
+
+Kontakte(\_KontaktId\_,Vorname, Nachname, Email, Telefonnummer, Anrede, Typ, )
+Kunde(\_KontaktId\_)
+Lieferant(\_KontaktId\_,Wochentag_fuer_Lieferzeitraum)
\ No newline at end of file
diff --git a/M3/Werbeseite/besucher.txt b/M3/Werbeseite/besucher.txt
index 2d73b5e..cc4f7f3 100644
--- a/M3/Werbeseite/besucher.txt
+++ b/M3/Werbeseite/besucher.txt
@@ -1 +1 @@
-152
\ No newline at end of file
+218
\ No newline at end of file
diff --git a/M3/Werbeseite/index.php b/M3/Werbeseite/index.php
index b4e1fb1..20afe7f 100644
--- a/M3/Werbeseite/index.php
+++ b/M3/Werbeseite/index.php
@@ -11,11 +11,18 @@ $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)
+"127.0.0.1", // Host der Datenbank
+"root", // Benutzername zur Anmeldung
+"admin", // Passwort
+"emensawerbeseite" // Auswahl der Datenbanken (bzw. des Schemas)
);
if (!$link) {
@@ -24,18 +31,16 @@ if (!$link) {
}
//Besucher counter
-if (file_exists("besucher.txt")) {
- $besucherFile = fopen("besucher.txt", "r");
- $besucherCount = fgets($besucherFile) + 1;
- fclose($besucherFile);
- $besucherFile = fopen("besucher.txt", "w");
- fwrite($besucherFile, $besucherCount);
- fclose($besucherFile);
-} else {
- $besucherFile = fopen("besucher.txt", "w");
- fwrite($besucherFile, 1);
- fclose($besucherFile);
-}
+
+//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 =".$besucherCount;
+$result_sql_besucher = mysqli_query($link, $sql_besucher);
//Newletter counter
if (file_exists("newletter.txt")) {
@@ -48,6 +53,7 @@ if (file_exists("newletter.txt")) {
fclose($newsFile);
}
+//Newletter Anmeldung
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $_POST['name'];
$email = $_POST['email'];
@@ -55,7 +61,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$terms = $_POST['terms'];
$errors = array();
-
+ //Error handling
if (empty(trim($name))) {
$errors[] = "Bitte geben Sie einen Namen ein.";
}
@@ -84,7 +90,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
"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;
@@ -249,6 +255,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
Besuche
Anmeldungen zum Newsletter
- Speisen
+
+
+ Speisen
+
Interesse geweckt? Wir informieren