Creer un formulaire de login
Ferméjordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 - 19 mars 2023 à 10:47
- Creer un formulaire de login
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
- Créer un lien pour partager des photos - Guide
2 réponses
19 mars 2023 à 05:23
D'après le code que vous avez fourni, il semble que le problème se situe au niveau de la ligne suivante :
$result->fetch(); if ($result) {
Vous appelez la fetch()
méthode de la $result
variable, mais vous ne stockez son résultat nulle part. De plus, la if ($result)
condition sera toujours vraie, même si la requête ne renvoie aucune ligne, car $result
sera toujours un objet de type PDOStatement
.
Au lieu de cela, vous devriez vérifier si la $result->fetch()
méthode renvoie une ligne de la base de données, comme ceci :
$row = $result->fetch(); if ($row) { // stocker les variables de session et rediriger vers index.php } else { echo "Votre mot de passe ou login est incorrect"; }
17 mars 2023 à 14:01
Bonjour,
Commence par appliquer ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et pense bien à mettre en commentaire la redirection dans ton code pour pouvoir voir les éventuelles erreurs.
Modifié le 19 mars 2023 à 10:48
A noter également qu'on ne stocke jamais un mot de passe en clair dans la bdd.
Il faut le hasher ... ( "crypter" )
Pour ça, php fourni la fonction password_hash (que tu trouveras sans mal sur internet)
Et donc, une fois le mot de passe protégé en bdd, ton code pourra ressembler à ça :
<?php //démarrage Session session_start(); //affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à la bdd ET activation des erreurs PDO try{ $bdd =new PDO('mysql:host=localhost;dbname=trainees_db; charset=utf8', '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()); } // Récupération PROPRE des variables AVANT de les utiliser $login = !empty($_POST['login']) ? trim($_POST['login']) : NULL; $password = !empty($_POST['password']) ? trim($_POST['password']) : NULL; //traitement .. if($login){ //préparation de la requête et des variables $sql = "SELECT * FROM infos_persos WHERE Login = :login"; $datas = array(':login'=>$login); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $resultat = $requete->fetch(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } if (!$resultat){ echo 'login inconnu !'; }else{ // Comparaison du pass envoyé via le formulaire avec la base $isPasswordCorrect = password_verify($password, $resultat['Password']); if ($isPasswordCorrect){ $_SESSION['user_name'] = $login; $_SESSION['password'] = $password; $_SESSION['id'] = $resultat['id']; header("Location: index.php"); exit; }else{ echo 'Mauvais identifiant ou mot de passe !'; } } }else{ echo "Merci de renseigner un login !"; }