J'ai un problème concernant le script d'inscription sur un de mes sites.
Effectivement, lorsque je souhaite m'inscrire, et que tout est bon, l'inscription se passe correctement.
Lorsqu'un champ n'est pas compatible à cause d'une erreur (nom ou email déjà utilisé ou mots de passe non identiques), l'inscription ne s'effectue pas.
Jusque là, tout va bien.
Le problème, justement c'est lorsqu'elle ne s'effectue pas, elle est censée m'afficher les erreurs qui ont empêché l'inscription.
Par exemple, lorsque l'inscription comporte 2 erreurs, la page m'affiche 2 lignes à puces au dessus de mon formulaire mais il n'y a rien dans ses lignes, juste les puces.
Voilà, j'aimerai savoir ce qui est mauvais dans mon code que voici :
<?php
require_once 'database.php';
if(!empty($_POST)){
$errors = array();
if(empty($_POST['pseudo']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['pseudo'])){
$errors['username'] = "Vous devez entrer un pseudo valide";
}else{
$req = $pdo->prepare('SELECT id FROM membres where pseudo = ?');
$req->execute([$_POST['pseudo']]);
$user = $req->fetch();
if($user){
$errors['username'] = "Ce pseudo est deja pris";
}
}
if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
$errors['email'] = "Vous devez entrer une adresse email valide";
}else{
$req=$pdo->prepare('SELECT id FROM membres WHERE email = :email');
$req->execute(['email' => $_POST['email']]);
$email = $req->fetch();
if($email){
$errors['email'] = "Cet email est deja utilise pour un compte";
}
}
if(empty($_POST['pass']) || $_POST['pass'] != $_POST['pass2']){
$errors['password'] = "Vos mots de passes ne sont pas valides";
}
$date = date("d.m.y");
if(empty($errors)){
$password = password_hash($_POST['pass'], PASSWORD_BCRYPT);
$req = $pdo->prepare("INSERT INTO membres (pseudo, pass, email, date_inscription) VALUES ('".$_POST['pseudo']."', '".$password."', '".$_POST['email']."', '".$date."')");
$req->execute();
$user_id = $pdo->lastInsertId();
header('location: index.php');
exit();
}
}
?>
<html>
[...]
<?php if(!empty($errors)): ?>
<div>
<p> Vous n avez pas rempli le formulaire correctement. </p>
<?php
foreach($errors as $error): ?>
<li><?php= $error; ?></li>
<?php endforeach; ?>
</div>
<?php endif; ?>
<form class="formulaire" action="" method="post">
<p>
<label for="pseudo">Pseudo :</label><input type="text" name="pseudo" id="pseudo" required/><br />
<label for="pseudo">Mot de passe :</label><input type="password" name="pass" id="pass" required/><br />
<label for="pseudo">Confirmer :</label><input type="password" name="pass2" id="pass" required/><br />
<label for="pseudo">Email</label><input type="text" name="email" id="email" required/><br />
<input type="submit" value="Envoyer" />
</p>
</form>
</html>
Cordialement,