[RESOLU] Pseudo identique inscription

Eléphant du PHP | 283 Messages

10 oct. 2014, 16:07

Bonjour à tous,

Je viens de faire un formulaire d'inscription et il fonctionne bien mais je voudrais savoir comment faire pour vérifier si un pseudo existe déjà et si c'est le cas empêcher l'envoie du formulaire.
if($_POST['motdepasse'] == $_POST['motdepasseconfirm']) {
		if(!empty($_POST['pseudo']) && !empty($_POST['motdepasse']) && !empty($_POST['email'])) {
				$pseudo= $_POST['pseudo'];
				$email = $_POST['email'];
				$motdepasse = sha1($_POST['motdepasse']);
				$addcompte = $bdd->prepare("INSERT INTO `membres` VALUES ('', ?, ?, ?, ?)") or die(mysql_error());
				$addcompte->execute(array($pseudo, $motdepasse, $email, '1')) or die(mysql_error());
			echo '<p>Inscription réussie !</p>';
			}	
			else { echo '<p>Veuillez remplir tous les champs !</p>';}
				
	}
Merci d'avance à ceux qui pourront m'aider. ;)

ynx
Mammouth du PHP | 586 Messages

10 oct. 2014, 17:01

Salut,

Deux solutions possibles :
- soit tu modifies dans ta bdd le champ pseudo pour lui ajouter la contrainte UNIQUE, PDO te retourneras donc une erreur lors de l’exécution de la requête update avec un pseudo existant
- soit tu exécutes une première requête SELECT id FROM membres WHERE pseudo = ? et tu vérifies si celle-ci te retourne un résultat ou non pour déterminer l'existence du pseudo

Au passage, la fonction mysql_error() appartient à l'API Mysql et n'a rien à voir avec PDO. Si tu veux traiter les erreurs PDO, modifie ton code comme ceci :
if ($addcompte = $bdd->prepare("INSERT INTO `membres` VALUES ('', ?, ?, ?, ?)") === FALSE) {
    // erreur de syntaxe sql
    var_dump($addcompte->errorInfo());
}
if ($addcompte->execute(array($pseudo, $motdepasse, $email, '1')) === FALSE) {
    // erreur lors de l'execution de la requête
    var_dump($addcompte->errorInfo());
}
Bonne journée

Eléphant du PHP | 283 Messages

10 oct. 2014, 17:16

Salut,

Merci de ton aide ynx, j'ai changé mon index pour le champ pseudo en unique.

Par contre y a t-il moyen que ça affiche simplement un "Pseudo déjà utilisé" pour la personne qui s'inscrit ?

Parce que pour le moment ça m'affiche une page blanche quand j'envoie le formulaire.

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

11 oct. 2014, 01:25

salut,


soit tu attends que la requête ce vautre (second if) et c'est la que tu affiche ton mot de passe.
Soit tu fais un simple select count(1) from membres where pseudo = $pseudo

attention tu mélanges tout
or die(mysql_error()); ceci n'as rien a faire ici, tu utilise pdo pas l'extension mysql ;)

donc soit tu utilises la méthode de ynx soit un try / catch (voirun mixte des deux certaines méthodes ne lève pas forcément d’exception en cas d'erreur.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 283 Messages

11 oct. 2014, 12:54

D'accord, c'est bon merci. :)