Signaler

Problème de connexion [Résolu]

Posez votre question Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - Dernière réponse le 16 mai 2017 à 18:10 par Honomatopic
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 :
<?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.
Afficher la suite 
Utile
+0
plus moins
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 :

<?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;
}

?>
Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - 15 mai 2017 à 17:22
Merci de m'avoir répondu mais j'ai essayé ce que tu m'as demandé mais cela ne marche pas.
Répondre
Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - 15 mai 2017 à 17:26
Non finalement je me suis emballé trop vite. Ca ne marche toujours pas.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Premièrement .. active la gestion des erreurs PDO http://www.commentcamarche.net/faq/46512-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                                                                 
jordane45 17577Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 28 juin 2017 Dernière intervention - 15 mai 2017 à 18:43
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 ....
Répondre
Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - 15 mai 2017 à 20:46
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.
Répondre
Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - 16 mai 2017 à 17:46
Ca y est j'ai trouvé le bug. En fait, c'est la méthode session_unset() que j'avais mis sur mon bouton déconnecter qui faisait déconnecter tous seul en naviguant de pages à pages.
Répondre
jordane45 17577Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 28 juin 2017 Dernière intervention - 16 mai 2017 à 18:09
... c'est toujours la faute du unset caché :-)

Pense à mettre la discussion en résolu.
Bonne soirée.
Répondre
Honomatopic 111Messages postés dimanche 16 novembre 2014Date d'inscription 5 juin 2017 Dernière intervention - 16 mai 2017 à 18:10
Très bien. Merci pour vos aides.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !