[RESOLU] comment ajouter une vérification pour savoir si le pseudo est déjà présent dans la base de donnée

Mammouth du PHP | 506 Messages

11 juil. 2021, 12:56

bonjour a tous
j ai un traitement pour l inscription des nouveaux membres
mais j aurais souhaiter ajouter une vérification supplémentaire
afin de savoir si l utilisateur existe déjà
comment je pourrais m y prendre
merci de l aide

Code : Tout sélectionner

<?php session_start(); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ?> <?php require_once 'base.php'; if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = htmlspecialchars($_POST['pseudo']); $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); $password_retype = htmlspecialchars($_POST['password_retype']); $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'); $check->execute(array( $email )); $data = $check->fetch(); $row = $check->rowCount(); if ($row == 0) { if (strlen($pseudo) <= 100) { if (strlen($email) <= 100) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($password == $password_retype) { $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; $insert = $bdd->prepare('INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'); $insert->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)) )); header('Location:redirection-inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); } }

Mammouth du PHP | 2703 Messages

11 juil. 2021, 13:38

ce code vérifie qu'il n'y a pas déjà un email. il suffit de faire pareil avec le pseudo.

Mammouth du PHP | 506 Messages

11 juil. 2021, 14:33

merci pour la reponse
je dois modifier cette partie

Code : Tout sélectionner

$check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'); $check->execute(array($email));

Mammouth du PHP | 506 Messages

11 juil. 2021, 14:53

je viens d essayer de cette maniere mais cela ne fonctionne pas

Code : Tout sélectionner

<?php session_start(); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ?> <?php require_once 'base.php'; if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = htmlspecialchars($_POST['pseudo']); $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); $password_retype = htmlspecialchars($_POST['password_retype']); //préparation de la requête et des variables $sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email, pseudo = ?, ?"; $datas = array($email,$pseudo); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $data = $requete->fetch(); $row = $requete->rowCount(); if ($row == 0) { if (strlen($pseudo) <= 100) { if (strlen($email) <= 100) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($password == $password_retype) { $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; $insert = $bdd->prepare('INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'); $insert->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)) )); header('Location:redirection-inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); } }

Avatar du membre
Eléphant du PHP | 70 Messages

13 juil. 2021, 08:56

Bonjour,

La syntaxe n'est pas bonne
$sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email, pseudo = ?, ?";
Utilise un AND (ou OR en fonction du besoin) pour spécifier plusieurs paramètres dans le WHERE
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 506 Messages

13 juil. 2021, 16:33

Shadowwera bonjour
merci pour la réponse et cela est réglé avec un AND

Mammouth du PHP | 2703 Messages

13 juil. 2021, 17:45

cela est réglé avec un AND
ça fonctionne avec un email identique mais un pseudo différent ? avec un pseudo existant mais pas l'email ?
cela permet d'afficher un message d'erreur disant si c'est le pseudo ou l'email qui est déjà utilisé ?

Mammouth du PHP | 506 Messages

13 juil. 2021, 20:25

en fait cela fonctionne avec l adresse email et ou le pseudo
car j ai tout modifie le code