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 :

Perte de valeur des variables session avec header


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Perte de valeur des variables session avec header
    Je suis en train de développer la partie accès membre d’un site et je souhaite utiliser le type url index.php ?option=actionafaire&param1=param1..
    Mais j’ai découvert que je perds mes valeurs des variables session en utilisant des header (‘location : redirectionurl’)

    J’ai 4 fichiers :
    - index.php qui contient le chemin relatif vers tous les fichiers utilisés
    - login.php qui contient le formulaire classique de connexion
    - veriflogin.php qui traite les différentes erreurs que peut faire l’utilisateur (ex : champ login vide, mot de passe incorrect…).si aucune erreur n’est rencontrée il fait une redirection vers la page ‘index.php ?option=acces_membre’
    - espace.php qui selon l’utilisateur connecté affiche les différentes actions possibles



    Voici le code source des deux fichiers veriflogin.php et espace.php

    Veriflogin.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
    27
    28
    29
    30
    31
    32
    <?php
    $login=$_POST['login'];
    $pwd=$_POST['pwd'];
    if (empty($login)) 
      {
    Traitement erreur
       }
    elseif (empty($pwd)) 
      {
    Traitement erreur
    );
         }
     
    else
       {
    connexion();
    $sql="select login,pwd,type from users where login='$login' and pwd='$pwd'";
    $req=mysql_query($sql) or die ('Erreur d\'exécution'.mysql_error());
    $nbre=mysql_num_rows($req);
    $res=mysql_fetch_array($req);
    mysql_close();
    if ($nbre==0)
      {
    Traitement erreur
       }
     else
     {
     $_SESSION['user_type']=$res['type'];
    header("Location:../index.php?option=acces_membre");
     } 
    }
    ?>
    Espace.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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Document sans nom</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
     
    <body>
    <h1 align="center">Administration du site</h1>
    <table width="100%"  border="1" cellpadding="0" cellspacing="0">
    <?php 
    if ($_SESSION['user_type']==1)
    {
    ?>
    Liste actions possibles
    <?php
    }
    else 
    {
    Liste actions possibles
    }
    ?>
    </table>
    </body>

    Tout marche nickel mais arrivé à l’espace membre je trouve l’erreur suivante :
    Notice: Undefined index: user_type in c:\program files\easyphp1-8\www\ex_projet\admin\membre\espace.php

    NB : la fonction session_start() est appelée dans le début du fichier index.php vu que tout les autres fichiers y sont inclus (inclus dans index.php)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Vérifie que tu as le meme id de session avant et apres car :
    Note: L'ID de session n'est pas passé avec l'en-tête Location même si session.use_trans_sid est activé. Il doit être passé manuellement en utilisant la constante SID.

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    le fichier index.php n'est pas dans le même répertoire que le script qui crée la session ?
    si oui, regarde si le cookie de session est bien accessible dans tous les répertoires

  4. #4
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    j'ai vérifié et j'ai bien le même id de session.
    Pour Mathieu , j'ai pas bien compris ce que tu veux dire par:
    le fichier index.php n'est pas dans le même répertoire que le script qui crée la session ?

  5. #5
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($_SESSION['user_type']==1)
    // devient
     
    if( isset($_SESSION['user_type']) && $_SESSION['user_type'] == 1 ) {
    }

    De plus, il vaudrait mieux faire le mysql_close() APRES l'affectation...

  6. #6
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    j'ai tt essayé mais tjr le meme pbm.

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    montre ton index.php stp

  8. #8
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    tous mes fichiers sont inclus dans index.php

    Voici sont contenu
    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
    <?php 
    session_start(); 
    ?> 
    <html> 
    <head> 
    <title>titre</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head> 
     
    <body > 
    <?php 
    $optionOK=array('erreur' => 'prive/login.php', 
    'acces_membre' => 'prive/espace.php', ); 
     
    if ((isset($_GET['option'])) && (isset($optionOK[$_GET['option']])) ) 
    { 
    include($optionOK[$_GET['option']]); 
    } 
    else 
    include ('prive/login.php'); 
     
    ?> 
    </body> 
    </html>

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    et login.php stp ? :angel:

  10. #10
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    voici le code de login.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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Document sans titre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
     
    <body >
     
    <h1 align="center">Identification</h1>
     
    <p align="center">Veuillez saisir votre nom d'utilisateur et mot de passe:</p>
    <form action="prive/veriflogin.php" method="post" enctype="multipart/form-data" name="login">
    <table width="350" border="0" cellpadding="5" cellspacing="5" align="center">
      <tr>
        <td>Nom d'utilisateur : </td>
        <td><input name="login" type="text" id="login" value="<?php if (isset($_GET['login'])){echo $_GET['login'];} ?>"></td>
      </tr>
    <?php 
    if (isset($_GET['type_erreur'])&&($_GET['type_erreur']=='nom_utilisateur_vide'))
    {
    ?>
    <tr>
    <td colspan="2">
    <font color="#FF0000" size="-1">Veuillez saisir un nom d'utilisateur SVP!</font>
    </td>
    </tr>
    <?php
    }
    ?>
      <tr>
        <td>Mot de passe : </td>
        <td><input name="pwd" type="password" id="pwd"></td>
      </tr>
    <?php 
    if (isset($_GET['type_erreur'])&&($_GET['type_erreur']=='mot_passe_vide'))
    {
    ?>
    <tr>
    <td colspan="2">
    <font color="#FF0000" size="-1">Veuillez saisir un mot de passe SVP!</font>
    </td>
    </tr>
    <?php
    }
    ?>
     <?php 
    if (isset($_GET['type_erreur'])&&($_GET['type_erreur']=='non_correspondants'))
    {
    ?>
    <tr>
    <td colspan="2">
    <font color="#FF0000" size="-1">Le nom d'utilisateur et le mot de passe ne correspondent pas!</font>
    </td>
    </tr>
    <?php
    }
    ?>
     <tr>
        <td colspan="2" align="center">
    	  <input type="submit" name="connexion" value="Se connecter">
          &nbsp;&nbsp;&nbsp;&nbsp;
    	  <input type="reset" name="reinitialiser" value="Réinitialiser"></td>
        </tr>
    </table>
     
    </form>
    </body>
    </html>

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Sans vouloir être méchant, n'envisagerais-tu pas de faire quelque chose de plus propre et cohérent ?

    Tu passes de $_POST à $_GET => pas bien
    Tu met un attribut name à une balise form => pas bien
    Tu fais des includes dans tous les sens => on s'y retrouve pas
    Tu doubles les en-têtes HTML => pas bien
    Tu fais aucun debug (print_r() var_dump())...


    PS : Sinon pour répondre à ta question c'est très simple : si t'avais fait quelque chose qui soit cohérent t'aurais pas de soucis...

    regarde l'attribut action de ton formulaire dans "login.php"
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="prive/veriflogin.php" method="post" enctype="multipart/form-data" name="login">
    ==> Tu ne passes pas par index.php => tu n'as donc pas de session_start()

    J'espere que tu auras compris que même toi, tu n'avais pas remarqué le chemin qu'empruntait ton script vu que tu nous donnais 2 fichiers qui n'avaient rien à voir

  12. #12
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Sans vouloir être méchant
    parfois il faut être méchant pour que les autres se rendent compte de leurs betises
    Merciiiiiiiiiiiiiiiiiiiiiiiii

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/08/2008, 21h00
  2. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08
  3. Perte de variables session avec IE6.0.28
    Par tom42 dans le forum Langage
    Réponses: 1
    Dernier message: 12/03/2007, 17h43
  4. Affichage des valeurs des variables avec tkprof
    Par hkhan13 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/07/2006, 11h59
  5. Réponses: 6
    Dernier message: 28/11/2005, 12h03

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