Profildaten bearbeiten

This commit is contained in:
2026-06-02 22:42:47 +02:00
parent ade73f3105
commit 92574a0f76
4 changed files with 128 additions and 19 deletions
+48 -10
View File
@@ -1,36 +1,74 @@
<?php <?php
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";
?> ?>
<main class="form-page"> <main class="form-page">
<div class="flexbox"> <div class="flexbox">
<div class="container"> <div class="container">
<form>
<?php if (isset($error) && $error): ?>
<p style="color:red;">
<?php echo htmlspecialchars($error); ?>
</p>
<?php endif; ?>
<form method="post" action="index.php?pfad=profile">
<label class="input-label">Vorname</label> <label class="input-label">Vorname</label>
<input type="text" <input type="text"
name="vorname"
class="login-input" class="login-input"
readonly value="<?php echo htmlspecialchars($user["vorname"] ?? ""); ?>"
value="<?php echo htmlspecialchars($user["vorname"] ?? ""); ?>"> <?php echo $isEditMode ? "" : "readonly"; ?>
required>
<label class="input-label">Nachname</label> <label class="input-label">Nachname</label>
<input type="text" <input type="text"
name="nachname"
class="login-input" class="login-input"
readonly value="<?php echo htmlspecialchars($user["nachname"] ?? ""); ?>"
value="<?php echo htmlspecialchars($user["nachname"] ?? ""); ?>"> <?php echo $isEditMode ? "" : "readonly"; ?>
required>
<label class="input-label">Email-Adresse</label> <label class="input-label">Email-Adresse</label>
<input type="email" <input type="email"
name="email"
class="login-input" class="login-input"
readonly value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>"
value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>"> <?php echo $isEditMode ? "" : "readonly"; ?>
required>
<label class="input-label">Passwort</label> <label class="input-label">
<?php echo $isEditMode ? "Neues Passwort" : "Passwort"; ?>
</label>
<input type="password" <input type="password"
name="password"
class="login-input" class="login-input"
readonly placeholder="<?php echo $isEditMode ? "Leer lassen, wenn es gleich bleiben soll" : "********"; ?>"
value="********"> <?php echo $isEditMode ? "" : "readonly"; ?>>
<br><br>
<?php if ($isEditMode): ?>
<button type="submit"
name="saveProfile"
class="button">
Speichern
</button>
<a href="index.php?pfad=profile" class="button">
Abbrechen
</a>
<?php else: ?>
<a href="index.php?pfad=profile&edit=1" class="button">
Bearbeiten
</a>
<?php endif; ?>
</form> </form>
<br> <br>
+45 -9
View File
@@ -9,8 +9,52 @@ if (!isset($_SESSION["user"])) {
exit(); exit();
} }
$dao = new LocalUserDAO();
$error = null;
try { try {
$dao = new LocalUserDAO(); $user = $dao->findUser($_SESSION["user_email"] ?? "");
if (!$user) {
$_SESSION = [];
session_destroy();
header("Location: index.php?pfad=login");
exit();
}
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["saveProfile"])) {
$oldEmail = $_SESSION["user_email"];
$newEmail = $_POST["email"] ?? "";
$vorname = $_POST["vorname"] ?? "";
$nachname = $_POST["nachname"] ?? "";
$password = $_POST["password"] ?? "";
$existingUser = $dao->findUser($newEmail);
if ($existingUser && $newEmail !== $oldEmail) {
$error = "Diese E-Mail-Adresse wird bereits verwendet.";
} else {
$updated = $dao->updateUser(
$oldEmail,
$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.";
}
}
}
$user = $dao->findUser($_SESSION["user_email"] ?? ""); $user = $dao->findUser($_SESSION["user_email"] ?? "");
$articleManager = ArticleManager::getInstance(); $articleManager = ArticleManager::getInstance();
@@ -23,12 +67,4 @@ try {
} catch (Exception $e) { } catch (Exception $e) {
$_SESSION["message"] = "internal_error"; $_SESSION["message"] = "internal_error";
exit(); exit();
}
if (!$user) {
$_SESSION = [];
session_destroy();
header("Location: index.php?pfad=login");
exit();
} }
+23
View File
@@ -56,6 +56,29 @@ class LocalUserDAO implements UserDAOInterface {
$this->saveUsers($users); $this->saveUsers($users);
} }
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) {
$users = $this->loadUsers();
foreach ($users as $i => $user) {
if ($user["email"] === $oldEmail) {
$users[$i]["email"] = $newEmail;
$users[$i]["vorname"] = $vorname;
$users[$i]["nachname"] = $nachname;
unset($users[$i]["username"]);
if (!empty($password)) {
$users[$i]["password"] = password_hash($password, PASSWORD_DEFAULT);
}
$this->saveUsers($users);
return true;
}
}
return false;
}
public function deleteUser($email) { public function deleteUser($email) {
$users = $this->loadUsers(); $users = $this->loadUsers();
+12
View File
@@ -27,6 +27,18 @@ interface UserDAOInterface {
*/ */
public function addUser($email, $vorname, $nachname, $password); public function addUser($email, $vorname, $nachname, $password);
/**
* 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
*/
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null);
/** /**
* Löscht einen Benutzer anhand seiner E-Mail-Adresse. * Löscht einen Benutzer anhand seiner E-Mail-Adresse.
* *