keine Änderungen, Repo auf Laptop

This commit is contained in:
Thomas Py 2026-05-02 17:14:15 +02:00
parent 37550b3712
commit 241a7c2897
9 changed files with 798 additions and 798 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
pyolingo.code-workspace pyolingo.code-workspace

View File

@ -1,128 +1,128 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
$system = getenv('POSTGRES_SYSTEM') ?? 'test'; $system = getenv('POSTGRES_SYSTEM') ?? 'test';
session_start(); session_start();
$error = $_SESSION['error'] ?? ''; $error = $_SESSION['error'] ?? '';
$success = $_SESSION['success'] ?? ''; $success = $_SESSION['success'] ?? '';
$old = $_SESSION['old'] ?? []; $old = $_SESSION['old'] ?? [];
unset($_SESSION['error']); unset($_SESSION['error']);
unset($_SESSION['success']); unset($_SESSION['success']);
unset($_SESSION['old']); unset($_SESSION['old']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
</head> </head>
<body> <body>
<div class="header"> <div class="header">
<h2 class="seitentitel">pyolingo</h2> <h2 class="seitentitel">pyolingo</h2>
</div> </div>
<div class="inhalt"> <div class="inhalt">
<form id="form_hinzufuegenkarte" action="forms/hinzufuegenKarte.php" method="post"> <form id="form_hinzufuegenkarte" action="forms/hinzufuegenKarte.php" method="post">
<div class="hinzufuegenKarteElemente"> <div class="hinzufuegenKarteElemente">
<label class="kategorie"> <label class="kategorie">
<input class="kategorie" type="radio" name="kategorie" value="substantive" <input class="kategorie" type="radio" name="kategorie" value="substantive"
<? if( ($old['kategorie'] ?? '') == 'substantive' <? if( ($old['kategorie'] ?? '') == 'substantive'
|| ($old['kategorie'] ?? '') == '') echo 'checked' ?>> || ($old['kategorie'] ?? '') == '') echo 'checked' ?>>
Substantive Substantive
</label> </label>
<label class="kategorie"> <label class="kategorie">
<input class="kategorie" type="radio" name="kategorie" value="adjektive" <input class="kategorie" type="radio" name="kategorie" value="adjektive"
<? if( ($old['kategorie'] ?? '') == 'adjektive') echo 'checked' ?>> <? if( ($old['kategorie'] ?? '') == 'adjektive') echo 'checked' ?>>
Adjektive Adjektive
</label> </label>
<label class="kategorie"> <label class="kategorie">
<input class="kategorie" type="radio" name="kategorie" value="allgemein" <input class="kategorie" type="radio" name="kategorie" value="allgemein"
<? if( ($old['kategorie'] ?? '') == 'allgemein') echo 'checked' ?>> <? if( ($old['kategorie'] ?? '') == 'allgemein') echo 'checked' ?>>
Allgemein Allgemein
</label> </label>
<label class="kategorie"> <label class="kategorie">
<input class="kategorie" type="radio" name="kategorie" value="eigennamen" <input class="kategorie" type="radio" name="kategorie" value="eigennamen"
<? if( ($old['kategorie'] ?? '') == 'eigennamen') echo 'checked' ?>> <? if( ($old['kategorie'] ?? '') == 'eigennamen') echo 'checked' ?>>
Eigennamen Eigennamen
</label> </label>
</div> </div>
<div id="div_deutsch"> <div id="div_deutsch">
<p class="kategorie" id="p_deutsch">deutsch:</p> <p class="kategorie" id="p_deutsch">deutsch:</p>
<input class="kategorie" <input class="kategorie"
id="input_deutsch" id="input_deutsch"
type="text" type="text"
name="deutsch" name="deutsch"
value="<?= htmlspecialchars($old['deutsch'] ?? '') ?>" value="<?= htmlspecialchars($old['deutsch'] ?? '') ?>"
required> required>
</div> </div>
<?php for($i = 0; $i < 7; $i++) { ?> <?php for($i = 0; $i < 7; $i++) { ?>
<div> <div>
<div id="div_italienisch_text"> <div id="div_italienisch_text">
<input class="kategorie" <input class="kategorie"
id="input_italienisch" id="input_italienisch"
type="text" type="text"
name="italienisch_<?= $i ?>" name="italienisch_<?= $i ?>"
value="<?= htmlspecialchars(($old['italienisch_' . $i] ?? '')) ?>" value="<?= htmlspecialchars(($old['italienisch_' . $i] ?? '')) ?>"
<? if($i == 0) echo 'required' ?>> <? if($i == 0) echo 'required' ?>>
</div> </div>
<div id="div_italienisch_radio"> <div id="div_italienisch_radio">
<label class="kategorie" id="label_italienisch_schwarz"> <label class="kategorie" id="label_italienisch_schwarz">
<input class="kategorie" <input class="kategorie"
type="radio" type="radio"
name="farbe_<?= $i ?>" name="farbe_<?= $i ?>"
value="black" value="black"
<? if( ($old['farbe_' . $i] ?? '') == 'black' || ($old['farbe_' . $i] ?? '') == '') echo 'checked' ?>> <? if( ($old['farbe_' . $i] ?? '') == 'black' || ($old['farbe_' . $i] ?? '') == '') echo 'checked' ?>>
Standard Standard
</label> </label>
<label class="kategorie" id="label_italienisch_blau"> <label class="kategorie" id="label_italienisch_blau">
<input class="kategorie" <input class="kategorie"
type="radio" type="radio"
name="farbe_<?= $i ?>" name="farbe_<?= $i ?>"
value="blue" value="blue"
<? if( ($old['farbe_' . $i] ?? '') == 'blue') echo 'checked' ?>> <? if( ($old['farbe_' . $i] ?? '') == 'blue') echo 'checked' ?>>
Blau Blau
</label> </label>
<label class="kategorie" id="label_italienisch_rot"> <label class="kategorie" id="label_italienisch_rot">
<input class="kategorie" <input class="kategorie"
type="radio" type="radio"
name="farbe_<?= $i ?>" name="farbe_<?= $i ?>"
value="red" value="red"
<? if( ($old['farbe_' . $i] ?? '') == 'red') echo 'checked' ?>> <? if( ($old['farbe_' . $i] ?? '') == 'red') echo 'checked' ?>>
Rot Rot
</label> </label>
<label class="kategorie" id="label_italienisch_gruen"> <label class="kategorie" id="label_italienisch_gruen">
<input class="kategorie" <input class="kategorie"
type="radio" type="radio"
name="farbe_<?= $i ?>" name="farbe_<?= $i ?>"
value="green" value="green"
<? if( ($old['farbe_' . $i] ?? '') == 'green') echo 'checked' ?>> <? if( ($old['farbe_' . $i] ?? '') == 'green') echo 'checked' ?>>
Grün Grün
</label> </label>
</div> </div>
</div> </div>
<?php }; ?> <?php }; ?>
<div id="div_speichern"> <div id="div_speichern">
<?php if ($error): ?> <?php if ($error): ?>
<p class=fehlermeldung><?= htmlspecialchars($error) ?></p> <p class=fehlermeldung><?= htmlspecialchars($error) ?></p>
<?php endif; ?> <?php endif; ?>
<?php if ($success): ?> <?php if ($success): ?>
<p class=erfolgsmeldung><?= htmlspecialchars('Speichern erfolgreich') ?></p> <p class=erfolgsmeldung><?= htmlspecialchars('Speichern erfolgreich') ?></p>
<?php endif; ?> <?php endif; ?>
<button class="button-ellipsoid" id="start"> <button class="button-ellipsoid" id="start">
speichern speichern
</button> </button>
</div> </div>
</form> </form>
</div> </div>
<div class="menue"> <div class="menue">
<a href="index.php" class="menueLink"> <a href="index.php" class="menueLink">
< home > < home >
</a> </a>
<a href="neueKarte.php" class="menueLink"> <a href="neueKarte.php" class="menueLink">
< zurück > < zurück >
</a> </a>
</div> </div>
</body> </body>
</html> </html>

130
data.php
View File

@ -1,66 +1,66 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
header('Content-Type: application/json'); header('Content-Type: application/json');
$stmt = $pdo->query("WITH zeile AS ( $stmt = $pdo->query("WITH zeile AS (
SELECT d.id, SELECT d.id,
d.wort, d.wort,
k.name, k.name,
i.wort AS italienisch, i.wort AS italienisch,
COALESCE(f.farbe, 'black') AS farbe, COALESCE(f.farbe, 'black') AS farbe,
p.pronomen, p.pronomen,
i.endung, i.endung,
i.suffix, i.suffix,
ROW_NUMBER() OVER (PARTITION BY d.wort ORDER BY i.personalpronomen_id NULLS FIRST, i.id) AS rn ROW_NUMBER() OVER (PARTITION BY d.wort ORDER BY i.personalpronomen_id NULLS FIRST, i.id) AS rn
FROM deutsch d FROM deutsch d
JOIN italienisch i ON i.deutsch_id = d.id JOIN italienisch i ON i.deutsch_id = d.id
LEFT OUTER JOIN personalpronomen p ON p.id = i.personalpronomen_id LEFT OUTER JOIN personalpronomen p ON p.id = i.personalpronomen_id
LEFT OUTER JOIN farbe f ON f.id = i.farbe_id LEFT OUTER JOIN farbe f ON f.id = i.farbe_id
JOIN kategorie k ON k.id = d.kategorie_id JOIN kategorie k ON k.id = d.kategorie_id
) )
SELECT id, SELECT id,
wort AS deutsch, wort AS deutsch,
name AS wortart, name AS wortart,
MAX(CASE WHEN rn = 1 THEN italienisch END) AS italienisch_1, MAX(CASE WHEN rn = 1 THEN italienisch END) AS italienisch_1,
MAX(CASE WHEN rn = 1 THEN farbe END) AS farbe_1, MAX(CASE WHEN rn = 1 THEN farbe END) AS farbe_1,
MAX(CASE WHEN rn = 1 THEN pronomen END) AS pronomen_1, MAX(CASE WHEN rn = 1 THEN pronomen END) AS pronomen_1,
MAX(CASE WHEN rn = 1 THEN endung END) AS endung_1, MAX(CASE WHEN rn = 1 THEN endung END) AS endung_1,
MAX(CASE WHEN rn = 1 THEN suffix END) AS suffix_1, MAX(CASE WHEN rn = 1 THEN suffix END) AS suffix_1,
MAX(CASE WHEN rn = 2 THEN italienisch END) AS italienisch_2, MAX(CASE WHEN rn = 2 THEN italienisch END) AS italienisch_2,
MAX(CASE WHEN rn = 2 THEN farbe END) AS farbe_2, MAX(CASE WHEN rn = 2 THEN farbe END) AS farbe_2,
MAX(CASE WHEN rn = 2 THEN pronomen END) AS pronomen_2, MAX(CASE WHEN rn = 2 THEN pronomen END) AS pronomen_2,
MAX(CASE WHEN rn = 2 THEN endung END) AS endung_2, MAX(CASE WHEN rn = 2 THEN endung END) AS endung_2,
MAX(CASE WHEN rn = 2 THEN suffix END) AS suffix_2, MAX(CASE WHEN rn = 2 THEN suffix END) AS suffix_2,
MAX(CASE WHEN rn = 3 THEN italienisch END) AS italienisch_3, MAX(CASE WHEN rn = 3 THEN italienisch END) AS italienisch_3,
MAX(CASE WHEN rn = 3 THEN farbe END) AS farbe_3, MAX(CASE WHEN rn = 3 THEN farbe END) AS farbe_3,
MAX(CASE WHEN rn = 3 THEN pronomen END) AS pronomen_3, MAX(CASE WHEN rn = 3 THEN pronomen END) AS pronomen_3,
MAX(CASE WHEN rn = 3 THEN endung END) AS endung_3, MAX(CASE WHEN rn = 3 THEN endung END) AS endung_3,
MAX(CASE WHEN rn = 3 THEN suffix END) AS suffix_3, MAX(CASE WHEN rn = 3 THEN suffix END) AS suffix_3,
MAX(CASE WHEN rn = 4 THEN italienisch END) AS italienisch_4, MAX(CASE WHEN rn = 4 THEN italienisch END) AS italienisch_4,
MAX(CASE WHEN rn = 4 THEN farbe END) AS farbe_4, MAX(CASE WHEN rn = 4 THEN farbe END) AS farbe_4,
MAX(CASE WHEN rn = 4 THEN pronomen END) AS pronomen_4, MAX(CASE WHEN rn = 4 THEN pronomen END) AS pronomen_4,
MAX(CASE WHEN rn = 4 THEN endung END) AS endung_4, MAX(CASE WHEN rn = 4 THEN endung END) AS endung_4,
MAX(CASE WHEN rn = 4 THEN suffix END) AS suffix_4, MAX(CASE WHEN rn = 4 THEN suffix END) AS suffix_4,
MAX(CASE WHEN rn = 5 THEN italienisch END) AS italienisch_5, MAX(CASE WHEN rn = 5 THEN italienisch END) AS italienisch_5,
MAX(CASE WHEN rn = 5 THEN farbe END) AS farbe_5, MAX(CASE WHEN rn = 5 THEN farbe END) AS farbe_5,
MAX(CASE WHEN rn = 5 THEN pronomen END) AS pronomen_5, MAX(CASE WHEN rn = 5 THEN pronomen END) AS pronomen_5,
MAX(CASE WHEN rn = 5 THEN endung END) AS endung_5, MAX(CASE WHEN rn = 5 THEN endung END) AS endung_5,
MAX(CASE WHEN rn = 5 THEN suffix END) AS suffix_5, MAX(CASE WHEN rn = 5 THEN suffix END) AS suffix_5,
MAX(CASE WHEN rn = 6 THEN italienisch END) AS italienisch_6, MAX(CASE WHEN rn = 6 THEN italienisch END) AS italienisch_6,
MAX(CASE WHEN rn = 6 THEN farbe END) AS farbe_6, MAX(CASE WHEN rn = 6 THEN farbe END) AS farbe_6,
MAX(CASE WHEN rn = 6 THEN pronomen END) AS pronomen_6, MAX(CASE WHEN rn = 6 THEN pronomen END) AS pronomen_6,
MAX(CASE WHEN rn = 6 THEN endung END) AS endung_6, MAX(CASE WHEN rn = 6 THEN endung END) AS endung_6,
MAX(CASE WHEN rn = 6 THEN suffix END) AS suffix_6, MAX(CASE WHEN rn = 6 THEN suffix END) AS suffix_6,
MAX(CASE WHEN rn = 7 THEN italienisch END) AS italienisch_7, MAX(CASE WHEN rn = 7 THEN italienisch END) AS italienisch_7,
MAX(CASE WHEN rn = 7 THEN farbe END) AS farbe_7, MAX(CASE WHEN rn = 7 THEN farbe END) AS farbe_7,
MAX(CASE WHEN rn = 7 THEN pronomen END) AS pronomen_7, MAX(CASE WHEN rn = 7 THEN pronomen END) AS pronomen_7,
MAX(CASE WHEN rn = 7 THEN endung END) AS endung_7, MAX(CASE WHEN rn = 7 THEN endung END) AS endung_7,
MAX(CASE WHEN rn = 7 THEN suffix END) AS suffix_7 MAX(CASE WHEN rn = 7 THEN suffix END) AS suffix_7
FROM zeile FROM zeile
GROUP BY id, wort, name GROUP BY id, wort, name
ORDER BY id;"); ORDER BY id;");
$karteikarten = $stmt->fetchAll(PDO::FETCH_ASSOC); $karteikarten = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($karteikarten); echo json_encode($karteikarten);

View File

@ -1,151 +1,151 @@
<?php <?php
require_once __DIR__ . '/../includes/db_connect.php'; require_once __DIR__ . '/../includes/db_connect.php';
session_start(); session_start();
$_SESSION['old'] = $_POST; $_SESSION['old'] = $_POST;
$return = $_POST['return'] ?? 'allgemein'; $return = $_POST['return'] ?? 'allgemein';
$kategorie = $_POST['kategorie'] ?? 'substantive'; $kategorie = $_POST['kategorie'] ?? 'substantive';
$deutsch = trim($_POST['deutsch'] ?? ''); $deutsch = trim($_POST['deutsch'] ?? '');
$suffix = trim($_POST['suffix'] ?? null); $suffix = trim($_POST['suffix'] ?? null);
$italienisch = []; $italienisch = [];
$farbe = []; $farbe = [];
$wortstamm = []; $wortstamm = [];
$endung = []; $endung = [];
$endungVergleich = ''; $endungVergleich = '';
if($kategorie != 'verben') { if($kategorie != 'verben') {
for($i = 0; $i < 7; $i++) { for($i = 0; $i < 7; $i++) {
$italienisch[$i] = trim($_POST['italienisch_' . $i] ?? ''); $italienisch[$i] = trim($_POST['italienisch_' . $i] ?? '');
$farbe[$i] = $_POST['farbe_' . $i] ?? 'black'; $farbe[$i] = $_POST['farbe_' . $i] ?? 'black';
} }
} else { } else {
for($i = 0; $i < 7; $i++) { for($i = 0; $i < 7; $i++) {
$wortstamm[$i] = trim($_POST['wortstamm_' . $i] ?? ''); $wortstamm[$i] = trim($_POST['wortstamm_' . $i] ?? '');
$endung[$i] = trim($_POST['endung_' . $i] ?? ''); $endung[$i] = trim($_POST['endung_' . $i] ?? '');
$endungVergleich .= $endung[$i]; $endungVergleich .= $endung[$i];
} }
if($endungVergleich == '') $endung = []; if($endungVergleich == '') $endung = [];
$return = 'verben'; $return = 'verben';
} }
if($deutsch === '') { if($deutsch === '') {
$_SESSION['error'] = "Das deutsche Wort darf nicht leer sein!"; $_SESSION['error'] = "Das deutsche Wort darf nicht leer sein!";
header("Location: ../$return.php"); header("Location: ../$return.php");
exit; exit;
} }
if(count($italienisch) == 0 && count($wortstamm) == 0) { if(count($italienisch) == 0 && count($wortstamm) == 0) {
$_SESSION['error'] = "Das erste italienische Wort darf nicht leer sein!"; $_SESSION['error'] = "Das erste italienische Wort darf nicht leer sein!";
header("Location: ../$return.php"); header("Location: ../$return.php");
exit; exit;
} }
insertDB($pdo, $kategorie, $deutsch, $italienisch, $farbe, $wortstamm, $endung, $suffix); insertDB($pdo, $kategorie, $deutsch, $italienisch, $farbe, $wortstamm, $endung, $suffix);
unset($_SESSION['old']); unset($_SESSION['old']);
function insertDB(PDO $pdo, function insertDB(PDO $pdo,
string $kategorie, string $kategorie,
string $deutsch, string $deutsch,
array $italienisch, array $italienisch,
array $farbe, array $farbe,
array $wortstamm, array $wortstamm,
array $endung, array $endung,
string $suffix) { string $suffix) {
try { try {
$pdo->beginTransaction(); $pdo->beginTransaction();
$stmt = $pdo->prepare("SELECT id $stmt = $pdo->prepare("SELECT id
FROM deutsch FROM deutsch
WHERE LOWER(wort) = LOWER(:deutsch);"); WHERE LOWER(wort) = LOWER(:deutsch);");
$stmt->execute(['deutsch' => $deutsch]); $stmt->execute(['deutsch' => $deutsch]);
if($stmt->fetchColumn() != null) throw new Exception('deutsches Wort bereits vorhanden'); if($stmt->fetchColumn() != null) throw new Exception('deutsches Wort bereits vorhanden');
$stmt = $pdo->prepare("SELECT id $stmt = $pdo->prepare("SELECT id
FROM kategorie FROM kategorie
WHERE LOWER(name) = LOWER(:kategorie);"); WHERE LOWER(name) = LOWER(:kategorie);");
$stmt->execute(['kategorie' => $kategorie]); $stmt->execute(['kategorie' => $kategorie]);
$kategorie_id = $stmt->fetchColumn(); $kategorie_id = $stmt->fetchColumn();
$stmt = $pdo->query("SELECT id, $stmt = $pdo->query("SELECT id,
farbe farbe
FROM farbe;"); FROM farbe;");
$farbe_array = $stmt->fetchAll(PDO::FETCH_ASSOC); $farbe_array = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($farbe_array as $farbe) if($farbe['farbe'] == 'red') $red_farbe_id = $farbe['id']; foreach($farbe_array as $farbe) if($farbe['farbe'] == 'red') $red_farbe_id = $farbe['id'];
$stmt = $pdo->prepare("INSERT INTO deutsch(wort, kategorie_id, wort_hinzugefuegt) $stmt = $pdo->prepare("INSERT INTO deutsch(wort, kategorie_id, wort_hinzugefuegt)
VALUES (:wort, :kategorie_id, (:wort_hinzugefuegt)::timestamp);"); VALUES (:wort, :kategorie_id, (:wort_hinzugefuegt)::timestamp);");
$stmt->execute(['wort' => $deutsch, $stmt->execute(['wort' => $deutsch,
'kategorie_id' => $kategorie_id, 'kategorie_id' => $kategorie_id,
'wort_hinzugefuegt' => date('Y-m-d H:i:s')]); 'wort_hinzugefuegt' => date('Y-m-d H:i:s')]);
$stmt = $pdo->prepare("SELECT id $stmt = $pdo->prepare("SELECT id
FROM deutsch FROM deutsch
WHERE LOWER(wort) = LOWER(:deutsch);"); WHERE LOWER(wort) = LOWER(:deutsch);");
$stmt->execute(['deutsch' => $deutsch]); $stmt->execute(['deutsch' => $deutsch]);
$deutsch_id = $stmt->fetchColumn(); $deutsch_id = $stmt->fetchColumn();
if($kategorie != 'verben') { if($kategorie != 'verben') {
for($i = 0; $i < 7; $i++) { for($i = 0; $i < 7; $i++) {
$farbe_id = -1; $farbe_id = -1;
foreach($farbe_array as $it_farbe) if($it_farbe['farbe'] == $farbe[$i]) $farbe_id = $it_farbe['id']; foreach($farbe_array as $it_farbe) if($it_farbe['farbe'] == $farbe[$i]) $farbe_id = $it_farbe['id'];
if($italienisch[$i] != "") { if($italienisch[$i] != "") {
$stmt = $pdo->prepare("INSERT INTO italienisch (wort, deutsch_id, farbe_id) $stmt = $pdo->prepare("INSERT INTO italienisch (wort, deutsch_id, farbe_id)
VALUES (:italienisch, :deutsch_id, :farbe_id)"); VALUES (:italienisch, :deutsch_id, :farbe_id)");
$stmt->execute(['italienisch' => $italienisch[$i], $stmt->execute(['italienisch' => $italienisch[$i],
'deutsch_id' => $deutsch_id, 'deutsch_id' => $deutsch_id,
'farbe_id' => $farbe_id]); 'farbe_id' => $farbe_id]);
} }
} }
} else { } else {
$stmt = $pdo->query("SELECT id FROM personalpronomen;"); $stmt = $pdo->query("SELECT id FROM personalpronomen;");
$personalpronomen = $stmt->fetchAll(PDO::FETCH_ASSOC); $personalpronomen = $stmt->fetchAll(PDO::FETCH_ASSOC);
for($i = 0; $i < 7; $i++) { for($i = 0; $i < 7; $i++) {
$pp = ($i == 0) ? null : $personalpronomen[$i - 1]['id']; $pp = ($i == 0) ? null : $personalpronomen[$i - 1]['id'];
$stmt = $pdo->prepare("INSERT INTO italienisch (wort, deutsch_id, personalpronomen_id, suffix, endung, farbe_id) $stmt = $pdo->prepare("INSERT INTO italienisch (wort, deutsch_id, personalpronomen_id, suffix, endung, farbe_id)
VALUES (:wort, :deutsch_id, :personalpronomen_id, :suffix, :endung, :farbe_id)"); VALUES (:wort, :deutsch_id, :personalpronomen_id, :suffix, :endung, :farbe_id)");
if(count($endung) == 0) { if(count($endung) == 0) {
$stmt->execute(['wort' => $wortstamm[$i], $stmt->execute(['wort' => $wortstamm[$i],
'deutsch_id' => $deutsch_id, 'deutsch_id' => $deutsch_id,
'personalpronomen_id' => $pp, 'personalpronomen_id' => $pp,
'suffix' => $suffix, 'suffix' => $suffix,
'endung' => null, 'endung' => null,
'farbe_id' => null]); 'farbe_id' => null]);
} else { } else {
$stmt->execute(['wort' => $wortstamm[$i], $stmt->execute(['wort' => $wortstamm[$i],
'deutsch_id' => $deutsch_id, 'deutsch_id' => $deutsch_id,
'personalpronomen_id' => $pp, 'personalpronomen_id' => $pp,
'suffix' => $suffix, 'suffix' => $suffix,
'endung' => $endung[$i], 'endung' => $endung[$i],
'farbe_id' => $red_farbe_id]); 'farbe_id' => $red_farbe_id]);
} }
} }
} }
$pdo->commit(); $pdo->commit();
return 0; return 0;
} catch(Exception $e) { } catch(Exception $e) {
$pdo->rollBack(); $pdo->rollBack();
echo "Fehler: " . $e->getMessage(); echo "Fehler: " . $e->getMessage();
return 1; return 1;
} }
} }
$_SESSION['success'] = "neues Wort gespeichert"; $_SESSION['success'] = "neues Wort gespeichert";
header("Location: ../$return.php"); header("Location: ../$return.php");
exit; exit;

View File

@ -1,14 +1,14 @@
<?php <?php
$host = getenv('POSTGRES_HOST'); $host = getenv('POSTGRES_HOST');
$db = getenv('POSTGRES_DB'); $db = getenv('POSTGRES_DB');
$user = getenv('POSTGRES_APPUSER'); $user = getenv('POSTGRES_APPUSER');
$pass = getenv('POSTGRES_APPPASSWORD'); $pass = getenv('POSTGRES_APPPASSWORD');
$port = getenv('POSTGRES_PORT'); $port = getenv('POSTGRES_PORT');
try { try {
$dsn = "pgsql:host=$host;port=$port;dbname=$db;"; $dsn = "pgsql:host=$host;port=$port;dbname=$db;";
$pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); $pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) { } catch (PDOException $e) {
echo "Verbindungsfehler: " . $e->getMessage(); echo "Verbindungsfehler: " . $e->getMessage();
} }
?> ?>

View File

@ -1,22 +1,22 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
$system = getenv('POSTGRES_SYSTEM') ?? 'test'; $system = getenv('POSTGRES_SYSTEM') ?? 'test';
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
</head> </head>
<body> <body>
<div class="header"> <div class="header">
<h2 class="seitentitel">pyolingo</h2> <h2 class="seitentitel">pyolingo</h2>
</div> </div>
<div class="menue"> <div class="menue">
<a href="index.php" class="menueLink"> <a href="index.php" class="menueLink">
< home > < home >
</a> </a>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,34 +1,34 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
$system = getenv('POSTGRES_SYSTEM') ?? 'test'; $system = getenv('POSTGRES_SYSTEM') ?? 'test';
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
</head> </head>
<body> <body>
<div class="header"> <div class="header">
<h2 class="seitentitel">pyolingo</h2> <h2 class="seitentitel">pyolingo</h2>
</div> </div>
<div class="inhalt"> <div class="inhalt">
<form action="allgemein.php"> <form action="allgemein.php">
<button class="button-ellipsoid" id="start" type="submit"> <button class="button-ellipsoid" id="start" type="submit">
Anderes Anderes
</button> </button>
</form> </form>
<form action="verben.php"> <form action="verben.php">
<button class="button-ellipsoid" id="start" type="submit"> <button class="button-ellipsoid" id="start" type="submit">
Verben Verben
</button> </button>
</form> </form>
</div> </div>
<div class="menue"> <div class="menue">
<a href="index.php" class="menueLink"> <a href="index.php" class="menueLink">
< home > < home >
</a> </a>
</div> </div>
</body> </body>
</html> </html>

558
style.css
View File

@ -1,280 +1,280 @@
html { html {
font-size: 24px; font-size: 24px;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
} }
body { body {
background-color: rgb(122, 122, 122); background-color: rgb(122, 122, 122);
color: #14748A; color: #14748A;
} }
h2 { h2 {
font-size: 2.2rem; font-size: 2.2rem;
} }
p { p {
white-space: pre-wrap; white-space: pre-wrap;
} }
h2.seitentitel { h2.seitentitel {
width: 100%; width: 100%;
border-style: none; border-style: none;
margin-left: 100px; margin-left: 100px;
} }
div.header{ div.header{
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: 70px; height: 70px;
background-color: rgb(210, 210, 210); background-color: rgb(210, 210, 210);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
z-index: 1000; z-index: 1000;
padding-top: 20px; padding-top: 20px;
padding-bottom: 20px; padding-bottom: 20px;
} }
.button-ellipsoid:hover { .button-ellipsoid:hover {
background: linear-gradient(#169ab7, #14748A); background: linear-gradient(#169ab7, #14748A);
} }
.button-ellipsoid { .button-ellipsoid {
font-size: 26px; font-size: 26px;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
height: 100px; height: 100px;
width: 300px; width: 300px;
margin-top: 25px; margin-top: 25px;
padding: 25px 40px; padding: 25px 40px;
color: black; color: black;
background: radial-gradient(ellipse at center, #14748A 0%, #169ab7 70%); background: radial-gradient(ellipse at center, #14748A 0%, #169ab7 70%);
border: none; border: none;
border-radius: 180px / 130px; border-radius: 180px / 130px;
box-shadow: inset 0 3px 6px rgba(255,255,255,0.4), box-shadow: inset 0 3px 6px rgba(255,255,255,0.4),
0 4px 8px rgba(0,0,0,0.3); 0 4px 8px rgba(0,0,0,0.3);
} }
.button-karteikarte { .button-karteikarte {
display: none; display: none;
font-size: 40px; font-size: 40px;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
width: 85%; width: 85%;
margin-top: 25px; margin-top: 25px;
padding: 25px 40px; padding: 25px 40px;
color: black; color: black;
background: rgb(210, 210, 210);; background: rgb(210, 210, 210);;
border: none; border: none;
box-shadow: inset 0 3px 6px rgba(255,255,255,0.4), box-shadow: inset 0 3px 6px rgba(255,255,255,0.4),
0 4px 8px rgba(0,0,0,0.3); 0 4px 8px rgba(0,0,0,0.3);
} }
.p-karteikarte { .p-karteikarte {
display: none; display: none;
margin: 0px; margin: 0px;
} }
.p-karteikarte_verben { .p-karteikarte_verben {
margin: 0px; margin: 0px;
} }
#deutsch { #deutsch {
height: 250px; height: 250px;
} }
#button_kartenNavigationVorh { #button_kartenNavigationVorh {
height: 75px; height: 75px;
width: 450px; width: 450px;
margin-top: 0; margin-top: 0;
padding: 0; padding: 0;
} }
#button_kartenNavigationNaech { #button_kartenNavigationNaech {
height: 75px; height: 75px;
width: 450px; width: 450px;
margin-top: 0; margin-top: 0;
padding: 0; padding: 0;
} }
#deutsch.disabled { #deutsch.disabled {
pointer-events: none; pointer-events: none;
opacity: 1; opacity: 1;
} }
#italienisch { #italienisch {
height: 650px; height: 650px;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
#italienisch_verben { #italienisch_verben {
height: 500px; height: 500px;
} }
div.inhalt { div.inhalt {
margin-top: 150px; margin-top: 150px;
height: calc(100vh - 80px); height: calc(100vh - 80px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
#wortZaehler { #wortZaehler {
width: 300px; width: 300px;
margin-right: 100px; margin-right: 100px;
text-align: right; text-align: right;
margin-left: 0px; margin-left: 0px;
} }
div.menue { div.menue {
position: fixed; position: fixed;
bottom: 50px; bottom: 50px;
left: 0; left: 0;
width: 100%; width: 100%;
height: 70px; height: 70px;
z-index: 1000; z-index: 1000;
background-color: rgb(210, 210, 210); background-color: rgb(210, 210, 210);
padding-top: 20px; padding-top: 20px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
a.menueLink { a.menueLink {
text-decoration: none; text-decoration: none;
line-height: 0.8; line-height: 0.8;
font-size: 1.5rem; font-size: 1.5rem;
border-radius: 5px; border-radius: 5px;
flex: 1; flex: 1;
text-align: center; text-align: center;
} }
a:visited { a:visited {
color:#14748A; color:#14748A;
} }
.table-karteikarte { .table-karteikarte {
width: 100%; width: 100%;
text-align: left; text-align: left;
} }
.td-pronomen { .td-pronomen {
width: 30%; width: 30%;
} }
.kategorie { .kategorie {
font-size: 30px; font-size: 30px;
color: black; color: black;
align-items: center; align-items: center;
display: flex; display: flex;
} }
.kategorie input[type="radio"] { .kategorie input[type="radio"] {
transform: scale(1.5); transform: scale(1.5);
margin-right: 10px; margin-right: 10px;
} }
#form_hinzufuegenkarte { #form_hinzufuegenkarte {
width: 95%; width: 95%;
} }
#p_deutsch { #p_deutsch {
display: inline-block; display: inline-block;
} }
#p_italienisch { #p_italienisch {
display: inline-block; display: inline-block;
margin: 0px; margin: 0px;
white-space: unset; white-space: unset;
} }
#input_deutsch { #input_deutsch {
display: inline-block; display: inline-block;
width: 700px; width: 700px;
margin-left: 30px; margin-left: 30px;
} }
#input_suffix { #input_suffix {
display: inline-block; display: inline-block;
width: 700px; width: 700px;
margin-left: 60px; margin-left: 60px;
} }
.hinzufuegenKarteElemente { .hinzufuegenKarteElemente {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
#label_italienisch_schwarz { #label_italienisch_schwarz {
color: black; color: black;
} }
#label_italienisch_rot { #label_italienisch_rot {
color: red; color: red;
} }
#label_italienisch_gruen { #label_italienisch_gruen {
color: green; color: green;
} }
#label_italienisch_blau { #label_italienisch_blau {
color: blue; color: blue;
} }
#input_italienisch { #input_italienisch {
width: 850px; width: 850px;
display: inline-block; display: inline-block;
} }
#div_deutsch { #div_deutsch {
margin-top: 40px; margin-top: 40px;
} }
#div_italienisch_text { #div_italienisch_text {
display: inline-block; display: inline-block;
width: 95%; width: 95%;
margin-top: 40px; margin-top: 40px;
} }
#div_italienisch_radio { #div_italienisch_radio {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
width: 65%; width: 65%;
margin-top: 10px; margin-top: 10px;
} }
#div_speichern { #div_speichern {
margin-top: 25px; margin-top: 25px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.fehlermeldung { .fehlermeldung {
color: red; color: red;
font-size: 36px; font-size: 36px;
} }
.erfolgsmeldung { .erfolgsmeldung {
color: #14748A; color: #14748A;
font-size: 36px; font-size: 36px;
} }
#table_verben { #table_verben {
font-size: 30px; font-size: 30px;
color: black; color: black;
} }
#input_wortstamm { #input_wortstamm {
width: 500px; width: 500px;
} }
#input_endung { #input_endung {
color: red; color: red;
width: 130px; width: 130px;
} }
#kartenNavigation { #kartenNavigation {
bottom: 200px; bottom: 200px;
background-color: rgb(122, 122, 122); background-color: rgb(122, 122, 122);
} }

View File

@ -1,110 +1,110 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
$system = getenv('POSTGRES_SYSTEM') ?? 'test'; $system = getenv('POSTGRES_SYSTEM') ?? 'test';
session_start(); session_start();
$error = $_SESSION['error'] ?? ''; $error = $_SESSION['error'] ?? '';
$success = $_SESSION['success'] ?? ''; $success = $_SESSION['success'] ?? '';
$old = $_SESSION['old'] ?? []; $old = $_SESSION['old'] ?? [];
unset($_SESSION['error']); unset($_SESSION['error']);
unset($_SESSION['success']); unset($_SESSION['success']);
unset($_SESSION['old']); unset($_SESSION['old']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
</head> </head>
<body> <body>
<div class="header"> <div class="header">
<h2 class="seitentitel">pyolingo</h2> <h2 class="seitentitel">pyolingo</h2>
</div> </div>
<div class="inhalt"> <div class="inhalt">
<form id="form_hinzufuegenkarte" action="forms/hinzufuegenKarte.php" method="post"> <form id="form_hinzufuegenkarte" action="forms/hinzufuegenKarte.php" method="post">
<input id="hiddenInputEditTyp" type="hidden" name="kategorie" value="verben"> <input id="hiddenInputEditTyp" type="hidden" name="kategorie" value="verben">
<div> <div>
<p class="kategorie" id="p_deutsch">deutsch:</p> <p class="kategorie" id="p_deutsch">deutsch:</p>
<input class="kategorie" <input class="kategorie"
id="input_deutsch" id="input_deutsch"
type="text" type="text"
name="deutsch" name="deutsch"
value="<?= htmlspecialchars($old['deutsch'] ?? '') ?>" value="<?= htmlspecialchars($old['deutsch'] ?? '') ?>"
required> required>
</div> </div>
<div> <div>
<p class="kategorie" id="p_deutsch">Suffix:</p> <p class="kategorie" id="p_deutsch">Suffix:</p>
<input class="kategorie" <input class="kategorie"
id="input_suffix" id="input_suffix"
type="text" type="text"
name="suffix" name="suffix"
value="<?= htmlspecialchars($old['suffix'] ?? '') ?>" value="<?= htmlspecialchars($old['suffix'] ?? '') ?>"
required> required>
</div> </div>
<table id="table_verben"> <table id="table_verben">
<tr> <tr>
<th></th> <th></th>
<th>Wortstamm</th> <th>Wortstamm</th>
<th>Endung</th> <th>Endung</th>
</tr> </tr>
<?php for($i = 0; $i < 7; $i++) { ?> <?php for($i = 0; $i < 7; $i++) { ?>
<tr> <tr>
<td> <td>
<input id="hiddenInputEditTyp" type="hidden" name="farbe_<?= $i ?>" value="red"> <input id="hiddenInputEditTyp" type="hidden" name="farbe_<?= $i ?>" value="red">
<p class="kategorie" id="p_italienisch"> <p class="kategorie" id="p_italienisch">
<?php switch($i) { <?php switch($i) {
case(0): echo 'Grundwort:'; break; case(0): echo 'Grundwort:'; break;
case(1): echo 'io:'; break; case(1): echo 'io:'; break;
case(2): echo 'tu:'; break; case(2): echo 'tu:'; break;
case(3): echo 'lui, lei, lei:'; break; case(3): echo 'lui, lei, lei:'; break;
case(4): echo 'noi:'; break; case(4): echo 'noi:'; break;
case(5): echo 'voi:'; break; case(5): echo 'voi:'; break;
case(6): echo 'loro:'; break; case(6): echo 'loro:'; break;
} }
?> ?>
</p> </p>
</td> </td>
<td> <td>
<input class="kategorie" <input class="kategorie"
id="input_wortstamm" id="input_wortstamm"
type="text" type="text"
name="wortstamm_<?= $i ?>" name="wortstamm_<?= $i ?>"
value="<?= htmlspecialchars(($old['wortstamm_' . $i] ?? '')) ?>" value="<?= htmlspecialchars(($old['wortstamm_' . $i] ?? '')) ?>"
required> required>
</td> </td>
<td> <td>
<input class="kategorie" <input class="kategorie"
id="input_endung" id="input_endung"
type="text" type="text"
name="endung_<?= $i ?>" name="endung_<?= $i ?>"
value="<?= htmlspecialchars(($old['endung_' . $i] ?? '')) ?>"> value="<?= htmlspecialchars(($old['endung_' . $i] ?? '')) ?>">
</td> </td>
</tr> </tr>
<?php }; ?> <?php }; ?>
</table> </table>
<div id="div_speichern"> <div id="div_speichern">
<?php if ($error): ?> <?php if ($error): ?>
<p class=fehlermeldung><?= htmlspecialchars($error) ?></p> <p class=fehlermeldung><?= htmlspecialchars($error) ?></p>
<?php endif; ?> <?php endif; ?>
<?php if ($success): ?> <?php if ($success): ?>
<p class=erfolgsmeldung><?= htmlspecialchars('Speichern erfolgreich') ?></p> <p class=erfolgsmeldung><?= htmlspecialchars('Speichern erfolgreich') ?></p>
<?php endif; ?> <?php endif; ?>
<button class="button-ellipsoid" id="start"> <button class="button-ellipsoid" id="start">
speichern speichern
</button> </button>
</div> </div>
</form> </form>
</div> </div>
<div class="menue"> <div class="menue">
<a href="index.php" class="menueLink"> <a href="index.php" class="menueLink">
< home > < home >
</a> </a>
<a href="neueKarte.php" class="menueLink"> <a href="neueKarte.php" class="menueLink">
< zurück > < zurück >
</a> </a>
</div> </div>
</body> </body>
</html> </html>