Files
bolsa/php/register.php
T

138 lines
5.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);
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 ladresse 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">Sinscrire</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'; ?>