[RESOLU] Afficher les erreurs d'inscription

Petit nouveau ! | 2 Messages

11 avr. 2016, 11:57

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,

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 avr. 2016, 12:36

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; "
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

11 avr. 2016, 13:09

Re-bonjour,
Effectivement, c'était tout bête, et vous m'avez donné la solution, merci beaucoup. :D
Bonne journée à vous,
Cordialement.