5 Commits

Author SHA1 Message Date
S170H
9c61333473 M3 kleinere Anpassungen während Abgabe 2023-11-29 18:41:06 +01:00
Robert
a4e443ed04 11 b) 2023-11-29 10:55:47 +01:00
Robert
09e803b7a0 Dossier 2023-11-24 20:23:38 +01:00
Robert
a76e8b397a Alles bis auf 11 2 b) und c) 2023-11-24 20:18:37 +01:00
Robert
d2f6e02b4b Alles bis auf 11 2b) 2023-11-24 20:04:07 +01:00
17 changed files with 2007 additions and 27 deletions

22
.idea/dataSources.local.xml generated Normal file
View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="dataSourceStorageLocal" created-in="PS-232.10072.32">
<data-source name="@localhost" uuid="a1d1df29-b94a-4ad6-bd6f-a458b97a6c0c">
<database-info product="MariaDB" version="11.1.3-MariaDB" jdbc-version="4.2" driver-name="MariaDB Connector/J" driver-version="3.0.7" dbms="MARIADB" exact-version="11.1.3" exact-driver-version="3.0">
<extra-name-characters>#@</extra-name-characters>
<identifier-quote-string>`</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="lower" quoted-identifiers="lower" />
<secret-storage>master_key</secret-storage>
<user-name>root</user-name>
<schema-mapping>
<introspection-scope>
<node kind="schema">
<name qname="emensawerbeseite" />
<name qname="@" />
</node>
</introspection-scope>
</schema-mapping>
</data-source>
</component>
</project>

12
.idea/dataSources.xml generated Normal file
View 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="@localhost" uuid="a1d1df29-b94a-4ad6-bd6f-a458b97a6c0c">
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
#n:emensawerbeseite
!<md> [1700856041000, 0, null, null, -2147483648, -2147483648]

View File

@@ -0,0 +1,2 @@
#n:information_schema
!<md> [null, 0, null, null, -2147483648, -2147483648]

11
.idea/sqlDataSources.xml generated Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DdlMappings">
<mapping uuid="be6b29fb-6598-43a2-941f-0bba6d782429" name="emensawerbeseite@localhost Mapping">
<data-sources db="24dddfdb-38aa-45e9-b936-a3dd64f77e86" ddl="260cbe83-f68f-4636-a591-fef81902f80c" />
<scope>
<node kind="database" negative="1" />
</scope>
</mapping>
</component>
</project>

6
.idea/sqldialects.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/M3/werbeseite_daten.sql" dialect="MariaDB" />
</component>
</project>

75
.idea/workspace.xml generated Normal file
View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="6dcbe3e4-9d68-41d8-8c39-5cfbe5cd4a21" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/M3/M3.md" beforeDir="false" afterPath="$PROJECT_DIR$/M3/M3.md" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings">
<execution />
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="dev/m3_safak" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="PhpWorkspaceProjectConfiguration" interpreter_name="Xampp" />
<component name="ProjectColorInfo"><![CDATA[{
"customColor": "",
"associatedIndex": 0
}]]></component>
<component name="ProjectId" id="2YZcMNXBUidjAecPVKM66b1DdlE" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"database.data.extractors.current.export.id": "Comma-separated (CSV)_id",
"git-widget-placeholder": "dev/robert__m3",
"last_opened_file_path": "C:/Users/rober/Documents/GitHub/DBWT-Praktika/M3/werbeseite_daten.sql",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"settings.editor.selected.configurable": "preferences.pluginManager",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
"DatabaseDriversLRU": [
"mariadb"
]
}
}]]></component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="6dcbe3e4-9d68-41d8-8c39-5cfbe5cd4a21" name="Changes" comment="" />
<created>1700736495450</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1700736495450</updated>
<workItem from="1700736497007" duration="15223000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

BIN
M3/11b).pdf Normal file

Binary file not shown.

166
M3/Datenbank_erstellen.txt Normal file
View File

@@ -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;

BIN
M3/Diagram.drawio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -52,4 +52,60 @@ 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
CONSTRAINT FOREIGN KEY (id) REFERENCES kategorie(id),
```
gericht_hat_allergen:
``` sql
code char(4),
CONSTRAINT FOREIGN KEY (code) REFERENCES allergen(code),
gericht_id int8 not null,
CONSTRAINT FOREIGN KEY (gericht_id) REFERENCES gericht(id)
```
gericht_hat_kategorie:
``` sql
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)
```

View File

@@ -1 +1 @@
152
218

View File

@@ -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
"wm#32", // 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;
@@ -217,7 +223,6 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
}
</style>
</head>
<body>
<div class="grid">
@@ -249,41 +254,49 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
<!-- 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 = [];
$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)) {
$verwendete_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>" . $row_gerichte['name'] . " <sup>" . $allergene . "</sup></td><td>" . $preisintern . "€</td><td>" . $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)){
if (in_array($row_allergen['code'], $verwendete_allergene_code)){
$verwendete_allergene_string .= "<sup>".$row_allergen['code']."</sup> ". $row_allergen['name']. ", ";
}
}
@@ -296,7 +309,15 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
<div class="zahlen">
<p><?php echo $besucherCount; ?> Besuche</p>
<p><?php echo $newletterCount; ?> Anmeldungen zum Newsletter</p>
<p><?php echo count($gerichte); ?> Speisen</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 $ausgabe["COUNT(id)"];
?>
Speisen
</p>
</div>
<h1 id="kontakt">Interesse geweckt? Wir informieren</h1>

View File

@@ -1 +1 @@
1
2

View File

@@ -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"}]

BIN
M3/dossier m3.pdf Normal file

Binary file not shown.