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.
A voir également:
- Code php "SESSION UTILISATEUR" ne fonctionne pas
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - 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... ?
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 !'; } } }La session fonctionne mais le nom d'utilisateur ne s'affiche pas.