Impossible de vérifier si l'email existe déjà
Fermé
bouboualba
Messages postés
1
Date d'inscription
mercredi 5 septembre 2018
Statut
Membre
Dernière intervention
5 septembre 2018
-
Modifié le 5 sept. 2018 à 21:07
jordane45 Messages postés 38410 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 février 2025 - 5 sept. 2018 à 21:29
jordane45 Messages postés 38410 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 février 2025 - 5 sept. 2018 à 21:29
A voir également:
- Impossible de vérifier si l'email existe déjà
- Verifier un lien - Guide
- Vérifier si mot de passe piraté - Guide
- Comment creer un compte email - Guide
- Vérifier si une phrase est correcte - Accueil - Google
- Verifier compatibilite windows 11 - Guide
1 réponse
jordane45
Messages postés
38410
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 février 2025
4 733
5 sept. 2018 à 21:29
5 sept. 2018 à 21:29
Bonjour,
Plusieurs choses ne vont pas dans ton code.
Déjà.. il faut activer la gestion des erreurs PDO et de PHP
Ensuite, RowCount ne s'utilise pas (en pdo) sur une requête SELECT.
De plus, on place le code de connexion dans un fichier à part qu'on a juste à inclure dans les pages où on en a besoin.... au lieu de le réécrire (au risque de se tromper) dans chaque page.
Voici ton code corrigé
Fichier de connexion à la bdd :
Ton fichier :
Je t'invite au passage à lire et à appliquer TOUT ce qui se trouve dans les liens suivants:
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ainsi qu'une explication pour poster correctement ton code à l'avenir :
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Pour finir... on ne stocke JAMAIS les password en clair dans la BDD.
On va les "hasher"....
Pour se faire, on va utiliser les fonctions de php : password_hash() et pour le vérifier : password_verify()
http://php.net/manual/fr/function.password-hash.php
https://www.php.net/manual/fr/function.password-verify.php
et quand tu voudras vérifier si l'utilisateur peut se connecter un truc du genre :
Plusieurs choses ne vont pas dans ton code.
Déjà.. il faut activer la gestion des erreurs PDO et de PHP
Ensuite, RowCount ne s'utilise pas (en pdo) sur une requête SELECT.
De plus, on place le code de connexion dans un fichier à part qu'on a juste à inclure dans les pages où on en a besoin.... au lieu de le réécrire (au risque de se tromper) dans chaque page.
Voici ton code corrigé
Fichier de connexion à la bdd :
<?php //fichier cnxBdd.php try{ $bdd =new PDO('mysql:host=localhost;dbname=test3; charset=utf8', 'root', 'root'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Ton fichier :
<?php //--------------------------------------------------------// //Activation de l'affichage des erreurs PHP //--------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //--------------------------------------------------------// //connexion à la bdd et activation de la gestion des erreurs PDO //--------------------------------------------------------// require_once "cnxBdd.php"; //--------------------------------------------------------// //récupération PROPRE des variables AVANT de les utiliser //--------------------------------------------------------// $mail = !empty($_POST['mail']) ? $_POST['mail'] : NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL; $mdp2 = !empty($_POST['mdp2']) ? $_POST['mdp2'] : NULL; if(isset($_POST['bouton'])){ if($mail && $mdp && $mdp2){ if(strlen($mail)<=20){ try{ $reqmail=$bdd->prepare("SELECT * FROM tables WHERE email = ?)"); $reqmail->execute(array($mail)); $result = $reqmail->fetchAll(); //on stocke le resultat dans un array $mailexist = !empty($result) ? true : false; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } if(!$mailexist) { if($mdp==$mdp2) { try{ $insertmbr=$bdd->prepare("INSERT INTO tables(email,mdp)VALUES(?,?)"); if( $insertmbr->execute(array($mail,$mdp))){ header('location:verif.php'); exit(); } }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } } else { echo"vos mot de passe ne correspondent pas"; } } else { echo"votre mail existe deja"; } } else { echo"votre email depasse les 20 caractere"; } } else { echo"veuillez remplir tous le formulaire"; } } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Utiliser des API</title> </head> <body> <form method="post" action=""> <input type="email" name="mail" placeholder="votre email" value="<?php echo $mail;?>" /> <br /> <input type="password" name="mdp" placeholder="votre mot de passe" value="<?php echo $mdp;?>" /> <br /> <input type="password" name="mdp2" placeholder="confirmer mdp" value="<?php echo $mdp2;?>" /> <br /> <input type="submit" name="bouton" value="s'inscrire" /> </form> </body> </html>
Je t'invite au passage à lire et à appliquer TOUT ce qui se trouve dans les liens suivants:
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ainsi qu'une explication pour poster correctement ton code à l'avenir :
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Pour finir... on ne stocke JAMAIS les password en clair dans la BDD.
On va les "hasher"....
Pour se faire, on va utiliser les fonctions de php : password_hash() et pour le vérifier : password_verify()
http://php.net/manual/fr/function.password-hash.php
https://www.php.net/manual/fr/function.password-verify.php
try{ $password = password_hash($mdp, PASSWORD_DEFAULT); $insertmbr=$bdd->prepare("INSERT INTO tables(email,mdp)VALUES(?,?)"); if( $insertmbr->execute(array($mail,$password))){ header('location:verif.php'); exit(); } }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); }
et quand tu voudras vérifier si l'utilisateur peut se connecter un truc du genre :
$sql = "SELECT mdp FROM tables WHERE email = ?"; $datas = array($mail); try{ $prep = $bdd->prepare($sql); $prep->execute($datas); $result = $reqmail->fetch(); $mdp_frombdd = !empty($result) ? $result['mdp'] : NULL; if(password_verify($mdp, $mdp_frombdd){ echo "Password valide."; } }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }