Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/05/2007, 09h35   #1
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Par défaut Problème avec l'utilisation des variables de session

Bonjour,

J'ai besoin d'utiliser les sessions et malgrès tout ce que j'ai pu lire, j'ai un soucis
J'arrive a creer mes variables sessions et a les réulitiser, mais pas a effectuer un test dessus...
J'ai essayer pleins de trucs mais rien n'y fait ...
Je vous passe mes deux fichiers tests :

test.php:
Code :
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
$_SESSION['docteur'] = "dites trente trois !";
$_SESSION['patient'] = "J'ai faim !";
$_SESSION['infirmiere'] = "";
echo "test1 lancé:";
print_r($_SESSION);
?>
<br /><br /><br /><br />
<a href="test2.php">Test2 pour voir</a>
test2.php:
Code :
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
echo "Le docteur a dit : ".$_SESSION['docteur']."<BR>";
echo "Et le patient a répondu : ".$_SESSION['patient']."<BR>";
 
if(empty($_SESSION['infirmiere']))
{echo "L'infirmière n'a rien dit";
}else{
echo "L'infirmière a ensuite dit : ".$_SESSION['infirmiere']."<BR>";}
?>
Si qqun peux m'expliquer mon erreur, ca serait cool
Merci !
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 17h57   #2
Membre émérite
 
Avatar de sharrascript
 
Homme Franck
Développeur Web indépendant
Inscription : avril 2007
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Franck
Âge : 31
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web indépendant

Informations forums :
Inscription : avril 2007
Messages : 678
Points : 900
Points : 900
Bonjour.

Est ce que ton session_start est bien placé avant toutes sorties html??? Même avant la balise <html>??
__________________
LudiKreation Pour un web ludique et son Blog | CapRumbo pour un peu d'évasion | ChaOdisiaque Club Passion Rôliste |SierrElben le Jeu de rôle
sharrascript est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 09h10   #3
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Salut,

oui, c'etait vraiment le debut du code que je t'avais affiché ...
Mais j'ai résolu mon pbs, j'avais manqué de rigueur.

Par contre j'ai un autre pbs qui me semble intérressant :

J'ai un fichier inclus qui vient modifier ma variable $_SESSION.
Et j'ai l'impression que ma page principale index.php conserve l'ancienne valeur, alors que la page incluse à bien la nouvelle.

La preuve : a la fin du fichier index.php, un echo m'affiche une valeur de session, et l'écho du debut du fichier inclus m'affiche une autre valeur.

D'ou ma question : si j'ai une page index.php qui contient un fichier inclus "A".
En cliquant sur un lien on décharge "A" pour charger "B". Est ce que le fichier principal index.php est relus ?
Je pensais que oui, mais apparemment non sinon comment expliquer ces 2 valeurs différentes ?

WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 09h28   #4
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
PHP reste un langage de script, lu de haut en bas, de gauche à droite....

Si tu fais :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<?php
$var="coucou";
 
echo $var;
//affiche coucou
 
$var="coucoubis";
 
echo $var;
//affiche coucoubis
//Affiche les 2 valeurs l'une en dessous de l'autre
Et ca marche pareil pour les include : ca inclut la valeur ou fichier en lieu et place du include..... Si tu inclu dans un code de 100 lignes 4 fichiers de 100 lignes, ton fichier total fera 500 lignes....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 10h41   #5
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Ok, c'est ce que je pensais ...
Du coup je ne comprend rien à ce qui se passe !

Je suis en train de faire des test pour pouvoir poser des questions clairs ...
A toute à l'heure
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 11h37   #6
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Voila, j'ai fais mon exemple et je retombe sur le meme probleme.

Le but est de faire varier mon menu en fonction de ma valeur de session !
Et je sesche !! !

Voici les fichiers tests :

fichier test.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
session_start();
?>
<!--ENTETE :-->
<div style="background-color:yellow;"><p>La valeur de la session est :</p><?php echo $_SESSION['menu'];?></div>
 
<!--MENU :-->
<div style="float:left;width:180px;background-color:gray;">
 
<?php
if(!isset($_SESSION['menu']))
{include("menuautre.php");}
 
 
elseif($_SESSION['menu']== "menu1")
{include("menu1.php");}
 
elseif($_SESSION['menu']== "menu2")
{include("menu2.php");}
?>
</div>
 
<div>
<!--CORP DU SITE :-->
<p>Et ceci est le corp du site</p>
</div>
fichier test2.php:
Code :
1
2
3
4
5
6
7
8
9
<?php
session_start();
$_SESSION['menu'] == "menu2";
echo "La valeur de la session est : ".$_SESSION['menu'];
?>
<!--CORPS DU TEXTE-->
<p>Ceci est le bloc de la page "test2.php"</p>
<p><a href="test.php">test.php</a></p>
<p><a href="test3.php">test3.php</a></p>
fichier test3.php:
Code :
1
2
3
4
5
6
7
8
<?php
session_start();
$_SESSION['menu'] = "menu2";
echo "Maintenant la session vaut :".$_SESSION['menu'];
?>
<!--CORPS DU TEXTE-->
<p><a href="test.php">test.php</a></p>
<p><a href="test2.php">test2.php</a></p>
fichier menu1.php:
Code :
1
2
3
4
5
6
7
<!--MENU 1-->
<ul>
<li><a href="test2.php">lien 1</a></li>
<li><a href="test3.php">lien 2</a></li>
<li>lien 3</li>
<li>lien 4</li>
</ul>
fichier menu2.php:
Code :
1
2
3
4
5
6
7
<!--MENU 2-->
<ul>
<li>redirection 1</li>
<li>redirection 2</li>
<li><a href="test2.php">redirection 3</a></li>
<li><a href="test3.php">redirection 4</a></li>
</ul>
Vraiment désolé de faire le
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 11h46   #7
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Il y a qu'au niveau du test 3 que tu initialise une variable de SESSION, tous les autres test ne sont que des vérifs.....

Pour intialiser correctement un variable de session, surtout si c'est toujours la même variable qui change, je te conseil de passer par des valeurs GET acroché à tes menus. C'est plus simple, ca mange pas de pein, et tu peux garder tes sessions pour des utilisations plus importantes.... Il ne faut jamais abuser des bonnes choses !!!

Exemple :
Code :
1
2
3
4
5
6
7
8
9
 
<a href="index.php?menu=menu1">menu1</a>
<?PHP if(isset($_GET['menu']) && $_GET['menu']=="menu1"){ ?>
<ul>
<li><a href="index.php?menu=menu1&action=truc">Truc</a>
</li>
</ul>
<?php } ?>
<a href="index.php?menu=menu2">menu2</a>........
...Car je suppose que ce que tu essaye de faire, c'est des sous-menu...

Te cache pas comme ca, reviens aux bonnes vielles valeurs qui marchent !!!
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 12h14   #8
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
humm ... Presque gagné, mais c'est pas 20/20 quand meme ...

En fait j'ai un site classique (donc menu classique), mais dans le menu, j'ai un lien "zone membre".
Le but est de changer completement de menu une fois que je suis dans la zone membre...
donc .... allé, 17/20
Donc en fait je fais une variable $_SESSION['menu'] que je teste ensuite, et selon le résultat, je renvoie sur un include ou un autre ...

Mais comme je débute en php, peut etre que je suis à coté de la plaque !
Mais comme en théorie ca m'a l'air possible, j'aimerais bien avoir qd meme la soluce meme si ce n'est pas la meilleurs methode ...

Merci bp en tout cas !!
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h27   #9
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Ok, ba à ce moment là, carrément :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
/*ceci est la page de menu... Perso je fais toujours la même chose : une page qui inclue AUMOINS un menu, comme ca le menu est trsè facilement modifiable...*/
if(isset($_SESSION['menu']){
switch($_SESSION['menu']){
  case "menu1":
      echo "<a href='index.php'>index</a>";
      //Etc.... Les echo normalement c'est pas suer cool, mais ici ca ira très bien.....
  break;
  case "menu2":
 //Etc.....
}
}else{
//Menu par défaut...
}
Mais par contre, il faut bien que tu ai une page de login ou un truc comme ca, qui te permette de justement remplir la variable $_SESSSION['menu']....

Du style :

Code :
1
2
3
4
5
6
7
8
9
10
 
//Quelque part, je sais pas ou....
if($password===$pass && $login==$log){
   $_SESSION['login']="yes";
//Si le login fait parti d'un groupe qui a accès au menu1 par exemple...
  $_SESSION['menu']="menu1";
  header("Location :page1.php");
}else{
  header("Location :login.php");
}
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 15h34   #10
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Ca y est, j'ai regardé ton code et j'ai fait exactement la meme chose.
Ca me fait plaisir, j'étais pas trop ds les choux ...

Sinon qq questions :

pourquoi le echo"<a href="">page ..." c'est pas très bien ?
Qu'y a t'il d'autre comme moyens ?

tu mets $password===$pass : pourquoi utilises tu la triple égalité et pas la double ?

Sinon merci beaucoup pour tes réponses, ca m'aide bien !
Je suis ds la bonne direction, il reste juste à trouver l'erreur...
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 15h41   #11
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Ha si j'ai encore une autre question :

tu mets à la fin header("Location : page1.php")
Moi ca ne fonctionne pas :
j'en déduisais au début que c'était dû au fait que le header etait créé ds un fichier inclus, mais apparement non ...
Tu as une idée de mon erreur ?
Citation:
Warning: Cannot modify header information - headers already sent by (output started at /home/.../index.php:13) in /home/.../administration.php on line 6
Encore
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 15h43   #12
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Ca veut dire qu'il y a eu un affichage avant le header....

En effet, le header marche comme le session_start(), il ne faut rien afficher avant.....

Le echo avec du HTML c'est pas cool quand tu fais de "long" echo, comme par exemple une page entière :-)

Je te conseil comme structure de page ceci :

Une page principale (par ex : index.php) dans laquelle tu mettras ton code HTML. En tête de cette page, tu mets le session_start(), et juste ne dessous des incudes contenant des traitements conditionnels sans affichage (sauf pour les condition bien sûr....) et enfin : tu trouve le point ou tu vzux mettre ton menu dans la page, et tu l'include....

Comme ca, tu n'auras plus de problèmes de "header already sent", puisque toute tes conditions de redirections sont en tête de ta page, sans affichage !!!!

Ca ferait comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<?php
if($login==.......
 
?>
<html>
<head>
</head>
<body>
 
</body>
</html>
Ou encore mieux, je suppose que ta page de login est un formulaire, donc dans l'action du formulaire tu mets l'adresse vers une page page PHP faisant tout le traitement conditionnel, et la le header marchera forcément puisque il n'y aura pas d'affichage.....

PS : pour le Passxord je préfère mettre 3 === parce que c'est l'égalité absolue en type etc..... Ca permet d'affirmer un peu plus le fait que le password est bon, et a le type que je veux...
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 16h01   #13
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
ok, il va falloir essayer tout ca et tout remanier ... chic

Je te remercie vraiment, ca va bien me decoincer !!!

A+
Seb
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 16h29   #14
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
De rien a plus...

Une lecon fondamentale en PHP : eviter tant que possible de mélanger le HTML et le PHP.... C'est plus facile à la relecture du code, et ca dégage pas mal de bugs...
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 14h20   #15
Membre du Club
 
Avatar de lelapinou
 
Inscription : avril 2003
Messages : 88
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2003
Messages : 88
Points : 43
Points : 43
Envoyer un message via MSN à lelapinou
Par défaut relance

Salut tout le monde.
Je post ici car je vois que Seb a eu à peu près le même soucis que moi. Sauf que le mien est assez bizarre, car ma variable globale n'a pas l'air de passer au travers des arborescences.
J'explique:
Je veux aussi changer le menu en fonction du niveau du membre qui se connecte. Mes fichiers de menus sont dans un répertoire include, ainsi que le fichier menus.php qui contient les conditions d'afficher tel ou tel menu.
Donc mon fichier menus.php je le mets dans mes pages par un include('include/menus.php'); et là ma surprise est que la valeur de ma variable globale est vide, alors que sur une page de la racine, elle contient la valeur escomptée.
Quelqu'un aurait une idée?
__________________
//-----------------------------------------\\\\
Peace on Earth
//-----------------------------------------\\\\
lelapinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h15   #16
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Une variable globale ????

Une Session, plutot ?
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h46   #17
Membre du Club
 
Avatar de lelapinou
 
Inscription : avril 2003
Messages : 88
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2003
Messages : 88
Points : 43
Points : 43
Envoyer un message via MSN à lelapinou
Par défaut variable de session

Ou c une variable de session.
Le problème est que cette variable est vide quand je l'utilise dans un fichier qui appartient à un dossier dans ma racine.

Elle est instance au index.php lors du log du membre.
Ensuite j'affiche un petit texte à la place de la zone de log, pour donner son nom et som niveau (donc j'utilise la variable), et j'aimerais changer le fichier menu à afficher en fonction de son niveau.

Voici ma page include/menus.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
session_start();
 
switch ($_SESSION['membre_niveau'])
{
case 1:
	echo '<SCRIPT LANGUAGE="JavaScript" SRC="'.$_SESSION['racine'].'include/menu_admin.js"></SCRIPT>';
	break;
case 2:
	echo '<SCRIPT LANGUAGE="JavaScript" SRC="'.$_SESSION['racine'].'include/menu_dirigeant.js"></SCRIPT>';
	break;
case 3:
	echo '<SCRIPT LANGUAGE="JavaScript" SRC="'.$_SESSION['racine'].'include/menu_membre.js"></SCRIPT>';
	break;	
default:
	echo '<SCRIPT LANGUAGE="JavaScript" SRC="'.$_SESSION['racine'].'include/menu_principal.js"></SCRIPT>';
}
 
?>
Merci!
__________________
//-----------------------------------------\\\\
Peace on Earth
//-----------------------------------------\\\\
lelapinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h08.


 
 
 
 
Partenaires

Hébergement Web