Compare commits

...

12 Commits

11 changed files with 195 additions and 309 deletions
+19 -11
View File
@@ -2,7 +2,7 @@
include_once 'php/controller/profile-controller.php'; include_once 'php/controller/profile-controller.php';
$user = $user ?? null; $user = $user ?? null;
$isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1"; $isEditMode = (isset($_GET["edit"]) && $_GET["edit"] === "1") || !empty($error);
?> ?>
<main class="form-page"> <main class="form-page">
@@ -10,8 +10,8 @@ $isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1";
<div class="container"> <div class="container">
<?php if (isset($error) && $error): ?> <?php if (!empty($error)): ?>
<p style="color:red;"> <p class="alert-message is-error">
<?php echo htmlspecialchars($error); ?> <?php echo htmlspecialchars($error); ?>
</p> </p>
<?php endif; ?> <?php endif; ?>
@@ -22,7 +22,7 @@ $isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1";
<input type="text" <input type="text"
name="vorname" name="vorname"
class="login-input" class="login-input"
value="<?php echo htmlspecialchars($user["vorname"] ?? ""); ?>" value="<?php echo htmlspecialchars($_POST["vorname"] ?? $user["vorname"] ?? ""); ?>"
<?php echo $isEditMode ? "" : "readonly"; ?> <?php echo $isEditMode ? "" : "readonly"; ?>
required> required>
@@ -30,7 +30,7 @@ $isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1";
<input type="text" <input type="text"
name="nachname" name="nachname"
class="login-input" class="login-input"
value="<?php echo htmlspecialchars($user["nachname"] ?? ""); ?>" value="<?php echo htmlspecialchars($_POST["nachname"] ?? $user["nachname"] ?? ""); ?>"
<?php echo $isEditMode ? "" : "readonly"; ?> <?php echo $isEditMode ? "" : "readonly"; ?>
required> required>
@@ -38,18 +38,26 @@ $isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1";
<input type="email" <input type="email"
name="email" name="email"
class="login-input" class="login-input"
value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>" value="<?php echo htmlspecialchars($_POST["email"] ?? $user["email"] ?? ""); ?>"
<?php echo $isEditMode ? "" : "readonly"; ?> <?php echo $isEditMode ? "" : "readonly"; ?>
required> required>
<label class="input-label"> <label class="input-label">
<?php echo $isEditMode ? "Neues Passwort" : "Passwort"; ?> <?php echo $isEditMode ? "Neues Passwort" : "Passwort"; ?>
</label> </label>
<input type="password"
name="password" <?php if ($isEditMode): ?>
class="login-input" <input type="password"
placeholder="<?php echo $isEditMode ? "Leer lassen, wenn es gleich bleiben soll" : "********"; ?>" name="password"
<?php echo $isEditMode ? "" : "readonly"; ?>> class="login-input"
placeholder="Leer lassen, wenn es gleich bleiben soll">
<?php else: ?>
<input type="password"
name="password"
class="login-input"
value="********"
readonly>
<?php endif; ?>
<br><br> <br><br>
+9 -4
View File
@@ -1,16 +1,18 @@
<?php <?php
include_once 'php/controller/register-controller.php';
$error = $error ?? null; $error = $error ?? null;
?> ?>
<!--
Form: Registrierung
Funktion: Erstellung neuer Benutzerkonten
-->
<main class="login-page"> <main class="login-page">
<div class="login-container"> <div class="login-container">
<h1>Jetzt Registrieren!</h1> <h1>Jetzt Registrieren!</h1>
<?php if ($error): ?> <?php if (!empty($error)): ?>
<p style="color:red;"> <p class="alert-message is-error" style="color:red;">
<?php echo htmlspecialchars($error); ?> <?php echo htmlspecialchars($error); ?>
</p> </p>
<?php endif; ?> <?php endif; ?>
@@ -22,6 +24,7 @@ $error = $error ?? null;
name="email" name="email"
class="login-input" class="login-input"
placeholder="mustermann@web.de" placeholder="mustermann@web.de"
value="<?php echo htmlspecialchars($_POST["email"] ?? ""); ?>"
required> required>
<p class="input-label">Vorname:</p> <p class="input-label">Vorname:</p>
@@ -29,6 +32,7 @@ $error = $error ?? null;
name="vorname" name="vorname"
class="login-input" class="login-input"
placeholder="Max" placeholder="Max"
value="<?php echo htmlspecialchars($_POST["vorname"] ?? ""); ?>"
required> required>
<p class="input-label">Nachname:</p> <p class="input-label">Nachname:</p>
@@ -36,6 +40,7 @@ $error = $error ?? null;
name="nachname" name="nachname"
class="login-input" class="login-input"
placeholder="Mustermann" placeholder="Mustermann"
value="<?php echo htmlspecialchars($_POST["nachname"] ?? ""); ?>"
required> required>
<p class="input-label">Passwort:</p> <p class="input-label">Passwort:</p>
-56
View File
@@ -1,56 +0,0 @@
<!--
Artikel: Datenschutz vs Datensicherheit
Funktion: Inhalt zum Fach Informatik
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<h1>Datenschutz vs Datensicherheit</h1>
<p>
Datenschutz ist in unserer digital vernetzten Welt allgegenwärtig ob in sozialen Netzwerken, beim
Online-Shopping oder dem Einsatz von Bonuskarten, bei der Auswertung von Konsumverhalten und selbstverständlich
auch im schulischen Kontext.
</p>
<h2>
Was ist Datenschutz?
</h2>
<p>
Datenschutz bedeutet, dass persönliche Daten nur gesammelt, gespeichert und verwendet werden dürfen, wenn
es wirklich nötig ist und nur für klar festgelegte Zwecke. Es geht darum, die Privatsphäre von Menschen
zu schützen.
</p>
<h2>
Was ist Datenschutz?
</h2>
<p>
Datensicherheit umfasst alle technischen und organisatorischen Maßnahmen, die verhindern sollen, dass Daten
verloren gehen, beschädigt oder unbemerkt verändert werden. Sie schützt Informationen vor Missbrauch.
</p>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
+4 -10
View File
@@ -1,4 +1,3 @@
<?php <?php
session_start(); session_start();
ob_start(); ob_start();
@@ -52,8 +51,8 @@ if ($pfad === "deleteAccount") {
<title>EduForge</title> <title>EduForge</title>
</head> </head>
<body>
<body>
<?php <?php
include_once 'includes/navbar.php'; include_once 'includes/navbar.php';
@@ -61,20 +60,15 @@ if ($pfad === "deleteAccount") {
Dynamischer Inhalt: Dynamischer Inhalt:
Je nach pfad-Parameter wird die passende Datei aus content geladen. Je nach pfad-Parameter wird die passende Datei aus content geladen.
*/ */
if (isset($_GET["pfad"])) { if (file_exists('content/' . $pfad . '.php')) {
if (file_exists('content/' . $_GET["pfad"] . '.php')) { include_once 'content/' . $pfad . '.php';
include_once 'content/' . $_GET["pfad"] . '.php';
} else {
include_once 'content/404.php';
}
} else { } else {
include_once 'content/home.php'; include_once 'content/404.php';
} }
include_once 'includes/footer.php'; include_once 'includes/footer.php';
?> ?>
</body> </body>
</html> </html>
+39 -57
View File
@@ -1,8 +1,9 @@
<?php <?php
require_once "php/model/LocalUserDAO.php"; require_once "php/model/LocalUserDAO.php";
require_once 'php/model/Article.php'; require_once "php/model/Article.php";
require_once 'php/model/ArticleManager.php'; require_once "php/model/ArticleManager.php";
require_once "php/validator/user-validator.php";
$error = null; $error = null;
@@ -11,34 +12,6 @@ if (!isset($_SESSION["user"])) {
exit(); exit();
} }
/*
* Prüft Vor- und Nachnamen.
* Erlaubt sind Buchstaben, Umlaute, Leerzeichen und Bindestriche.
*/
function isValidName($name): bool {
return preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name);
}
/*
* Prüft, ob die E-Mail-Adresse ein gültiges Format hat.
*/
function isValidEmailAddress($email): bool {
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false
&& strlen($email) <= 100;
}
/*
* Prüft das neue Passwort.
* Leeres Passwort ist erlaubt, wenn der Nutzer es nicht ändern möchte.
*/
function isValidProfilePassword($password): bool {
if ($password === "") {
return true;
}
return strlen($password) >= 8 && strlen($password) <= 72;
}
try { try {
$dao = new LocalUserDAO(); $dao = new LocalUserDAO();
@@ -60,37 +33,40 @@ try {
$nachname = trim($_POST["nachname"] ?? ""); $nachname = trim($_POST["nachname"] ?? "");
$password = $_POST["password"] ?? ""; $password = $_POST["password"] ?? "";
if (!isValidName($vorname)) { if (!userEmailValidator($newEmail)) {
$error = "Der Vorname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
} elseif (!isValidName($nachname)) {
$error = "Der Nachname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
} elseif (!isValidEmailAddress($newEmail)) {
$error = "Bitte gib eine gültige E-Mail-Adresse ein."; $error = "Bitte gib eine gültige E-Mail-Adresse ein.";
} elseif (!isValidProfilePassword($password)) { $_GET["edit"] = "1";
$error = "Das Passwort muss mindestens 8 Zeichen lang sein.";
} elseif (!userNameValidator($vorname)) {
$error = "Der Vorname muss 2 bis 50 Zeichen lang sein und darf nur Buchstaben, Leerzeichen und Bindestriche enthalten.";
$_GET["edit"] = "1";
} elseif (!userNameValidator($nachname)) {
$error = "Der Nachname muss 2 bis 50 Zeichen lang sein und darf nur Buchstaben, Leerzeichen und Bindestriche enthalten.";
$_GET["edit"] = "1";
} elseif (!userOptionalPasswordValidator($password)) {
$error = "Das Passwort muss 8 bis 72 Zeichen lang sein.";
$_GET["edit"] = "1";
} else { } else {
$existingUser = $dao->findUser($newEmail); $updated = $dao->updateUser(
$oldEmail,
$newEmail,
$vorname,
$nachname,
$password
);
if ($existingUser && $newEmail !== $oldEmail) { if ($updated) {
$error = "Diese E-Mail-Adresse wird bereits verwendet."; $_SESSION["user"] = $vorname . " " . $nachname;
$_SESSION["user_email"] = $newEmail;
header("Location: index.php?pfad=profile");
exit();
} else { } else {
$updated = $dao->updateUser( $error = "Die Daten konnten nicht gespeichert werden.";
$oldEmail, $_GET["edit"] = "1";
$newEmail,
$vorname,
$nachname,
$password
);
if ($updated) {
$_SESSION["user"] = $vorname . " " . $nachname;
$_SESSION["user_email"] = $newEmail;
header("Location: index.php?pfad=profile");
exit();
} else {
$error = "Die Daten konnten nicht gespeichert werden.";
}
} }
} }
} }
@@ -104,6 +80,12 @@ try {
$_SESSION["message"] = "user_has_no_articles"; $_SESSION["message"] = "user_has_no_articles";
} }
} catch (InvalidArgumentException $e) {
$error = $e->getMessage();
$_GET["edit"] = "1";
} catch (Exception $e) { } catch (Exception $e) {
$error = "Es ist ein interner Fehler aufgetreten. Bitte versuche es erneut.";
$_SESSION["message"] = "internal_error"; $_SESSION["message"] = "internal_error";
$_GET["edit"] = "1";
} }
+28 -22
View File
@@ -1,37 +1,43 @@
<?php <?php
require_once "php/model/LocalUserDAO.php"; require_once "php/model/LocalUserDAO.php";
require_once "php/validator/user-validator.php";
$dao = new LocalUserDAO();
$error = null; $error = null;
if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($_SERVER["REQUEST_METHOD"] === "POST") {
$email = $_POST["email"] ?? ""; $email = trim($_POST["email"] ?? "");
$vorname = $_POST["vorname"] ?? ""; $vorname = trim($_POST["vorname"] ?? "");
$nachname = $_POST["nachname"] ?? ""; $nachname = trim($_POST["nachname"] ?? "");
$password = password_hash( $plainPassword = $_POST["password"] ?? "";
$_POST["password"] ?? "",
PASSWORD_DEFAULT
);
if ($dao->findUser($email)) {
$error = "Diese E-Mail-Adresse ist bereits registriert.";
if (!userEmailValidator($email)) {
$error = "Bitte gib eine gültige E-Mail-Adresse ein.";
} elseif (!userNameValidator($vorname)) {
$error = "Der Vorname muss 2 bis 50 Zeichen lang sein und darf nur Buchstaben, Umlaute, Leerzeichen und Bindestriche enthalten.";
} elseif (!userNameValidator($nachname)) {
$error = "Der Nachname muss 2 bis 50 Zeichen lang sein und darf nur Buchstaben, Umlaute, Leerzeichen und Bindestriche enthalten.";
} elseif (!userPasswordValidator($plainPassword)) {
$error = "Das Passwort muss 8 bis 72 Zeichen lang sein.";
} else { } else {
try {
$dao = new LocalUserDAO();
$dao->addUser( $password = password_hash($plainPassword, PASSWORD_DEFAULT);
$email,
$vorname,
$nachname,
$password
);
$_SESSION["user"] = $vorname . " " . $nachname; $dao->addUser($email, $vorname, $nachname, $password);
$_SESSION["user_email"] = $email;
header("Location: index.php"); $_SESSION["user"] = $vorname . " " . $nachname;
exit(); $_SESSION["user_email"] = $email;
header("Location: index.php");
exit();
} catch (InvalidArgumentException $e) {
$error = $e->getMessage();
} catch (Exception $e) {
$error = "Die Registrierung konnte nicht gespeichert werden.";
}
} }
} }
+58 -38
View File
@@ -6,6 +6,13 @@ class LocalUserDAO implements UserDAOInterface {
private string $file = "data/users.json"; private string $file = "data/users.json";
/**
* Lädt alle Benutzer aus der JSON-Datei.
*
* @return array Liste aller Benutzer
* @throws RuntimeException wenn die Datei nicht gelesen werden kann
* oder fehlerhafte JSON-Daten enthält
*/
private function loadUsers() { private function loadUsers() {
if (!file_exists($this->file)) { if (!file_exists($this->file)) {
return []; return [];
@@ -26,40 +33,35 @@ class LocalUserDAO implements UserDAOInterface {
return is_array($users) ? $users : []; return is_array($users) ? $users : [];
} }
/**
* Speichert alle Benutzer in die JSON-Datei.
*
* @param array $users Liste aller Benutzer
* @return void
* @throws RuntimeException wenn die Daten nicht gespeichert werden können
*/
private function saveUsers($users) { private function saveUsers($users) {
$result = file_put_contents( $json = json_encode($users, JSON_PRETTY_PRINT);
$this->file,
json_encode($users, JSON_PRETTY_PRINT) if ($json === false) {
); throw new RuntimeException("Benutzerdaten konnten nicht umgewandelt werden.");
}
$result = file_put_contents($this->file, $json);
if ($result === false) { if ($result === false) {
throw new RuntimeException("Benutzerdaten konnten nicht gespeichert werden."); throw new RuntimeException("Benutzerdaten konnten nicht gespeichert werden.");
} }
} }
private function validateEmail($email) { /**
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { * Sucht einen Benutzer anhand seiner E-Mail-Adresse.
throw new InvalidArgumentException("Ungültige E-Mail-Adresse."); *
} * @param string $email E-Mail-Adresse des gesuchten Benutzers
} * @return array|null Benutzerdaten oder null, wenn kein Benutzer gefunden wurde
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
private function validateName($name, $fieldName) { */
if (!preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name)) {
throw new InvalidArgumentException(
$fieldName . " darf nur Buchstaben, Leerzeichen und Bindestriche enthalten."
);
}
}
private function validatePassword($password) {
if (empty($password)) {
throw new InvalidArgumentException("Passwort darf nicht leer sein.");
}
}
public function findUser($email) { public function findUser($email) {
$this->validateEmail($email);
$users = $this->loadUsers(); $users = $this->loadUsers();
foreach ($users as $user) { foreach ($users as $user) {
@@ -78,12 +80,18 @@ class LocalUserDAO implements UserDAOInterface {
return null; return null;
} }
/**
* Fügt einen neuen Benutzer hinzu.
*
* @param string $email E-Mail-Adresse
* @param string $vorname Vorname
* @param string $nachname Nachname
* @param string $password Passwort-Hash
* @return void
* @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function addUser($email, $vorname, $nachname, $password) { public function addUser($email, $vorname, $nachname, $password) {
$this->validateEmail($email);
$this->validateName($vorname, "Vorname");
$this->validateName($nachname, "Nachname");
$this->validatePassword($password);
$users = $this->loadUsers(); $users = $this->loadUsers();
foreach ($users as $user) { foreach ($users as $user) {
@@ -102,12 +110,19 @@ class LocalUserDAO implements UserDAOInterface {
$this->saveUsers($users); $this->saveUsers($users);
} }
/**
* Aktualisiert einen bestehenden Benutzer.
*
* @param string $oldEmail Alte E-Mail-Adresse
* @param string $newEmail Neue E-Mail-Adresse
* @param string $vorname Neuer Vorname
* @param string $nachname Neuer Nachname
* @param string|null $password Neues Passwort oder null
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
* @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) { public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) {
$this->validateEmail($oldEmail);
$this->validateEmail($newEmail);
$this->validateName($vorname, "Vorname");
$this->validateName($nachname, "Nachname");
$users = $this->loadUsers(); $users = $this->loadUsers();
foreach ($users as $user) { foreach ($users as $user) {
@@ -140,9 +155,14 @@ class LocalUserDAO implements UserDAOInterface {
return false; return false;
} }
/**
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
*
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function deleteUser($email) { public function deleteUser($email) {
$this->validateEmail($email);
$users = $this->loadUsers(); $users = $this->loadUsers();
foreach ($users as $i => $user) { foreach ($users as $i => $user) {
+5 -11
View File
@@ -21,7 +21,6 @@ interface UserDAOInterface {
* @return array|null Benutzerdaten als Array oder null * @return array|null Benutzerdaten als Array oder null
* *
* Mögliche Fehler: * Mögliche Fehler:
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können * @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
*/ */
public function findUser($email); public function findUser($email);
@@ -43,9 +42,8 @@ interface UserDAOInterface {
* @return void * @return void
* *
* Mögliche Fehler: * Mögliche Fehler:
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind * @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird
* oder die E-Mail-Adresse bereits verwendet wird * @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
* @throws RuntimeException wenn die Benutzerdaten nicht gespeichert werden können
*/ */
public function addUser($email, $vorname, $nachname, $password); public function addUser($email, $vorname, $nachname, $password);
@@ -67,10 +65,8 @@ interface UserDAOInterface {
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false * @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
* *
* Mögliche Fehler: * Mögliche Fehler:
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind * @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird
* oder die neue E-Mail-Adresse bereits verwendet wird * @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
* oder gespeichert werden können
*/ */
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null); public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null);
@@ -87,9 +83,7 @@ interface UserDAOInterface {
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false * @return bool true, wenn der Benutzer gelöscht wurde, sonst false
* *
* Mögliche Fehler: * Mögliche Fehler:
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist * @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
* oder gespeichert werden können
*/ */
public function deleteUser($email); public function deleteUser($email);
} }
+33
View File
@@ -0,0 +1,33 @@
<?php
function userNameValidator($name)
{
$name = trim($name);
$namePattern = '/^[a-zA-ZäöüÄÖÜß\s-]{2,50}$/u';
return preg_match($namePattern, $name) === 1;
}
function userEmailValidator($email)
{
$email = trim($email);
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false
&& mb_strlen($email) <= 100;
}
function userPasswordValidator($password)
{
$zeichenAnzahl = mb_strlen($password);
return $zeichenAnzahl >= 8 && $zeichenAnzahl <= 72;
}
function userOptionalPasswordValidator($password)
{
if (!isset($password) || $password === '') {
return true;
}
return userPasswordValidator($password);
}
-53
View File
@@ -1,53 +0,0 @@
<!--
Artikel: Satz des Pythagoras
Funktion: Inhalt zum Fach Mathe
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<h1>Satz des Pythagoras</h1>
<p>
Der Satz des Pythagoras wurde von dem griechischen Philosophen Pythagoras von Samos formuliert und im
dritten Jahrhundert vor Christus veröffentlicht.
</p>
<figure>
<img src="https://cdn8.picryl.com/photo/2016/05/14/pythagoras-e9560b-1024.jpg" alt="Trulli" style="width:10%">
<figcaption><a href="https://cdn8.picryl.com/photo/2016/05/14/pythagoras-e9560b-1024.jpg">Quelle</a></figcaption>
</figure>
<p>
In der beigefügten Abbildung sehen wir ein rechtwinkliges Dreieck, dessen drei Seiten die Längen a, b und c
besitzen. Auf jeder Seite ist ein Quadrat konstruiert. Das Quadrat auf der Seite a hat die Fläche a2, das
Quadrat auf der Seite b hat die Fläche b2 und das Quadrat auf der Seite c hat die Fläche c2. Der Satz des
Pythagoras besagt, dass die Summe der Flächen der beiden kleineren Quadrate gleich der Fläche des größten
Quadrats ist. Das bedeutet, dass a^2+b^2=c^2 (Satz des Pythagoras).
</p>
<a href="docs/Uebungsaufgaben_Pythagoras.pdf">Lernzettel-Download</a>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>
-47
View File
@@ -1,47 +0,0 @@
<!--
Artikel: Tunneleffekt
Funktion: Inhalt zum Fach Physik
TODO: entfernen, wenn die Kategorie-Anzeige implementiert ist.
-->
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="description" content="EduForge">
<meta name="author" content="Niklas Ortmann">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/navbar.css">
<link rel="stylesheet" href="css/footer.css">
<title>EduForge</title>
</head>
<body>
<?php
include_once 'includes/navbar.php';
?>
<main>
<h1>Tunneleffekt</h1>
<p>
Der Tunneleffekt ist ein quantenmechanisches Phänomen, bei dem Teilchen vor allem Elektronen eine
Energiebarriere überwinden können, obwohl sie nach den Regeln der klassischen Physik nicht genügend Energie
dafür besitzen. In der klassischen Vorstellung müsste ein Elektron entweder genügend Energie haben, um über
eine Barriere zu „springen“, oder es würde vollständig zurückgeworfen. In der Quantenphysik wird ein Elektron
jedoch nicht als punktförmiges Teilchen beschrieben, sondern als Wellenfunktion, die sich räumlich ausdehnt.
Dadurch besteht eine endliche Wahrscheinlichkeit, dass sich das Elektron auf der anderen Seite einer Barriere
befindet (Griffiths & Schroeter, 2018).
</p>
</main>
<?php
include_once 'includes/footer.php';
?>
</body>
</html>