138 lines
5.7 KiB
PHP
138 lines
5.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
session_start();
|
||
|
||
require_once __DIR__ . '/db.php';
|
||
|
||
use App\Database\Database;
|
||
use App\Database\LoginManager;
|
||
|
||
$errors = [];
|
||
$values = [
|
||
'login' => '',
|
||
'nom' => '',
|
||
'prenom' => '',
|
||
'mail' => '',
|
||
];
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||
$values['login'] = trim((string) filter_input(INPUT_POST, 'login', FILTER_SANITIZE_FULL_SPECIAL_CHARS));
|
||
$values['nom'] = trim((string) filter_input(INPUT_POST, 'nom', FILTER_SANITIZE_FULL_SPECIAL_CHARS));
|
||
$values['prenom'] = trim((string) filter_input(INPUT_POST, 'prenom', FILTER_SANITIZE_FULL_SPECIAL_CHARS));
|
||
$values['mail'] = trim((string) filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL));
|
||
$password = trim((string) ($_POST['password'] ?? ''));
|
||
$passwordConfirm = trim((string) ($_POST['password_confirm'] ?? ''));
|
||
|
||
if ($values['login'] === '') {
|
||
$errors[] = 'Le login est requis.';
|
||
}
|
||
|
||
if ($values['nom'] === '') {
|
||
$errors[] = 'Le nom est requis.';
|
||
}
|
||
|
||
if ($values['prenom'] === '') {
|
||
$errors[] = 'Le prénom est requis.';
|
||
}
|
||
|
||
if ($values['mail'] === '' || !filter_var($values['mail'], FILTER_VALIDATE_EMAIL)) {
|
||
$errors[] = 'Une adresse e-mail valide est requise.';
|
||
}
|
||
|
||
if ($password === '' || $passwordConfirm === '') {
|
||
$errors[] = 'Le mot de passe et la confirmation sont requis.';
|
||
} elseif ($password !== $passwordConfirm) {
|
||
$errors[] = 'Les mots de passe ne correspondent pas.';
|
||
} elseif (strlen($password) < 8) {
|
||
$errors[] = 'Le mot de passe doit contenir au moins 8 caractères.';
|
||
}
|
||
|
||
if (empty($errors)) {
|
||
try {
|
||
$database = new Database();
|
||
$loginManager = new LoginManager($database);
|
||
|
||
if ($loginManager->existsByLoginOrEmail($values['login'], $values['mail'])) {
|
||
$errors[] = 'Le login ou l’adresse e-mail existe déjà.';
|
||
} else {
|
||
$loginManager->create([
|
||
'login' => $values['login'],
|
||
'nom' => $values['nom'],
|
||
'prenom' => $values['prenom'],
|
||
'mail' => $values['mail'],
|
||
'pass' => $password,
|
||
]);
|
||
|
||
header('Location: ../index.php?registered=1');
|
||
exit;
|
||
}
|
||
} catch (Throwable $exception) {
|
||
$errors[] = 'Erreur interne : impossible de créer le compte.';
|
||
}
|
||
}
|
||
}
|
||
|
||
?>
|
||
|
||
<?php require_once __DIR__ . '/header.php'; ?>
|
||
|
||
<div class="login-container">
|
||
<div class="login-box">
|
||
<h2 class="login-title">Créer un compte</h2>
|
||
<p class="login-subtitle">Inscrivez-vous pour accéder à Giraud Finance.</p>
|
||
|
||
<?php if (!empty($errors)): ?>
|
||
<div class="alert alert-error">
|
||
<ul>
|
||
<?php foreach ($errors as $error): ?>
|
||
<li><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></li>
|
||
<?php endforeach; ?>
|
||
</ul>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<form action="register.php" method="POST" class="login-form">
|
||
<div class="form-group">
|
||
<label for="login" class="form-label">Login</label>
|
||
<input type="text" id="login" name="login" class="form-input" placeholder="Votre login" required autocomplete="username" value="<?php echo htmlspecialchars($values['login'], ENT_QUOTES, 'UTF-8'); ?>">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="nom" class="form-label">Nom</label>
|
||
<input type="text" id="nom" name="nom" class="form-input" placeholder="Votre nom" required value="<?php echo htmlspecialchars($values['nom'], ENT_QUOTES, 'UTF-8'); ?>">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="prenom" class="form-label">Prénom</label>
|
||
<input type="text" id="prenom" name="prenom" class="form-input" placeholder="Votre prénom" required value="<?php echo htmlspecialchars($values['prenom'], ENT_QUOTES, 'UTF-8'); ?>">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="mail" class="form-label">Adresse e-mail</label>
|
||
<input type="email" id="mail" name="mail" class="form-input" placeholder="exemple@email.com" required autocomplete="email" value="<?php echo htmlspecialchars($values['mail'], ENT_QUOTES, 'UTF-8'); ?>">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="password" class="form-label">Mot de passe</label>
|
||
<input type="password" id="password" name="password" class="form-input" placeholder="••••••••" required autocomplete="new-password">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="password_confirm" class="form-label">Confirmer le mot de passe</label>
|
||
<input type="password" id="password_confirm" name="password_confirm" class="form-input" placeholder="••••••••" required autocomplete="new-password">
|
||
</div>
|
||
|
||
<button type="submit" class="btn-submit">S’inscrire</button>
|
||
</form>
|
||
|
||
<div class="login-footer">
|
||
<span class="separator">•</span>
|
||
<a href="../index.php" class="signup-link">Retour à la connexion</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<?php require_once __DIR__ . '/footer.php'; ?>
|