Sessions: encore un problème ..

Package123 -  
 le père -
Bon, vous allez me dire, encore un qui sait pas utiliser les sessions ... Mais !
Je vois vraiment pas où j'ai mal écrit mon code ...

code de ma page verifconnexion.php

<?php
$loginOK = false;

if ( isset ( $_POST[ 'connexion' ] ) && $_POST[ 'connexion' ] == 'Connexion' )
		{
		if ( isset ( $_POST ) && ( ! empty ( $_POST[ 'pseudo' ] )) && ( ! empty ( $_POST[ 'mdp' ] )))
			{
				{
$pdo_options[ PDO::ATTR_ERRMODE ] = PDO::ERRMODE_EXCEPTION;
		$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
		
                $req = $bdd -> prepare ( "SELECT COUNT(*) FROM membres  WHERE pseudo=? AND mdp=?" );
		$req -> execute (array($_POST[ 'pseudo' ],($_POST[ 'mdp' ])));

$res = $req->fetch(PDO::FETCH_ASSOC);
if($res["COUNT(*)"] == 1)
				{              
					$loginOK = true; //la variable change
				}
				else
				{
				echo "Vous n'êtes pas enregistré(e) OU Mauvais mot de passe";
				}
				}

			// Si LoginOK a été validé -> données en sessions
				if ( $loginOK )
				{
		=====>>>		$_SESSION['pseudo'] = $pseudo;
		=====>>>		$_SESSION['mdp'] = $mdp;
				header ( 'Location: pagedossiers.php' );
				}
			}
		}
else
{
echo 'Une erreur est survenue, veuillez réessayer !';
}
?>


et ma page connexion.php

<du code html>
<div class="body_formulaire">
			<p class="formulaire_inscrip">Connexion</p>
			
			<form method="post" action="verifconnexion.php">
				<p>
				Votre pseudo : <input type="text" name="pseudo" id="pseudo" placeholder="17 caracteres max." maxlength="17" required/><br/>
				Votre mot de passe : <input type="password" name="mdp" id="mdp" required/><br />
				<input type="submit" name="connexion" value="Connexion" />
				</p>
				</form>
</div>
<autre code html>


Je pense que c'est ce que j'ai fléché qui n'est pas bon (=====>>>), ça ne met rien en session ...
Et toutes mes pages commencent par le fameux <?php session_start();>

24 réponses

tarek_dotzero Messages postés 834 Statut Membre 122
 
Bonjour,

Non, normalement c'est correct...
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913348-variables-superglobales

Effectuez un débogage, possible qu'il y a une petite erreur quelque part, mais pas dans la partie des sessions

Je vous conseil de modifier la requête:

"SELECT COUNT(*) as Nbr FROM membres  WHERE pseudo=? AND mdp=?"


Et ensuite, vous aurez:

if($res["Nbr"] == 1)


Bon Courage.
0
bg62 Messages postés 26248 Date d'inscription   Statut Modérateur Dernière intervention   2 429
 
pas trop ma tasse de thé ... mais, 2 choses :
session_start();
pourrait-il servir ?
ensuite sur certains hébergeurs tu peux quand même avoir des problèmes :
https://longuetraine.fr/?article422/url-etrange-generee-sur-un-serveur-ovh
j'espère que cela pourra te servir ;)
0
le père
 
Bonjour

Effectivement, on ne voit pas le session_start(). S'il n'est nulle part, il faut le rajouter.

De plus, les deux variables $pseudo et $mdp ne sont pas définies. On ne voit que $_POST['pseudo'] et $_POST['mdp']
0
bg62 Messages postés 26248 Date d'inscription   Statut Modérateur Dernière intervention   2 429
 
j'ai bien dis que ce n'était pas "ma tasse de thé" ... mais ayant déjà eu moult problèmes avec ce codage , seul CCM m'en avais donné la solution ... ;)
donc : +100 ;)
0
le père
 
Nous avons mal lu tous les deux... Package123 précise bien qu'il utilise session_start().
Mais de toutes manières, tant qu'il essaiera de mettre en session des variables qui n'existent pas...
0
Package123
 
oui, j'ai mis des session_start() à chaque page.

J'ai changé mes variables en $_SESSION['pseudo'] = $_POST['pseudo'] mais rien n'y fait ...

Si je fais un echo en affichant le $_SESSION['pseudo'], ça me met: Notice: Undefined index blablabla à la ligne où j'ai mis $_SESSION['pseudo'].

merci tarek_dotzero pour avoir améliorer le script de ma connexion ;-)

D'autres avis ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Package123
 
Up

J'ai changé mes variables en $_SESSION['pseudo'] = $_POST['pseudo'], comme ça mes variables sont définies

Mais je ne trouve toujours pas la solution !
0
Package123
 
Bon, j'ai essayé de bidouiller mais rien ne fonctionne ... Pourtant dans ma bdd, j'ai bien une table 'membres' avec un champs 'pseudo' ...

Voilà ce qui ne marche pas à la fin de mon script de connexion, ni au début de mes pages:

1) $_SESSION['pseudo'] = $_POST['pseudo']; (ça devrait fonctionner mais non ...)
2) $_SESSION['pseudo'] = $pseudo (la variable n'était pas définie donc ne marche pas)

bref, au début de mes pages, j'ai bien mes session_start() ...
Et si j'affiche sur ma pageaccueil <?php echo 'Bonjour'.$_SESSION['pseudo'].'', ça me met inévitablement: Notice: Undefined index: pseudo in C:\Program Files\sur la ligne correspondant à 1) ou 2)

...

1 mois que je me prends la tête sur ça, j'ai même essayé de bidouiller le php.ini avec l'affichage de phpinfo() ...
0
le père
 
Tu nous dis que ça ne marche pas dans ta page d'accueil, mais, d'après ton premier script, c'est à la page pagedossiers.php que tu vas en cas de login OK. C'est bien ça ta page d'accueil ?

Juste avant ta ligne $_SESSION['pseudo'] = $_POST['pseudo'];, peux-tu ajouter echo 'coucou'; exit;
Juste histoire d'être sûr que tu passes bien par là (le exit parce que sinon tu risques de changer de page et de ne rien voir)
0
Package123
 
oui, pageaccueil ou pagedossiers, j'ai changé la redirection entre temps mais peu importe.

Oui, le coucou s'affiche sur une page blanche (donc je passe bien par mes variables $_SESSION et $_POST) ... lol

Une solution mon père ?
0
le père
 
... mais peu importe.
Quand on ne comprend plus (et je parle autant de moi que de toi) tout importe.

Notice: Undefined index: pseudo in C:\Program Files\...
Tu mets ton site dans C:\Program Files\... ??? Ce n'est pas interdit a priori, mais pas conventionnel. Si tu as aussi mis le dossier temporaire des sessions dans Program Files, il se peut que ça empêche l'enregistrement des sessions
Si tu ne sais pas où il est, fais une page qui contient simplement <?php phpinfo() ?> et regarde dans les informations affichées où se trouve ce répertoire temporaire.
0
bg62 Messages postés 26248 Date d'inscription   Statut Modérateur Dernière intervention   2 429
 
dis donc " le père " depuis que tu interviens sur le forum et avec une connaissance certaine ... pourquoi rester 'anonyme' ???
;)
0
le père
 
Bonjour bg62

Un nouvel accès de prosélytisme ? ^^
Je dois être comme toi, un peu obstiné ;)
0
bg62 Messages postés 26248 Date d'inscription   Statut Modérateur Dernière intervention   2 429
 
"ceux qui cherchent à susciter l'adhésion d'un public" .... que nenni ;)
@+
0
Package123
 
Oui, mes sessions s'enregistrent dans le dossier tmp (je suis sur EasyPhp) et mon site se trouve dans un dossier alias (pas directement dans le dossier www de EasyPhp)

J'ai ensuite déplacé mon site dans le dossier www (et donc, l'alias ne me sert plus à rien) mais le problème est persistant ... Ce pourrait-il que cela vienne de ma version de EasyPhp ? (5.3.9)
0
le père
 
Oui, mes sessions s'enregistrent dans le dossier tmp
Ce dossier tmp est-il ou non un sous-dossier de C:\Program Files ?
Vois-tu des fichiers dans ce répertoire ?

As-tu déjà fait marcher des sessions avec cette installation ?
Et, si non, fais un script minimaliste pour voir si le pb n'est pas dû à autre chose :

fichier1.php:
<?php
  session_start();
  $_SESSION['coucou']='coucou';
?>
<a href="fichier2.php">cliquer ici</a>


fichier2.php:
<?php 
  session_start();
  var_dump ($_SESSION);
?>
0
Package123
 
Oui ,tmp est un sous-dossier de EasyPhp (tout ça contenu dans C:\Program Files\EasyPhp ...)

Pour le code minimaliste, ça me donne ça:

array
  'coucou' => string 'coucou' (length=6)


Ce code, je l'ai placé dans le dossier www de Easyphp (donc là où se trouve mon site)

Par contre, si je mets le var_dump dans ma pageaccueil par exemple, comme pour afficher le pseudo, ça me met
array empty
alors que je me connecte avec ma bdd.
La session coucou s'enregistre alors que celle qui est dans ma bdd, non ...
0
le père
 
Alors c'est que <?php session_start() ?> n'est pas correct au début de ta page accueil.
Es-tu vraiment sûr qu'il n'y a rien d'envoyé avant le <?php session_start() ?>
Peux-tu montrer le début du code ?
Si c'est un fichier en UTF8, es-tu sûr qu'il est sans BOM ?
0
Package123
 
<?php session_start();
var_dump($_SESSION); //ça montre => array empty ...
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta charset="utf-8" />
        <link rel="stylesheet" href="pages.css" />
<title>Titre du site</title>
<link rel="icon" type="image/ico" href="images/favicon.ico" />
</head>
	<body>
		<div class="bloc_page">
			<header>
			<?php include("banniere_site.php");?>
			
				<div class="barre_accueil">

					<?php
					if (!empty ($_SESSION))
					{echo 'Bonjour '.$_SESSION['pseudo'].'';}

					else
					{echo 'Bonjour Invité';}
					?>

				</div>
				
				<?php 
				if (!empty($_SESSION['pseudo']))
				{include("menuco.php");}
				
				else
				{include ("menupasco.php");}
				?>
				
			
			</header>


<?php session_start();?> est au début de presque toutes les pages (sauf formulaire d'inscription). Je n'écris jamais rien avant.
Toutes mes pages sont encodées en UTF-8. J'ai changé pour voir si le UTF-8 sans BOM changeait quelque chose mais non ...

Toi aussi tu désespères de mon cas ? lol
0
le père
 
Non, non, je ne désespère pas.
Tu as mis en gras utf-8 dans <meta charset="utf-8" />.
Ne sois pas offusqué par ma question, mais es-tu conscient que cette balise ne prouve absolument pas que ton fichier est codé en utf-8 ?
Comment fais-tu pour vérifier si le fichier est sans BOM ?
Tu dis que tu as session_start() au début de presque toutes tes pages : tu sais qu'il suffit de passer par une seule où il n'y a pas de session_start() pour que la session soit perdue ?

En ce qui concerne le script que tu donnes dans ton message de 6h35 (si tu donnais les noms des scripts, ce serait plus pratique), reprends mon fichier1.php et change le Location pour aller dessus. Est-ce que tu as toujours un array empty ?
0
Package123
 
Tu tiens bon, j'aime ça ! lol

J'ai vérifié que c'était bien en utf8 sans BOM en allant dans Encodage => Encoder en UTF8 (sans BOM) et ça n'a rien changé (j'étais donc en utf8)
Et je ne savais pas que la balise <meta> ne prouvait pas que c'était de l'utf8 (tu m'apprends quelque chose là; merci ;-) )

Pour ce qui est des session_start(), j'en ai rajouté dans le peu de fichiers qui n'en possédaient pas (2ème merci pour la session perdue !)

Le script du dessus est la pageaccueil.php
_____________________________________________
array
  'pseudo' => null
  'coucou' => string 'coucou' (length=6)


J'ai mis ma pageaccueil.php dans la redirection (de fichier1.php)et ça m'a affiché ce qui a juste au-dessus (apparemment, la session où je me dois me connecter reste activée ...)
_____________________________________________
P.S: j'ai changé dans ma pageaccueil.php (donc le script dessus) ce petit bout là:

<div class="barre_accueil">
		<?php
		if (!empty ($_SESSION))
		{echo 'Bonjour '.$_SESSION['coucou'].'';}
		else
		{echo 'Bonjour Invité';}
		?>
</div>
				
				<?php 
				if (!empty($_SESSION['coucou']))
				{include("menuco.php");}
				
				else
				{include ("menupasco.php");}
				?>


Et ça m'affiche bien Bonjour coucou ainsi que le menuco.php
_________________________________________
Pour ce qui est de ma session où je me connecte, toujours le même pb: Notice: undefined index ... (ça doit pas venir de l'enregistrement de mes sessions mais un pb de connexion à la bdd, qu'est-ce t'en dis ?)
0
le père
 
OK pour l'utf8 et le BOM. La balise meta sert juste à déclarer aux navigateurs que tu leur envoie de l'utf8, mais tu peux très bien la mettre dans un fichier qui est en fait écrit en iso8859-1 (ou l'inverse). Ça donne des problèmes d'affichage. Des centaines (peut-être de milliers) de messages sur ce forum sont dus au fait que les gens ne comprennent pas que la balise meta sert simplement à indiquer quel encodage ils utilisent, mais que ce n'est pas elle qui détermine cet encodage.

Pour en revenir au problème initial...
pseudo null, ce n'est plus du tout pareil que quand $_SESSION était vide. Les sessions semblent marcher correctement, le problème est ailleurs.

toujours le même pb: Notice: undefined index ... (
toujours le même problème : tes indications sont vagues.
Quel est l'index qui n'est pas défini ? (Un vrai copier-coller, pour éviter les erreurs de recopie)
Quelle est la page (nom du script) qui affiche ça ?
Quel est le nom de la page qui a appelé celle où l'erreur s'affiche ? Quelles lignes de code dans cette page servent à initialiser la variable de session qui ne "passe" pas ?
0
Package123
 
Notice: Undefined index: pseudo in C:\PROGRAM FILES\EasyPHP-5.3.8.1\www\1site\site\verifconnexion.php on line 34


Sur la ligne 34 de ma page verifconnexion.php, j'ai ceci:
$_POST['pseudo'] = $_SESSION['pseudo'];

Je suis en train de me demander: est-ce que je ne devrais pas rajouter un champ 'connexion' dans ma bdd car j'ai une variable $_POST['connexion'] au début de ma page verifconnexion.php ??

P.S: Tu as été surpris que je mette mon site dans C:/Program Files, où penses-tu qu'il pourrait être ?
Sachant que je suis en local.
0
le père
 
Sur la ligne 34 de ma page verifconnexion.php, j'ai ceci:
$_POST['pseudo'] = $_SESSION['pseudo'];

D'après tes messages précédents, tu avais initialement (mais je ne sais pas si c'est ligne 34) $_SESSION['pseudo'] = $pseudo; (ligne en gras dans ton 1er message). Tu dis un peu plus tard que tu l'as changée en :
$_SESSION['pseudo'] = $_POST['pseudo'].
S'il s'agit bien de la même ligne, tu t'es tout simplement trompé en la modifiant. Il y a de très grandes chances que $_POST['pseudo'] = $_SESSION['pseudo']; soit une erreur.
Peux-tu m'expliquer l'intérêt qu'il y a à modifier $_POST ?

Je suis en train de me demander: est-ce que je ne devrais pas rajouter un champ 'connexion' dans ma bdd car j'ai une variable $_POST['connexion'] au début de ma page verifconnexion.php ??
Je ne vois pas le rapport. Pourquoi veux-tu ajouter un champ à ta base de données ?
S'il y a une variable $_POST['connexion'] au début de verifconnexion.php, c'est parce que ton formulaire (dans connexion.php) contient un champ dont le 'name' est 'connexion'. Si tu regardes ton formulaire, il s'agit du bouton submit. C'est donc bien de vérifier la valeur de $_POST['connexion'] simplement pour vérifier que c'est bien le formulaire qui a été envoyé, mais quel intérêt pour la bdd ?
0
Package123
 
Bah, j'avais initialement mis que $_SESSION['pseudo'] = $pseudo mais ça ne rimait à rien donc j'ai changé pour $_POST['pseudo'] = $_SESSION['pseudo'].

Lorsque je fais le var_dump() sur ma fin de verifconnexion, il m'affiche un
array
pseudo =>null
mdp => le mot de passe
connexion => Connexion

Il n'y a que le pseudo qui ne passe pas ...
Je ne sais plus quoi écrire ...
0
le père
 
Bah, j'avais initialement mis que $_SESSION['pseudo'] = $pseudo mais ça ne rimait à rien donc j'ai changé pour $_POST['pseudo'] = $_SESSION['pseudo'].
Parce que $_POST['pseudo'] = $_SESSION['pseudo'], tu trouves que ça rimait à quelque chose ? As-tu une idée de ce que ça veut dire ? C'est une totale absurdité.

Actuellement dans verifconnexion, as-tu
$_POST['pseudo'] = $_SESSION['pseudo'] (ton message 4 mai 23h34)
ou
$_SESSION['pseudo'] = $_POST['pseudo'] (ton message 23 avril 7h26)

Peux-tu redonner le code de verifconnexion.php ?
0