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 :

Variable de sessions non transférées


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Points : 18
    Points
    18
    Par défaut Variable de sessions non transférées
    Bonjour,
    Après une recherche sur plusieurs pages je n'ai pas réussi à trouver le pourquoi de mon problème et pourtant plusieurs avait le même soucis que moi, mais je pense avoir fait tout ce qu'ils leur manquait. Bref, ma variable de session ne se transmet pas d'une page à l'autre.

    J'ai donc un index.php (ou je demande à l'admin son login et son mdp), ensuite cela m'envoie sur la page de verification qui si les codes sont incorrects me renvoie sur la page d'index, mais s'ils sont corrects m'affiche la page d'admin avec des liens et je récupère bien la variable de la session !

    Mais une fois que je clique sur un lien pour aller sur une autre page il ne trouve plus la variable :O !

    voici les différents codes de mes pages :

    index.php
    Code HTML : 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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <title>Administration des interventions</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css">
    <body>
    <?php include("haut.html"); ?>
    <div id="content">
    <form action="verif.php" method="post">
    <p align="top"><b>Utilisateur :<b><br>
    <input type="text" name="login" />
    </p>
    <p>
    <p align="top"><b>Mot de passe :<b> <br>
    <input type="password" name="mot_de_passe" /><br> 
    <input type="submit" value="Valider" />
    </p>
    </form>
    </div>
    <?php include("bas.html"); ?>
    </body>
    </html>

    verif.php
    Code HTML : 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
     
    <?php
    $login = $_POST['login'];
    $_SESSION['login'] = $login;
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <title>Administration des interventions</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css">
    <body>
    <?php
    if (isset($_POST['mot_de_passe']) && (isset($_POST['login']))) // Si les deux variables existent on crée les variables mot de passe et login.
    {
        $mot_de_passe = $_POST['mot_de_passe'];
            $login = $_POST['login'];
    }
    else // Sinon si elle n'existe pas encore
    {
        $mot_de_passe = ""; // On crée une variable $mot_de_passe vide au départ
            $login = ""; // On créé une variable $login qui est vide au départ
    }
     
    if (($mot_de_passe == "elp6fg33h") && ($login == "admin")) // Si le mot de passe (elp6fg33h) et le login (admin) sont corrects on affiche la page
    {
     
    setCookie('Interventions','Liste des interventions',time()+24*3600);
     
    include ("haut.html");
    echo "<div id='content'><b><h1>Connexion réussie !</h1> <br><br><br> <img src='./IMG/intervention.jpg'><br><br><a href='recapitulatif.php'>Liste Récapitulative des demandes d'interventions</a><br><br><img src='./IMG/sep.jpg'><br><br><a href='recapitulatif.php'>Liste des demandes d'un compte Utilisateur/messagerie</a><br><br><img src='./IMG/compte.jpg'><br><br>Bienvenue sur la page d'administration <font color='red'>" . $login . "</font></b></div>";
    include ("bas.html");
    }
    else
    {
            include("haut.html");
    ?>
    	<div id='confirm'>
    	<SCRIPT language='Javascript'>
    	<!--
    	alert('Vous n\'avez pas renseigné tous les champs');
    	history.back(-1);
    	// -->
    	</SCRIPT>
    	</div>
    <?php
            include("bas.html");
    }
    ?>
    </body>
    </html>

    Jusqu'ici cela s'affiche bien, mais c'est ensuite que ça ne suit plus !

    recapitulatif.php
    Code HTML : 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
    70
    71
    72
    73
     
    <?php
    $_SESSION['login'] = $login;
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <title>Récapitulatif des interventions</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css">
    <body>
    Connecté en tant que: <b><font color="red"><?php echo $login; ?></font></b> <a href="<?php session_destroy(); ?>" onclick="alert ('Vous êtes maintenant déconnecté');">(Se déconnecter)</a>
    <?php
     
    echo '<pre>';
    print_r($_SESSION);
    echo '</pre>';
     
    $id_connexion=mssql_connect('P46TOVAX995','sa','test'); // identifiants de connexion à la BDD
     
    if (!$id_connexion) // Si la variable $id_connexion du dessus est différente des identifiants elle retourne un message d'erreur.
    echo "tentative échouée";
    else echo "connexion OK"; // Sinon elle affiche que la connexion est ok et elle va donc pouvoir exécuter le requête.
    $id_selectBD=mssql_select_db("intervention",$id_connexion);
     
    if (isset($_POST['observations']) AND isset($_POST['statut']))
    {
        $observations = str_replace("'", "''",$_POST['observations']); // on remplace le caractère "'" non pris en compte avec SQL server et on le remplace par "''", qui sera accepté et nous rendra l'apostrophe sans retourner de message d'erreur.
        $statut = ($_POST['statut']);
            
            // On protège la variable "id_itv" pour éviter une faille SQL
            $_POST['id_itv'] = addslashes($_POST['id_itv']);
            // C'est une modification, on met juste à jour les observations et le statut
            mssql_query("UPDATE [intervention].[dbo].[itv] SET [observations]='" . $observations . "', [statut]='" . $statut . "' WHERE [ID]='" . $_POST['id_itv'] . "'");
    }
    ?>
    <br>
    <h3>Récapitulatif des interventions</h3><br>
    	<table width="100%" border="1" id="recap">
    	<tr >
    			<td width="2%"><div id="tableau1">ID</div></td>
    			<td width="10%"><div id="tableau1">User</div></td>
    			<td width="10%"><div id="tableau1">Date</div></td>
    			<td width="15%"><div id="tableau1">Type</div></td>
    			<td width="9%"><div id="tableau1">Urgence Estimée</div></td>
    			<td width="25%"><div id="tableau1">Motif</div></td>
    			<td width="25%"><div id="tableau1">Observations</div></td>
    			<td width="4%"><div id="tableau1">statut</div></td>
    	</tr>
    	</table>
    <?php
    $requete = mssql_query("SELECT * FROM itv"); //execution de la requête SQL
     
    while ($ligne = mssql_fetch_array($requete))
    {
    ?>
    	<table width="100%" border="0">
    		<tr >
    			<td width="2%"><div id="tableau2"><font color="green"><?php echo $ligne['ID']; ?></font></div></td>
    			<td width="10%"><div id="tableau2"><?php echo $ligne['utilisateur']. "<br>" . $ligne['pc']; ?></div></td>
    			<td width="10%"><div id="tableau2"><?php echo $ligne['date']; ?></div></td>
    			<td width="15%"><div id="tableau2"><?php echo $ligne['type']; ?></div></td>
    			<td width="9%"><div id="tableau2"><?php echo $ligne['urgence']; ?></div></td>
    			<td width="25%"><div id="tableau2"><?php echo $ligne['motif']; ?></div></td>
    			<td width="25%"><div id="tableau2"><font color="red"><?php echo $ligne['observations']; ?></font> <br> <?php echo '<a href="modif.php?modifier=' . $ligne['ID'] . '">'; ?>Modifier</a></div></td>
    			<td width="4%"><div id="tableau2"><img src="<?php echo $ligne['statut']; ?>"></div></td>
    		</tr>
    	</table>
    <?php
    }
     
    mssql_close(); 
    ?>
    </body>
    </html>

    Et enfin ^^, modif.php qui renvoie sur recapitulatif.php pour la mise à jour (ça viendrait de la?) !

    Code HTML : 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
     
    <?php
    if ( isset ($_SESSION['login']) ) 
    {
    $_SESSION['login'] = $login;
    }
    else 
    {
    $login = "Vous n'êtes plus identifié"; 
    }
    ?>
    <html>
    <body>
    <title>Modification du statut et ajout des observations</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css">
    Connecté en tant que: <b><font color="red"><?php echo $login; ?></font></b> <a href="<?php session_destroy(); ?>" onclick="alert ('Vous êtes maintenant déconnecté');">(Se déconnecter)</a>
    <?php
     
    echo '<pre>';
    print_r($_SESSION);
    echo '</pre>';
     
    $id_connexion=mssql_connect('P46TOVAX995','sa','test'); // identifiants de connexion à la BDD
     
    if (!$id_connexion) // Si la variable $id_connexion du dessus est différente des identifiants elle retourne un message d'erreur.
    echo "tentative échouée";
    else echo "connexion OK"; // Sinon elle affiche que la connexion est ok et elle va donc pouvoir exécuter le requête.
    $id_selectBD=mssql_select_db("intervention",$id_connexion);
     
    if (isset($_GET['modifier'])) // Si on demande de modifier une demande
    {
        // On protège la variable "modifier" pour éviter une faille SQL
        $_GET['modifier'] = (htmlspecialchars($_GET['modifier']));
        // On récupère les infos de la demande correspondante
        $retour = mssql_query('SELECT * FROM [intervention].[dbo].[itv] WHERE [ID]=\'' . $_GET['modifier'] . '\'');
        $ligne = mssql_fetch_array($retour);
        
            
        $observations = str_replace("'", "''",$ligne['observations']); // on remplace le caractère "'" non pris en compte avec SQL server et on le remplace par "''", qui sera accepté et nous rendra l'apostrophe sans retourner de message d'erreur.
        $statut = stripslashes($ligne['statut']);
        $id_itv = $ligne['ID']; // Cette variable va servir pour se souvenir que c'est une modification
    }
    ?>
    <?php include("haut.html"); ?>
    <div id="content">
    <form action="recapitulatif.php" method="post">
    <textarea name="observations" cols="50" rows="8"><?php echo $ligne['observations']; ?></textarea><br><br>
    <select name="statut" size="1"><br><br>
    <option selected value="IMG/Traitement_en_cours.gif" alt="statut: En cours">Traitement de la demande en cours</option>
    <option value="IMG/demande_traitee.gif" alt="statut: terminé">Demande traitée </option>
    </select>
        <input type="hidden" name="id_itv" value="<?php echo $id_itv; ?>" />
    <input type="submit" value="Envoyer" id="button" />
    </form>
    </div>
    <?php include("bas.html"); ?>
    </body>
    </html>

    Désolé pour la longueur ^^ !

    D'avance merci de vos réponses !

    NB: Pas de session_start(); , je l'ai mis a 1 dans mon php.ini !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    J'ai pas lu entièrement tes scripts mais déjà je remarque que tu assignes à la variable $_SESSION['login'] la valeur de $login sur la 1ère ligne de recapitulatif.php et modifs.php, hors $login n'a pas de valeur à ce moment là.
    Il est fort probable que c'est le contraire que tu voudrais faire, assigner à $login le contenu de $_SESSION['login'].

    Rien à voir mais important aussi :
    Fais aussi attention à tes autres assignements, comme dans verif.php ou tu met la valeur de $_POST['login'] dans $login sans vérifier au préalable si $_POST['login'] existe.
    Il faut toujours contrôler les variables qui viennent de $_POST, $_GET, $_SESSION et $_COOKIES

    Regarde aussi à simplifier ton code, par exemple ton test :
    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
     
    if (isset($_POST['mot_de_passe']) && (isset($_POST['login']))) // Si les deux variables existent on crée les variables mot de passe et login.
    {
        $mot_de_passe = $_POST['mot_de_passe'];
    	$login = $_POST['login'];
    }
    else // Sinon si elle n'existe pas encore
    {
        $mot_de_passe = ""; // On crée une variable $mot_de_passe vide au départ
    	$login = ""; // On créé une variable $login qui est vide au départ
    }
     
    if (($mot_de_passe == "elp6fg33h") && ($login == "admin")) // Si le mot de passe (elp6fg33h) et le login (admin) sont corrects on affiche la page
    {
    [...]
    }
    Pourrait être simplifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($_POST['login']) && isset($_POST['mot_de_passe'])){
      if($_POST['login'] == 'admin' && $_POST['mot_de_passe'] == 'elp6fg33h'){
        [...]
      }
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse !
    J'ai modifié ce que tu m'as dit pour simplifier mon code !

    Par contre j'ai testé le reste, les variables de sessions ne passent toujours pas dans la page modif.php et recpaitulatif.php, une fois que l'on revient dessus après avoir validé la modification. (Lors de la mise à jour de la page)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Une autre erreur que je viens de voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php session_destroy(); ?>" onclick="alert ('Vous êtes maintenant déconnecté');">(Se déconnecter)</a>
    Ceci ne permet pas de détruire la session quand on clique sur le lien, ça l'a détruit à la lecture de la page.

    Tu ferais mieux de rediriger vers une autre page, ou la même si tu veux, bien que pour plus de clarté il est préférable de séparer les différents contrôles.
    Donc faire par exemple une page deconnexion.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    session_destroy();
     
    if(isset($_SERVER['HTTP_REFERER'])){
    	// Redirige vers la page ou se trouvait le lien qui a permis l'execution de ce script
    	header('location: '.$_SERVER['HTTP_REFERER']);
    }
    else{
    	// La page par défaut de redirection si jamais tu appelles directement le script
    	header('location: index.php');
    }
    ?>
    Il y a peut être encore d'autres erreurs, je ne corrige qu'au fur et à mesure de mes rapides inspections.

Discussions similaires

  1. Réponses: 27
    Dernier message: 16/04/2013, 11h09
  2. Variable de session non définie
    Par rimbaut dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2010, 10h49
  3. variable de Session non trouvée
    Par reman dans le forum Langage
    Réponses: 6
    Dernier message: 07/01/2009, 10h25
  4. Variables de sessions non transmises en local
    Par cerveza dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2007, 21h34
  5. Variable de session non rafraîchie
    Par Akela dans le forum Langage
    Réponses: 6
    Dernier message: 17/10/2007, 15h44

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