Files
deskhub/DeskHub-Webseite/register.php
T
2026-10-19 18:05:53 +00:00

84 lines
3.8 KiB
PHP

<?php
require_once __DIR__ . '/includes/bootstrap.php';
if (current_user()) {
redirect('/home.php');
}
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
check_honeypot();
if (!rate_limit_check('register', client_ip(), 5, 60)) {
$errors[] = 'Zu viele Registrierungsversuche. Bitte warten Sie eine Stunde.';
} else {
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$pass = $_POST['password'] ?? '';
$pass2 = $_POST['password2'] ?? '';
if ($name === '') $errors[] = 'Bitte geben Sie Ihren Namen an.';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
$pwError = validate_password_strength($pass);
if ($pwError) $errors[] = $pwError;
if ($pass !== $pass2) $errors[] = 'Die Passwörter stimmen nicht überein.';
if (!$errors) {
$pdo = get_db();
$stmt = $pdo->prepare('SELECT id FROM users WHERE LOWER(email) = LOWER(?)');
$stmt->execute([$email]);
if ($stmt->fetch()) {
$errors[] = 'Für diese E-Mail-Adresse existiert bereits ein Konto.';
} else {
$stmt = $pdo->prepare('INSERT INTO users (name, email, password_hash, created_at) VALUES (?,?,?,?)');
$stmt->execute([$name, $email, password_hash($pass, PASSWORD_DEFAULT), db_now()]);
$user = ['id' => $pdo->lastInsertId(), 'name' => $name, 'email' => $email];
customer_login($user);
flash('success', 'Willkommen! Ihr Konto wurde erstellt.');
redirect('/home.php');
}
}
} // end else
} // end POST
$pageTitle = 'Konto erstellen';
$activePage = 'register';
require __DIR__ . '/includes/header_customer.php';
?>
<style>.page-content{padding:0!important;margin:0!important}</style>
</div><!-- page-content -->
<?php $__banner = get_setting('banner_path'); ?>
<div class="auth-wrap<?= $__banner ? ' has-image' : '' ?>"<?= $__banner ? ' style="background-image:url(' . e($__banner) . ')"' : '' ?>>
<div class="auth-card">
<?php require __DIR__ . '/includes/brand_block.php'; ?>
<h1>Konto erstellen</h1>
<div class="sub">Erstellen Sie ein Kundenkonto, um Tickets zu verfolgen.</div>
<?php foreach ($errors as $err): ?>
<div class="flash error"><?= e($err) ?></div>
<?php endforeach; ?>
<form method="post">
<?= csrf_field() ?>
<div style="position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden" aria-hidden="true">
<input type="text" name="hp_website" tabindex="-1" autocomplete="off" value="">
</div>
<label for="name">Name</label>
<input type="text" id="name" name="name" value="<?= e($_POST['name'] ?? '') ?>" required>
<label for="email">E-Mail-Adresse</label>
<input type="email" id="email" name="email" value="<?= e($_POST['email'] ?? '') ?>" required>
<label for="password">Passwort</label>
<input type="password" id="password" name="password" required minlength="10"
placeholder="mind. 10 Zeichen, Groß-/Klein, Ziffer, Sonderzeichen">
<p style="font-size:.75rem;color:var(--muted);margin:4px 0 0">Mindestens 10 Zeichen mit Groß- und Kleinbuchstaben, einer Ziffer und einem Sonderzeichen.</p>
<label for="password2">Passwort wiederholen</label>
<input type="password" id="password2" name="password2" required>
<div class="btn-row">
<button type="submit" class="btn">Konto erstellen</button>
</div>
</form>
<p style="margin-top:18px;font-size:.85rem">Bereits registriert? <a href="/login.php">Jetzt anmelden</a></p>
</div>
</div>
<footer class="public-footer">Copyright &copy; <?= date('Y') ?> <?= e(get_setting('display_name', config()['site']['name'])) ?> &ndash; Alle Rechte vorbehalten.</footer>