110 lines
4.7 KiB
PHP
110 lines
4.7 KiB
PHP
<?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 l’espace 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(); ?>
|