IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec l'utilisation des variables de session


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre éprouvé Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Points : 1 042
    Points
    1 042
    Par défaut
    Bonjour.

    Est ce que ton session_start est bien placé avant toutes sorties html??? Même avant la balise <html>??

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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 ?


  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    PHP reste un langage de script, lu de haut en bas, de gauche à droite....

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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 !!

  9. #9
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Ok, ba à ce moment là, carrément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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");
    }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    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 ?
    Warning: Cannot modify header information - headers already sent by (output started at /home/.../index.php:13) in /home/.../administration.php on line 6
    Encore

  12. #12
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    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 : 68
    Points
    68
    Par défaut
    ok, il va falloir essayer tout ca et tout remanier ... chic

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

    A+
    Seb

  14. #14
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    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...

  15. #15
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    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?

  16. #16
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Une variable globale ????

    Une Session, plutot ?

  17. #17
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des variables de session
    Par opensource dans le forum ASP.NET
    Réponses: 5
    Dernier message: 12/08/2007, 15h51
  2. Réponses: 1
    Dernier message: 03/04/2007, 12h02
  3. [WD9] Problème avec l'utilisation des threads
    Par ramaro dans le forum WinDev
    Réponses: 2
    Dernier message: 29/01/2007, 11h51
  4. Problème avec l'utilisation des VBO
    Par Ekinoks dans le forum OpenGL
    Réponses: 12
    Dernier message: 09/07/2006, 18h42
  5. [XSLT] Problème avec la portée des variables
    Par sheura dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 10/01/2006, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo