Problème de connexion
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir,
J'ai fais un portfolio en PHP. Dans ce portfolio j'utilise une base de données car j'ai un formulaire de connexion et un formulaire de contact. Le formulaire de contact marche bien mais le formulaire de connexion marche partiellement.
En effet, quand je me connecte avec mon login et mon mot de passe ça se connecte. Mais quand je navigue sur les autres pages, ça se déconnecte automatiquement. Et mon but c'est que ça reste connecté pendant toute la navigation de page en page.
Pouvez-vous m'aider ?
Voici le script PHP du formulaire de connexion appelé _debut.php qui est insérer sur toutes les pages du portfolio avec la méthode session_start :
Voici le script PHP pour me connecter à ma base de données par l'intermédiaire de PDO. Le fichier s'appelle accesbase.php issu du répertoire modele :
Et voici le script PHP de connexion implémenté pour mon formulaire. Le fichier s'appelle authentification.php. Il est dans le répertoire controleur :
J'attends vos retours.
J'ai fais un portfolio en PHP. Dans ce portfolio j'utilise une base de données car j'ai un formulaire de connexion et un formulaire de contact. Le formulaire de contact marche bien mais le formulaire de connexion marche partiellement.
En effet, quand je me connecte avec mon login et mon mot de passe ça se connecte. Mais quand je navigue sur les autres pages, ça se déconnecte automatiquement. Et mon but c'est que ça reste connecté pendant toute la navigation de page en page.
Pouvez-vous m'aider ?
Voici le script PHP du formulaire de connexion appelé _debut.php qui est insérer sur toutes les pages du portfolio avec la méthode session_start :
<?php session_start (); // affichage des erreurs php error_reporting(E_ALL); // fonction PHP permettant de crée une session ou restaure celle trouvée sur le serveur, via l'identifiant de session passé dans une requête GET, POST ou par un cookie include_once('controleur/authentification.php'); // include_once'controleur/deconnexion.php'; include_once 'analyticstracking.php'; ?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> <meta name="description" content=""> <meta name="author" content=""> <link rel="icon" href="#"> <title>Portfolio de Honoré</title> <!-- Bootstrap core CSS --> <link href="bootstrap/css/bootstrap.css" rel="stylesheet"> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet"> <link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet"> <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> <link href="../../assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> <!-- Custom styles for this template --> <link href="jumbotron.css" rel="stylesheet"> <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> <script src="../../assets/js/ie-emulation-modes-warning.js"></script> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <link href="bootstrap/css/style.css" rel="stylesheet"> <body> <nav class="navbar-fixed-top navbar-inverse"> <div class="container test"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand"></a> </div> <div id="navbar" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li><a href="index.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-home"> </span> Accueil</a></li> <li><a href="cv.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-briefcase"> </span> Mon CV</a></li> <li><a href="projets.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-folder-open"></span> Mes projets informatiques</a></li> <li><a href="contact.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-envelope"></span> Contact</a></li> <?php if (isset($_SESSION['user'])): ?> <li><a href="profil.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-lock"></span> Mon profil</a></li> <?php endif; ?> </ul> <?php if (!isset($_SESSION['user'])): ?> <form class="navbar-form navbar-right" method="POST"> <div class="form-group"> <input type="text" name="user" placeholder="Nom d'utilisateur" class="form-control"> </div> <div class="form-group"> <input type="password" name="mdp" placeholder="Mot de passe" class="form-control"> </div> <button type="submit" name="connecter" class="btn btn-success">Se connecter</button> </form> <?php else: ?> <div class="nav navbar-nav pull-right"> <span class="glyphicon glyphicon-user white xsTabulation" aria-hidden="true"> </span> <a href="utilisateur.php" rel="nofollow noopener noreferrer" target="_blank"><span class="text-center white xsTabulation"><?php echo "Bienvenue " . $_SESSION['user']; ?></a> </span> <span> <a href="<?php echo $_SERVER['PHP_SELF']; ?>?logout" class="white"> <button type="submit" name="deconnecter" class="btn btn-success" span class="glyphicon glyphicon-log-out " aria-hidden="true" title="log-out" action=<?php unset($_SESSION['user']);?>>Se déconnecter</button></span> </a> </span> </div> <?php endif; ?> </div> <!-- /.nav-collapse --> </div> <!-- /.container --> </nav> <!-- /.navbar -->
Voici le script PHP pour me connecter à ma base de données par l'intermédiaire de PDO. Le fichier s'appelle accesbase.php issu du répertoire modele :
try { $pdo = new PDO ( 'mysql:host=' . HOTE . ';dbname=' . BDNOM, UTILISATEUR, MDP ); } catch ( PDOException $e ) { die ( "Erreur ! :" . $e->getMessage () ); }
Et voici le script PHP de connexion implémenté pour mon formulaire. Le fichier s'appelle authentification.php. Il est dans le répertoire controleur :
<?php include_once ('modele/accesbase.php'); if (isset ( $_POST ['connecter'] )) { if (isset ( $_POST ['user'] ) && isset ( $_POST ['mdp'] )) { $user = $_POST ['user']; $mdp = $_POST ['mdp']; $sql = "SELECT * FROM compte WHERE user=:user AND mdp=:mdp "; $query = $pdo->prepare ( $sql ); // Lie un nom de variable avec un paramètre $query->bindParam ( ':user', $user ); $query->bindParam ( ':mdp', $mdp ); $query->execute (); $_SESSION['user'] = $user; $_SESSION['mdp'] = $mdp; } else return 0; } else return false;
J'attends vos retours.
A voir également:
- Problème de connexion
- Gmail connexion - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- D'où peut venir un problème de connexion internet sur un ordinateur ? - Guide
- Site inaccessible n'autorise pas la connexion - Guide
2 réponses
Visiblement, il y a trois cas :
— Les sessions ne sont pas sauvegardées
— Les sessions ne sont pas lues
— Les sessions sont détruites après la première fois
Alors en premier temps je testerai déjà de fermer les blocs des « else » correctement de tes conditions et je fermerai l'écriture une fois plus nécessaire :
— Les sessions ne sont pas sauvegardées
— Les sessions ne sont pas lues
— Les sessions sont détruites après la première fois
Alors en premier temps je testerai déjà de fermer les blocs des « else » correctement de tes conditions et je fermerai l'écriture une fois plus nécessaire :
<?php if (isset ( $_POST ['connecter'] )) { if (isset ( $_POST ['user'] ) && isset ( $_POST ['mdp'] )) { $user = $_POST ['user']; $mdp = $_POST ['mdp']; $sql = "SELECT * FROM compte WHERE user=:user AND mdp=:mdp "; $query = $pdo->prepare ( $sql ); // Lie un nom de variable avec un paramètre $query->bindParam ( ':user', $user ); $query->bindParam ( ':mdp', $mdp ); $query->execute (); $_SESSION['user'] = $user; $_SESSION['mdp'] = $mdp; session_write_close (); } else { return 0; } } else { return false; } ?>
Utilisateur anonyme
Merci de m'avoir répondu mais j'ai essayé ce que tu m'as demandé mais cela ne marche pas.
Utilisateur anonyme
Non finalement je me suis emballé trop vite. Ca ne marche toujours pas.
Bonjour,
Premièrement .. active la gestion des erreurs PDO https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs et place tes requêtes dans des blocs TRY/CATCH (comme dans l'exemple du lien )
Puis fais un
Et enfin.. assures toi que les sessions sont bien démarrées sur toutes tes pages ... y compris dans ta page authentification.php
Cordialement,
Jordane
Premièrement .. active la gestion des erreurs PDO https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs et place tes requêtes dans des blocs TRY/CATCH (comme dans l'exemple du lien )
Puis fais un
print_r($_SESSION);au début de tes pages.
Et enfin.. assures toi que les sessions sont bien démarrées sur toutes tes pages ... y compris dans ta page authentification.php
Cordialement,
Jordane
Bon j'ai géré les erreurs PDO en rajoutant les lignes dans mon fichier accesbase.php :
Ensuite j'ai isolé ma requêtes dans un bloc try et catch dans mon fichier authentification.php :
Ensuite dans mon fichier index.php, j'ai rajouté le print_r($_SESSION) :
Et il m'indique :
Array ( [mdp] => honore )
Et le user n'est pas pris en compte.
Pour le session_start, je l'ai indiqué dans mon fichier _debut.php qui est inclus sur toute les pages.
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
Ensuite j'ai isolé ma requêtes dans un bloc try et catch dans mon fichier authentification.php :
<?php include_once ('modele/accesbase.php'); if (isset ( $_POST ["connecter"] )) { if (isset ( $_POST ["user"] ) && isset ( $_POST ["mdp"] )) { $user = $_POST ["user"]; $mdp = $_POST ["mdp"]; $sql = "SELECT * FROM compte WHERE user=:user AND mdp=:mdp "; $datas = array ( ':user' => $user, ':mdp' => $mdp ); try { $query = $pdo->prepare ( $sql ); // Lie un nom de variable avec un paramètre $query->bindParam ( ':user', $user ); $query->bindParam ( ':mdp', $mdp ); $query->execute ( $datas ); $_SESSION ["user"] = $user; $_SESSION ["mdp"] = $mdp; // } else // return 0; } catch ( Exception $e ) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage (); echo " Les datas : "; print_r ( $datas ); } } } // } else // return false; ?>
Ensuite dans mon fichier index.php, j'ai rajouté le print_r($_SESSION) :
print_r($_SESSION);
Et il m'indique :
Array ( [mdp] => honore )
Et le user n'est pas pris en compte.
Pour le session_start, je l'ai indiqué dans mon fichier _debut.php qui est inclus sur toute les pages.
Tu peux faire le print session dans ton fichier authentification.php ?
Et.. n'aurais tu pas, quelquepart un code du genre unset($_SESSION['user']) ?
et au cas où .. si tu renommes ta variable"user" en autre chose ... est-ce qu'il garde la variable en session ou pas ? (sachant que tu devrais mettre l' ID du user plutôt que son login..... )
ID que tu récupères lorsque tu vérifies que l'utilisateur existe ...
Ensuite, pour info, tu utilises soit le bindParam .. soit l'array de DATA dans le execute ....
Et.. n'aurais tu pas, quelquepart un code du genre unset($_SESSION['user']) ?
et au cas où .. si tu renommes ta variable"user" en autre chose ... est-ce qu'il garde la variable en session ou pas ? (sachant que tu devrais mettre l' ID du user plutôt que son login..... )
ID que tu récupères lorsque tu vérifies que l'utilisateur existe ...
Ensuite, pour info, tu utilises soit le bindParam .. soit l'array de DATA dans le execute ....
Pour le unset($_SESSION['user']) , j'en avais un pour mon bouton de déconnexion. Je l'ai enlevé et remplacer par la fonction session_unset().
Alors j'ai renommé ma variable $user en $utilisateur et visiblement il ne garde pas la session. Après pour l'ID le problème c'est que dans ma table compte il y a que deux colonnes, la colonne user et la colonne mdp. Et pas de colonne ID.
Effectivement pour le bindParam et comme mentionné dans ton lien, j'ai enlevé le tableau data.
Après tout ces changements, pas de miracle. Et le print_r($_SESSION) sur le authentification.php ne s'affiche pas.
Alors j'ai renommé ma variable $user en $utilisateur et visiblement il ne garde pas la session. Après pour l'ID le problème c'est que dans ma table compte il y a que deux colonnes, la colonne user et la colonne mdp. Et pas de colonne ID.
Effectivement pour le bindParam et comme mentionné dans ton lien, j'ai enlevé le tableau data.
Après tout ces changements, pas de miracle. Et le print_r($_SESSION) sur le authentification.php ne s'affiche pas.