Connexion + vérif mail valide ?
Résolu/Fermé
A voir également:
- Connexion + vérif mail valide ?
- Ethernet n'a pas de configuration ip valide - Guide
- Gmail connexion - Guide
- Yahoo mail - Accueil - Mail
- Gmail connexion autre compte - Guide
- Hotmail connexion - Guide
3 réponses
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
Modifié par jordane45 le 19/11/2016 à 22:29
Modifié par jordane45 le 19/11/2016 à 22:29
Bonjour,
Il te suffit d'ajouter une condition dans ton where pour vérifier que le champ mail est à 1 ou non.
Sans connaitre la structure de tes tables, il sera difficile de t'en dire plus.
NB : Concernant ton code, il y a quelques petites choses à améliorer :
pense à activer les erreurs PDO (en cas de soucis dans tes requêtes.)
Il faudra également, pour que ça fonctionne... placer tes requêtes dans des blocs TRY/Catch
Tout est expliqué là : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Prends aussi l'habitude de récupérer "proprement" tes variables AVANT de les utiliser
Voir ici comment faire :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
Pour finir, evite d'utiliser RowCount.
Car comme indiqué dans le manuel php :
A la place, il est préférable de faire un fetchAll sur le résultat de ta requête puis un COUNT dessus
Un truc du genre :
NB² : les fonctions htmlspecialchars sont utilisées lors de l'affichage.... pas pour stocker en BDD ni pour les requêtes.
Cordialement,
Jordane
Il te suffit d'ajouter une condition dans ton where pour vérifier que le champ mail est à 1 ou non.
Sans connaitre la structure de tes tables, il sera difficile de t'en dire plus.
NB : Concernant ton code, il y a quelques petites choses à améliorer :
pense à activer les erreurs PDO (en cas de soucis dans tes requêtes.)
Il faudra également, pour que ça fonctionne... placer tes requêtes dans des blocs TRY/Catch
Tout est expliqué là : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Prends aussi l'habitude de récupérer "proprement" tes variables AVANT de les utiliser
Voir ici comment faire :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
Pour finir, evite d'utiliser RowCount.
Car comme indiqué dans le manuel php :
PDOStatement::rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant.
Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.
A la place, il est préférable de faire un fetchAll sur le résultat de ta requête puis un COUNT dessus
Un truc du genre :
$sql = "SELECT * FROM membres WHERE pseudo = ? AND pass = ?"; $datas = array($pseudoconnect, $passconnect); try{ $requser = $bdd->prepare($sql); $requser->execute($datas); //on stocke le resultat dans un array $result = $requser->fetchAll(); }catch(Exception $e){ // en cas d'erreur echo " Erreur ! ".$e->getMessage(); } // si $result n'est pas vide, on compte le nombre de résultat, sinon on lui affecte la valeur NULL $userexist = !empty( $result) ? count( $result) : NULL; // ... le reste de ton code
NB² : les fonctions htmlspecialchars sont utilisées lors de l'affichage.... pas pour stocker en BDD ni pour les requêtes.
Cordialement,
Jordane
Utilisateur anonyme
Modifié par Amnexia le 22/11/2016 à 14:48
Modifié par Amnexia le 22/11/2016 à 14:48
Hey, salut merci pour ta réponse,
c'est une bonne idée de rajouter une condition dans le WHERE mais le problème c'est que la même erreur s'affiche si on entre les mauvais login et si on oublie de validé le mail.
ça serait possible de tester avec une requête le mail après avoir tester le mot de passe et le pseudo ?
Pour le reste du code je préfère ne pas toucher je suis un peu perdu avec ton fetchAll et ton count x)
PS : j'ai déjà activer les erreurs avancée php pour pouvoir configurer mon site correctement.
c'est une bonne idée de rajouter une condition dans le WHERE mais le problème c'est que la même erreur s'affiche si on entre les mauvais login et si on oublie de validé le mail.
ça serait possible de tester avec une requête le mail après avoir tester le mot de passe et le pseudo ?
Pour le reste du code je préfère ne pas toucher je suis un peu perdu avec ton fetchAll et ton count x)
PS : j'ai déjà activer les erreurs avancée php pour pouvoir configurer mon site correctement.
Utilisateur anonyme
11 déc. 2016 à 00:00
11 déc. 2016 à 00:00
Je réponds au sujet car j'ai trouver la réponse moi même à ma demande, merci quand même pour l'aide.
if(isset($_POST['form_connexion'])) { $pseudoconnect = htmlspecialchars($_POST['pseudoconnect']); $passconnect = hash("sha512",($_POST['passconnect'])); $banconnect = $_GET['banconnect']; $confirmeconnect = $_GET['confirmeconnect']; if(!empty($pseudoconnect) AND !empty($pseudoconnect)) { $requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");// confirme = 1 = email confirmer || ban = 0 = non bannis \\ $requser->execute(array($pseudoconnect, $passconnect)); $userexist = $requser->rowCount(); if($userexist == 1) { $requser = $bdd->prepare("SELECT * FROM membres WHERE confirme = 1");// confirme = 1 = email confirmer || ban = 0 = non bannis \\ $requser->execute(array($confirmeconnect)); $userexist = $requser->rowCount(); if($userexist == 1) { $requser = $bdd->prepare("SELECT * FROM membres WHERE ban = 0");// confirme = 1 = email confirmer || ban = 0 = non bannis \\ $requser->execute(array($banconnect)); $userexist = $requser->rowCount(); if($userexist == 1) { $userinfo = $requser->fetch(); $_SESSION['id'] = $userinfo['id']; $_SESSION['pseudo'] = $userinfo['pseudo']; $_SESSION['mail'] = $userinfo['mail']; header("Location: profil.php?id=".$_SESSION['id']); } else { $erreur = "Votre compte à été bannis !"; } } else { $erreur = "L'email n'a pas été validé !"; } } else { $erreur = "Mauvais identifiant inscrit !"; } } else { $erreur = "Tous les champs doivent être complétés !"; } }
Edit : quelque erreur dans mon code.
if(isset($_POST['form_connexion'])) { $pseudoconnect = htmlspecialchars($_POST['pseudoconnect']); $passconnect = hash("sha512",($_POST['passconnect'])); $banconnect = htmlspecialchars($_GET['banconnect']); $confirmeconnect = htmlspecialchars($_GET['confirmeconnect']); if(!empty($pseudoconnect) AND !empty($pseudoconnect)) { $requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?"); $requser->execute(array($pseudoconnect, $passconnect)); $userexist = $requser->rowCount(); if($userexist == 1) { $requser2 = $bdd->prepare("SELECT * FROM membres WHERE confirme = ?");// confirme = 1 = email confirmer \\ $requser2->execute(array($confirmeconnect)); $userexist2 = $requser2->rowCount(); if($userexist2 == 1) { $requser3 = $bdd->prepare("SELECT * FROM membres WHERE ban = ?");// ban = 0 = non bannis \\ $requser3->execute(array($banconnect)); $userexist3 = $requser3->rowCount(); if($userexist3 == 0) { $userinfo = $requser->fetch(); $_SESSION['id'] = $userinfo['id']; $_SESSION['pseudo'] = $userinfo['pseudo']; $_SESSION['mail'] = $userinfo['mail']; header("Location: profil.php?id=".$_SESSION['id']); } else { $erreur = "Votre compte à été bannis !"; } } else { $erreur = "L'email n'a pas été validé !"; } } else { $erreur = "Mauvais identifiant inscrit !"; } } else { $erreur = "Tous les champs doivent être complétés !"; } }