Code php "SESSION UTILISATEUR" ne fonctionne pas
Résolu
Zeropoint
-
Zeropoint -
Zeropoint -
Bonjour, j'ai un problème avec mon code php qui ne fonctionne pas.
Merci d'avance.
<?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());
}
if(isset($_POST['login']) && isset($_POST['password']))
{
$name;
$query = $db->prepare('SELECT * FROM admin WHERE login = :login AND password = :password');
$query->execute(array(
'login' => $_POST['login'],
'password' => $_POST['password']));
$return = $query->fetch();
if ($_POST['password'] == $return['password'])
{
session_start();
$_SESSION['id'] = $return['id'];
$_SESSION['login'] = $return['login'];
$_SESSION['name'] = $return['name'];
}
else {
echo 'mot d passe incorrect';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="stylesheet" type="text/css" href="style/style.css" />
<title>Portfolio Avner</title>
<script src="js/jquery.min.js"></script>
<script src="js/jquery.sticky.js"></script>
<script>
$(window).load(function(){
$("nav").sticky({ topSpacing: 0 });
});
</script>
</head>
<body>
<?php include ('block/header.php'); ?>
<!-- CONTENU DYNAMIQUE DE LA PAGE -->
<div id="contenu">
<?php include ('block/login.php'); ?>
<div id="corps">
<?php include ('block/articles.php'); ?>
</div>
<!-- FIN DU CONTENU DYNAMIQUE DE LA PAGE -->
</div>
<!-- FOOTER -->
<div class="space"></div>
<?php include ('block/footer.php'); ?>
</body>
</html>
<aside>
<form method="post" action="">
<fieldset>
<legend> Interface Admin </legend>
<?php
if (isset($_SESSION['id']) AND !isset($_SESSION['name']))
{
echo '<p>Bienvenue <span style="color: rgb(0, 117, 255);">' . $_SESSION['name'] . '</span> !</p>
<p>-> <a href="index.php?logout=0" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>';
}
else
{
?>
<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" />
<?php
}
?>
</fieldset>
</form>
</aside>
Merci d'avance.
2 réponses
-
Bonjour
Tu as bien mis un
session_start(); dans chaque fichier ?-
-
J'ai corrigé un peu le code j'ai essayé ça mais j'ai un problème de mot de passe non reconnu.
else { $login = $_POST['login']; $pass = $_POST['password']; $query = $db->prepare('SELECT * FROM admin WHERE login = :login AND password = :password'); $query->execute(array( 'login' => $login, 'password' => $pass)); $return = $query->fetch(); $isPasswordCorrect = password_verify($pass, $return['password']); if (!$return) { echo 'Pas de résultat !'; } else { if ($isPasswordCorrect == TRUE) { session_start(); $_SESSION['id'] = $return['id']; $_SESSION['name'] = $return['name']; $_SESSION['login'] = $_POST['login']; echo 'Vous êtes connecté !'; } else { echo 'Mot de passe incorrect !'; } } } -
-
J'ai encore bien modifié et arrangé mon code.
La session fonctionne mais le nom d'utilisateur ne s'affiche pas.
<?php
if (!isset($_POST['login']) && !isset($_POST['password']))
{
if (isset($_SESSION['name']) AND isset($_SESSION['login']))
{
?>
<aside>
<form method="get" action="">
<fieldset>
<legend> Interface Admin </legend>
<p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php $_SESSION['name']; ?> </span>!</p>
<p>-> <a href="?logout" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
<?php
}
else
{
?>
<aside>
<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" />
<?php
}
}
else
{
$login = $_POST['login'];
$pass = $_POST['password'];
$query = $db->query('SELECT * FROM admin');
while($return = $query->fetch())
{
if ($login == $return['login'] AND $_POST['password'] == $return['password'])
{
session_start();
$_SESSION['name'] = $return['name'];
$_SESSION['login'] = $_POST['login'];
?>
<aside>
<form method="get" action="">
<fieldset>
<legend> Interface Admin </legend>
<p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php $_SESSION['name']; ?> </span>!</p>
<p>-> <a href="?logout" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
<?php
}
else
{
?>
<aside>
<form method="get" action="">
<fieldset>
<legend> Interface Admin </legend>
<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>
<?php
}
}
}
?>
</fieldset>
</form>
</aside> -
-
-
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 :<?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.
}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.
<?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> -
-