Code php "SESSION UTILISATEUR" ne fonctionne pas
Résolu
Zeropoint
-
Zeropoint -
Zeropoint -
A voir également:
- Code php "SESSION UTILISATEUR" ne fonctionne pas
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
2 réponses
Ton code est sacrément bordelique... :-)
Tu répètes plusieurs fois les mêmes bouts de code...
On ne sait plus où on se trouve ni à quoi ils servent...
Je te propose un truc du genre :
NB: Tu noteras que je te mets le code avec la coloration syntaxique... (la couleur...)
C'est quand même plus lisible....
Il serait temps que tu le fasses aussi !
Infos ici: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Il serait bien aussi que tu lises (et appliques ) le contenu des deux liens suivants :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Tu répètes plusieurs fois les mêmes bouts de code...
On ne sait plus où on se trouve ni à quoi ils servent...
Je te propose un truc du genre :
<?php //démarrage des sessions session_start(); //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //récupération PROPRE des variables AVANT de les utiliser ! $name = !empty($_SESSION['name']) ? $_SESSION['name'] : NULL; $login = !empty($_POST['login']) ? $_POST['login'] : NULL; $password = !empty($_POST['password']) ? $_POST['password'] : NULL; $logout = !empty($_GET['logout']) && $_GET['logout']==true ? $_GET['logout'] : NULL; //je te laisse compléter le traitement du logout si nécéssaire... if($logout){ session_destroy(); //... } //---------------------------// //début du traitement //---------------------------// if($name){ //si utilisateur déjà logué.. include de la page welcome and logout ?> <aside> <fieldset> <legend> Interface Admin </legend> <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $name; ?> </span>!</p> <p>-> <a href="?logout=true" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p> </fieldset> <?php }else{ //sinon.. affichage gestion de la connexion si un login et un password sont envoyés en POST... if($login && $password){ //on prépare les données de la requête $datas = array('login' => $login); $sql = 'SELECT * FROM admin WHERE login = :login'; //on place CHAQUE requête dans un bloc TRY/CATCH pour trapper les éventuelles erreurs ! try{ $query = $db->prepare($sql); $query->execute($datas); $return = $query->fetch(); }catch(Exception $e){ echo "Erreur dans la requête " . $sql . " <br> Erreur : ". $e->getMessage(); } $userExist = !empty($return) ? true : false; if($userExist){ $isPasswordCorrect = password_verify($password, $return['password']); if($isPasswordCorrect){ //utilisateur authentifié.. on rempli les variables de session $_SESSION['name'] = !empty($return['name']) ? $return['name'] : NULL; $_SESSION['id'] = !empty($return['id']) ? $return['id'] : NULL; $_SESSION['login'] = !empty($return['login']) ? $return['login'] : NULL; }else{ //Mauvais password ! // tu peux mettre un message si tu le souhaites //... echo "<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>"; } }else{ //user inconnu ! // tu peux mettre un message si tu le souhaites //... echo "<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>"; } } ?> <!-- Connexion admin --> <form method="post" action=""> <fieldset> <legend> Interface Admin </legend> <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required /> <br /><br /> <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br /> <input type="submit" value="Connexion" id="submit" name="submit" /> </fieldset> </form> <?php } ?> </aside>
NB: Tu noteras que je te mets le code avec la coloration syntaxique... (la couleur...)
C'est quand même plus lisible....
Il serait temps que tu le fasses aussi !
Infos ici: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Il serait bien aussi que tu lises (et appliques ) le contenu des deux liens suivants :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Merci pour l'aide. Ton code par contre me renvoie une erreur au niveau des guillemets.
J'ai donc arrangé:
Il reste tout de même l'erreur:
Notice: Undefined index: name in /Applications/MAMP/htdocs/test.php on line 43.
}else{ //Mauvais password ! // tu peux mettre un message si tu le souhaites //... echo "<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>"; } }else{ //user inconnu ! // tu peux mettre un message si tu le souhaites //... echo "<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>"; }
J'ai donc arrangé:
}else{ //Mauvais password ! // tu peux mettre un message si tu le souhaites //... echo '<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>'; } }else{ //user inconnu ! // tu peux mettre un message si tu le souhaites //... echo '<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>'; }
Il reste tout de même l'erreur:
Notice: Undefined index: name in /Applications/MAMP/htdocs/test.php on line 43.
<fieldset> <legend> Interface Admin </legend> <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $_SESSION['name']; ?> </span>!</p> <p>-> <a href="?logout=true" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p> </fieldset>
Le seul problème est le mot de passe considéré comme incorrect.
C'est à dire je rentre les bonnes coordonnées mais la session ne s'ouvre pas.
J'ai une réponse: mot de passe incorrect.
C'est à dire je rentre les bonnes coordonnées mais la session ne s'ouvre pas.
J'ai une réponse: mot de passe incorrect.
<?php try { $db = new PDO('mysql:host=localhost; dbname=web','root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } //démarrage des sessions session_start(); //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //récupération PROPRE des variables AVANT de les utiliser ! $name = !empty($_SESSION['name']) ? $_SESSION['name'] : NULL; $login = !empty($_POST['login']) ? $_POST['login'] : NULL; $password = !empty($_POST['password']) ? $_POST['password'] : NULL; $logout = !empty($_GET['logout']) && $_GET['logout']==true ? $_GET['logout'] : NULL; //je te laisse compléter le traitement du logout si nécéssaire... if($logout){ session_destroy(); //... } //---------------------------// //début du traitement //---------------------------// if($name){ //si utilisateur déjà logué.. include de la page welcome and logout ?> <aside> <fieldset> <legend> Interface Admin </legend> <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $name; ?> </span>!</p> <p>-> <a href="?logout=true" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p> </fieldset> <?php }else{ //sinon.. affichage gestion de la connexion si un login et un password sont envoyés en POST... if($login && $password){ //on prépare les données de la requête $datas = array('login' => $login); $sql = 'SELECT * FROM admin WHERE login = :login'; //on place CHAQUE requête dans un bloc TRY/CATCH pour trapper les éventuelles erreurs ! try{ $query = $db->prepare($sql); $query->execute($datas); $return = $query->fetch(); }catch(Exception $e){ echo "Erreur dans la requête " . $sql . " <br> Erreur : ". $e->getMessage(); } $userExist = !empty($return) ? true : false; if($userExist){ $isPasswordCorrect = password_verify($password, $return['password']); if($isPasswordCorrect){ //utilisateur authentifié.. on rempli les variables de session $_SESSION['name'] = !empty($return['name']) ? $return['name'] : NULL; $_SESSION['id'] = !empty($return['id']) ? $return['id'] : NULL; $_SESSION['login'] = !empty($return['login']) ? $return['login'] : NULL; }else{ //Mauvais password ! // tu peux mettre un message si tu le souhaites //... echo '<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>'; } }else{ //user inconnu ! // tu peux mettre un message si tu le souhaites //... echo '<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>'; } } ?> <!-- Connexion admin --> <form method="post" action=""> <fieldset> <legend> Interface Admin </legend> <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required /> <br /><br /> <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br /> <input type="submit" value="Connexion" id="submit" name="submit" /> </fieldset> </form> <?php } ?> </aside>
NOT isset name ? Tu es sûr... ?
La session fonctionne mais le nom d'utilisateur ne s'affiche pas.