Page 1 sur 1

Afficher les erreurs d'inscription

Posté : 11 avr. 2016, 11:57
par kikicomito
Bonjour,
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,

Re: Afficher les erreurs d'inscription

Posté : 11 avr. 2016, 12:36
par Ryle
Bonjour,

La syntaxe <?php= $error; ?> n'est pas bonne. Il faut soit utiliser "<?php echo ... ?>" soit utiliser les balises courtes "<?= ... ?>", mais comme il est préférable de ne plus utiliser ces dernières (parce que d'autres langages tels que le xml s'appuient également dessus et qu'on ne sait jamais si le serveur php où sera déployé le code les reconnaîtra ou non), il vaut mieux toujours utiliser la version longue <?php ?> et dès lors préciser le " echo $error; "

Re: Afficher les erreurs d'inscription

Posté : 11 avr. 2016, 13:09
par kikicomito
Re-bonjour,
Effectivement, c'était tout bête, et vous m'avez donné la solution, merci beaucoup. :D
Bonne journée à vous,
Cordialement.