39773-vm/register.php
2026-04-22 14:26:14 +00:00

110 lines
4.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/app.php';
app_boot();
if (current_user()) {
redirect('index.php');
}
$errors = [];
if (is_post()) {
verify_csrf();
$firstName = trim((string) ($_POST['first_name'] ?? ''));
$lastName = trim((string) ($_POST['last_name'] ?? ''));
$email = strtolower(trim((string) ($_POST['email'] ?? '')));
$password = (string) ($_POST['password'] ?? '');
$confirm = (string) ($_POST['password_confirm'] ?? '');
if ($firstName === '') {
$errors[] = 'Le prénom est obligatoire.';
}
if ($lastName === '') {
$errors[] = 'Le nom est obligatoire.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Veuillez saisir une adresse email valide.';
}
if (!password_rules_ok($password)) {
$errors[] = 'Le mot de passe doit contenir au moins 8 caractères.';
}
if ($password !== $confirm) {
$errors[] = 'La confirmation du mot de passe ne correspond pas.';
}
if (!$errors) {
$check = db()->prepare('SELECT id FROM users WHERE email = :email LIMIT 1');
$check->execute(['email' => $email]);
if ($check->fetch()) {
$errors[] = 'Un compte existe déjà avec cet email.';
}
}
if (!$errors) {
$stmt = db()->prepare('INSERT INTO users (first_name, last_name, email, password_hash) VALUES (:first_name, :last_name, :email, :password_hash)');
$stmt->execute([
'first_name' => $firstName,
'last_name' => $lastName,
'email' => $email,
'password_hash' => password_hash($password, PASSWORD_BCRYPT),
]);
$userId = (int) db()->lastInsertId();
login_user(['id' => $userId]);
set_flash('success', 'Compte créé avec succès. Bienvenue sur RJLRESAKA.');
redirect('index.php');
}
}
render_header('Inscription', ['description' => 'Créer un compte pour gérer les sportifs et clubs dans RJLRESAKA.']);
?>
<main class="container py-5 auth-wrap">
<div class="row justify-content-center">
<div class="col-lg-6 col-xl-5">
<div class="panel-card p-4 p-lg-5">
<p class="section-kicker mb-1">Créer un compte</p>
<h1 class="h3 mb-3">Ouvrir lespace de gestion</h1>
<p class="text-secondary mb-4">Commencez avec un compte sécurisé pour enregistrer vos premiers sportifs.</p>
<?php if ($errors): ?>
<div class="alert alert-danger" role="alert">
<ul class="mb-0 ps-3">
<?php foreach ($errors as $error): ?>
<li><?= e($error) ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="post" class="vstack gap-3">
<input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label" for="first_name">Prénom</label>
<input class="form-control" id="first_name" name="first_name" value="<?= old('first_name') ?>" required>
</div>
<div class="col-md-6">
<label class="form-label" for="last_name">Nom</label>
<input class="form-control" id="last_name" name="last_name" value="<?= old('last_name') ?>" required>
</div>
</div>
<div>
<label class="form-label" for="email">Email</label>
<input class="form-control" id="email" type="email" name="email" value="<?= old('email') ?>" required>
</div>
<div>
<label class="form-label" for="password">Mot de passe</label>
<input class="form-control" id="password" type="password" name="password" minlength="8" required>
</div>
<div>
<label class="form-label" for="password_confirm">Confirmation du mot de passe</label>
<input class="form-control" id="password_confirm" type="password" name="password_confirm" minlength="8" required>
</div>
<button class="btn btn-dark w-100" type="submit">Créer mon compte</button>
</form>
<p class="text-secondary small mt-3 mb-0">Déjà inscrit ? <a href="login.php" class="link-dark">Connectez-vous</a>.</p>
</div>
</div>
</div>
</main>
<?php render_footer(); ?>