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

130
data.php
View File

@ -1,66 +1,66 @@
<?php
require_once __DIR__ . '/includes/db_connect.php';
header('Content-Type: application/json');
$stmt = $pdo->query("WITH zeile AS (
SELECT d.id,
d.wort,
k.name,
i.wort AS italienisch,
COALESCE(f.farbe, 'black') AS farbe,
p.pronomen,
i.endung,
i.suffix,
ROW_NUMBER() OVER (PARTITION BY d.wort ORDER BY i.personalpronomen_id NULLS FIRST, i.id) AS rn
FROM deutsch d
JOIN italienisch i ON i.deutsch_id = d.id
LEFT OUTER JOIN personalpronomen p ON p.id = i.personalpronomen_id
LEFT OUTER JOIN farbe f ON f.id = i.farbe_id
JOIN kategorie k ON k.id = d.kategorie_id
)
SELECT id,
wort AS deutsch,
name AS wortart,
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 pronomen END) AS pronomen_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 = 2 THEN italienisch END) AS italienisch_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 endung END) AS endung_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 farbe END) AS farbe_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 suffix END) AS suffix_3,
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 pronomen END) AS pronomen_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 = 5 THEN italienisch END) AS italienisch_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 endung END) AS endung_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 farbe END) AS farbe_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 suffix END) AS suffix_6,
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 pronomen END) AS pronomen_7,
MAX(CASE WHEN rn = 7 THEN endung END) AS endung_7,
MAX(CASE WHEN rn = 7 THEN suffix END) AS suffix_7
FROM zeile
GROUP BY id, wort, name
ORDER BY id;");
$karteikarten = $stmt->fetchAll(PDO::FETCH_ASSOC);
<?php
require_once __DIR__ . '/includes/db_connect.php';
header('Content-Type: application/json');
$stmt = $pdo->query("WITH zeile AS (
SELECT d.id,
d.wort,
k.name,
i.wort AS italienisch,
COALESCE(f.farbe, 'black') AS farbe,
p.pronomen,
i.endung,
i.suffix,
ROW_NUMBER() OVER (PARTITION BY d.wort ORDER BY i.personalpronomen_id NULLS FIRST, i.id) AS rn
FROM deutsch d
JOIN italienisch i ON i.deutsch_id = d.id
LEFT OUTER JOIN personalpronomen p ON p.id = i.personalpronomen_id
LEFT OUTER JOIN farbe f ON f.id = i.farbe_id
JOIN kategorie k ON k.id = d.kategorie_id
)
SELECT id,
wort AS deutsch,
name AS wortart,
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 pronomen END) AS pronomen_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 = 2 THEN italienisch END) AS italienisch_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 endung END) AS endung_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 farbe END) AS farbe_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 suffix END) AS suffix_3,
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 pronomen END) AS pronomen_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 = 5 THEN italienisch END) AS italienisch_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 endung END) AS endung_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 farbe END) AS farbe_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 suffix END) AS suffix_6,
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 pronomen END) AS pronomen_7,
MAX(CASE WHEN rn = 7 THEN endung END) AS endung_7,
MAX(CASE WHEN rn = 7 THEN suffix END) AS suffix_7
FROM zeile
GROUP BY id, wort, name
ORDER BY id;");
$karteikarten = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($karteikarten);

View File

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

View File

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

View File

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

View File

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

558
style.css
View File

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

View File

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