Page 1 sur 1

Condition sur une variable session

Posté : 12 déc. 2022, 17:35
par Sheush
Bonjour tout le monde, j'ai un problème avec l'utilisation des sessions et je vais essayer d'exposer ça le plus clairement possible :

-Mon besoin : À l'aide des infos stockés dans la session, afficher un formulaire de connexion quand l'utilisateur n'est pas identifé, et ne plus l'afficher quand il l'est.
-Mon problème : Dans compte.php, la condition de la ligne 13 ne se remplit jamais alors que le var_dump de la ligne 21 montre que 'username' est bel et bien défini dans $_SESSION.

Ça fait des heures que je cherche en vain une solution, ça serait super que vous puissiez me montrer ce qui ne va pas.

Mon code :

compte.php :

Code : Tout sélectionner

<?php session_start();?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Connexion</title> </head> <body> <?php if (isset($_SESSION['username'])) { echo $_SESSION['username']; } else { include 'connexion_form.php'; } var_dump($_SESSION); ?> </body> </html>
connexion_form.php :

Code : Tout sélectionner

<html> <form method="post"> <input type="text" name="username" id="username" placeholder="Nom d'utilisateur" required><br/> <input type="password" name="password" id="password" placeholder="Mot de passe" required><br/> <input type="submit" name="connection" id="connection" value="Connexion"> </form> </html> <?php // Si le formulaire a été envoyé : if (isset($_POST['connection'])) { extract($_POST); // Si les champs ne sont pas vides : if(!empty($username) && !empty($password)) { include 'database_connexion.php'; global $db; // Vérifie que l'username entré existe dans la BDD $q = $db->prepare("SELECT * FROM users WHERE username = :username"); $q->execute(['username' => $username]); $result = $q->fetch(); if ($result == true) { // Vérifie que le mot de passe est bien celui de l'utilisateur indentifié if(password_verify($password, $result['password'])) { echo"<br/> Connexion au compte réussie"; $_SESSION['username'] = $result['username']; } else { echo"<br/> Identifiants incorrect"; } } else { echo"<br/> Identifiants incorrect"; } } } ?>
database_connexion.php

Code : Tout sélectionner

<?php define('HOST', 'localhost'); define('DB_NAME', 'db'); define('USER', 'root'); define('PASS',''); try{ $db = new PDO("mysql:host=" . HOST . ";dbname=" . DB_NAME, USER, PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "<br/> Connexion à la BDD réussie"; } catch(PDOException $e){ echo $e; } ?>

Re: Condition sur une variable session

Posté : 12 déc. 2022, 18:58
par or 1
que donne le
var_dump($_SESSION);
placé avant le if ?

Re: Condition sur une variable session

Posté : 12 déc. 2022, 23:16
par two3d
Ton "global $db;" sert à rien.
Tu redéfinis une page HTML avec les balises <html></html> dans connexion_form.php : HTML incorrect (n'affecte pas le fonctionnement de PHP ceci dit)

Mets un
var_dump(session_status())
en dessous de
session_start()
pour voir si ta session est bien ouverte.

Codes de retour possibles :

Code : Tout sélectionner

_DISABLED = 0 _NONE = 1 _ACTIVE = 2
Ou simplement entourer session_start() avec var_dump() :
var_dump(session_start()); //doit retourner "true"

Re: Condition sur une variable session

Posté : 13 déc. 2022, 18:10
par Sheush
Merci de vos réponses, voilà ce que ça donne avec les 2 vérifs que vous m'avez proposées :

Déso d'envoyer ça comme ça je sais pas comment envoyer une image sur ce site.
D:\Wamp\www\verification d'une variable session\compte.php:2:int 2
D:\Wamp\www\verification d'une variable session\compte.php:15:
array (size=0)
empty

Nom d'utilisateur
Mot de passe
Connexion

Connexion à la BDD réussie
Identifiants incorrect
D:\Wamp\www\verification d'une variable session\compte.php:25:
array (size=0)
empty
Aussi, j'ai testé ce matin et après un rafraichissement de la page une fois le formulaire envoyé, ça avait finit par marcher. J'avais rien envoyé ici puisque je devais y aller. Je reteste ce soir et là, le rafraichissement ne change plus rien... (Je ne crois pas du tout avoir fait quelque chose de différent dans le code).

Re: Condition sur une variable session

Posté : 14 déc. 2022, 11:41
par Sheush
Ok déso j'ai envoyé ce message en étant un peu pressé j'ai même pas vu que les identifiants était pas bons... Voilà ce que ça donne avec de bons identifiants :
D:\Wamp\www\verification d'une variable session\compte.php:2:int 2
D:\Wamp\www\verification d'une variable session\compte.php:15:
array (size=0)
empty

Nom d'utilisateur
Mot de passe
Connexion

Connexion à la BDD réussie
Connexion au compte réussie
D:\Wamp\www\verification d'une variable session\compte.php:25:
array (size=1)
'username' => string 'Nom_Prenom' (length=10)

Re: Condition sur une variable session

Posté : 14 déc. 2022, 13:50
par or 1
ce qu'il faut tester, c'est si la variable $_SESSION n'est plus vide quand on retourne sur la page compte.php après s'être connecté avec succès. cela doit alors afficher $_SESSION['username'] et non le formulaire de connexion.

Re: Condition sur une variable session

Posté : 14 déc. 2022, 14:29
par Sheush
ce qu'il faut tester, c'est si la variable $_SESSION n'est plus vide quand on retourne sur la page compte.php après s'être connecté avec succès. cela doit alors afficher $_SESSION['username'] et non le formulaire de connexion.
Mon dernier message permet de voir qu'une fois "connecté", la session existe bel et bien mais que rien n'est trouvé dans [username] au dessus du formulaire. Sous le formulaire en revanche, il trouve bien ce qu'il y a dedans. En plaçant à nouveau la condition plus bas dans le code, cette fois ci elle est remplie et affiche bien $_SESSION['username']. Comment une variable peut être à la fois définie et non définie sur la même page ? Est ce que c'est normal ?

Re: Condition sur une variable session

Posté : 14 déc. 2022, 14:38
par or 1

if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
$test = "oui";
if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
qu'est-ce que cela va afficher ?

Re: Condition sur une variable session

Posté : 14 déc. 2022, 15:17
par Sheush

if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
$test = "oui";
if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
qu'est-ce que cela va afficher ?
Ce n'est pas le même cas de figure puisqu'on parle de variable de session après un refresh de la page. Session_start() au début de la page devrait récupérer la valeur ['username'] entrée précédemment et ne pas afficher à nouveau le formulaire, non ?

De plus la valeur ['username'] n'est définie que si le formulaire est remplie et envoyé. Donc à priori la position du formulaire dans le code ne devrait même pas influencer la définition ou non de la variable.

Re: Condition sur une variable session

Posté : 14 déc. 2022, 19:48
par or 1
if (isset($_SESSION['username']))
{
echo $_SESSION['username'];
}
else
{
include 'connexion_form.php';
}
si les sessions ne fonctionnent pas. on rentre dans le else.

si l'on retourne sur compte.php après s'être connecté avec succès, alors, on est en method get, cela ne passe pas :
if (isset($_POST['connection']))
{
la session n'est jamais initialisée.

si cela dit :
array (size=1)
'username' => string 'Nom_Prenom' (length=10)
c'est que ce test n'a pas été fait en retournant sur compte.php ou alors que cela fonctionne.

Re: Condition sur une variable session

Posté : 15 déc. 2022, 22:52
par two3d
Ce script d'espace membre pourra t'aider à comprendre le fonctionnement.