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 :

Certaines var sessions ne se transmettent pas entre pages.


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Par défaut Certaines var sessions ne se transmettent pas entre pages.
    [PHP 5.6.25] (je travaille en localhost pour le moment)
    Bonjour à tous,
    Pour le contexte, je suis dans le cadre d'un projet en train de coder un site de réservation de véhicules à partir d'une grille horaire définie.
    J'ai un souci concernant les variables de sessions. Avant toute chose, j'ai bien mis session_start(); au début de chaque page.

    Le projet :
    => index.php
    => profil.php
    => reserver.php

    Le déroulement :
    => Un utilisateur se connecte via un identifiant et un mot de passe dans index.php, une variable $_SESSION["username"] est créée et se transmets bien sur toutes les pages de mon site, je la visualise bien avec var_dump($_SESSION["username"]);. Sa connexion le fait arriver sur la page profil.php
    => Sur la page profil se trouve une grille horaire avec des horaires "cliquables", sous forme de différents submits button codés de cette façon :
    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
     
    	<form method="post" action="../php/reserver.php" id="horaires" >
    		<table>
    			<caption>Grille horaire</caption>
    			<tr>
    				<th>Commune</th>
    				<th>Arrêt</th>
    				<th colspan="2">Horaires</th>
    			</tr>
     
    			<tr class="L_C">				
    				<td>LYON</td>
    				<td>Arrêt 1</td>
    				<td><input type="submit" name="trajet" id="LC11" value="07:00" /></td>
    				<td><input type="submit" name="trajet" id="LC21" value="16:30" /></td>
    			</tr>
    			<tr class="L_C">
    				<td>LYON</td>
    				<td>Arrêt 2</td>
    				<td><input type="submit" name="trajet" id="LC12" value="07:10"></td>
    				<td><input type="submit" name="trajet" id="LC22" value="16:48"></td>				
    			</tr>
    			<tr class="L_C">
    				<td>LEMPDES</td>
    				<td>Arrêt 3</td>
    				<td><input type="submit" name="trajet" id="LC13" value="09:05"></td>
    				<td><input type="submit" name="trajet" id="LC23" value="18:35"></td>				
    			</tr>				
    // plein d'autres horaires
    		</table>
    	</form>
    Ce formulaire est disponible dans un horaires.php qui est include dans profil.php. Tout se passe bien, la grille horaire est affichée et chaque horaire est cliquable.

    => J'ai également dans profil.php include afficherReserv.php. Lorsque l'on clique sur un horaire le code suivant est lancé :
    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
     
     
    <?php
        if ($_SERVER["REQUEST_METHOD"] == "POST" and isset($_POST["trajet"])) {
     
            switch ($_POST["trajet"]) {
     
                case "07:00":
                    $_SESSION["sensTrajet"] = "Vers Cl-Fd";
                    $_SESSION["arretTrajet"] = "Arrêt 1";
                    $_SESSION["heureTrajet"] = "07:00";
                    $_SESSION["idTrajet"] = "LC11";
                    break
                ;
                case "07:10":
                    $_SESSION["sensTrajet"] = "Vers Clermont-Ferrand";
                    $_SESSION["arretTrajet"] = "Arrêt 2";
                    $_SESSION["heureTrajet"] = "07:10";
                    $_SESSION["idTrajet"] = "LC12";
                    break
                ;
    // tous les autres cas
                default:
                    $_SESSION["sensTrajet"] = "";
                    $_SESSION["arretTrajet"] = "";
                    $_SESSION["heureTrajet"] = "";
                    $_SESSION["idTrajet"] = "";
                    break
                ;      
            }
     
        }
     
    ?>
    Ce bout de code a pour objectif de me faire initialiser des variables de sessions pour alimenter dans la page reserver.php (l'action du formulaire plus haut) et plus tard une base de données phpmyadmin.

    => Mon problème :
    Lorsque je change la page d'action du formulaire de grille horaire en PHP_SELF, tout fonctionne. C'est-à-dire que si je fais echo $_SESSION["sensTrajet"]; , j'ai bien sous ma grille horaire la valeur correspondante à l'horaire cliqué (et ceci pour tous les horaires).
    Ceci veut bien dire que mon switch fonctionne et que les variables sont initialisées.

    Cependant, lorsque je remplace l'action du formulaire par la page reserver.php, j'arrive sur la page mais les variables de session sensTrajet, arretTrajet, heureTrajet et idTrajet sont vides !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Notice: Undefined index: heureTrajet in C:\wamp64\www\InterfaceReservations\php\reserver.php on line 3
    ET POURTANT ma variable de session $_SESSION["username"] est bien affichée !

    J'ai essayé plein de choses et recherché plein d'infos sur le net mais je désespère sur quelque chose qui, je suis sûr n'est juste qu'une simple erreur de ma part que je n'arrive pas à détecter. Sur la même page les variables de sessions fonctionnent, mais sur la prochaine elles ne fonctionnent plus.

    Merci d'avance de toute aide !
    Akhekhu

  2. #2
    Membre chevronné Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Par défaut
    Bonjour,

    Je te conseil de faire ceci pour voir ce qui est vraiment dans ta variable $_SESSION :

    De là tu verras surement l'erreur en question n'hésite pas à coller l'affichage du dump ici que l'on jette un oeil.

    @+

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Par défaut
    Alors dans ma page reserver.php le var_dump($_SESSION); me sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [username] => myUser )
    , les autres variables de session ne semblent pas prises en compte.

    J'ai tenté de modifier ma structure de la manière suivante mais j'ai toujours le même genre de soucis :

    => L'idée était que les informations récupérées en cliquant sur un horaire dans profil.php (donc arrêt, heure, etc) permettent d'alimenter un formulaire dans reserver.php (3 infos pré-remplies, l'utilisateur n'a plus qu'à choisir la date via un jQuery datePicker).

    => N'arrivant pas à transmettre les variables jusqu'à reserver.php, j'ai placé le formulaire à pré-remplir dans profil.php sous la grille horaire. J'ai donc modifié l'action des boutons submit en PHP_SELF une nouvelle fois, et cela fonctionne comme décrit dans le post original, les variables de Session pré-remplissent bien.

    Mais, parce qu'il y a un mais, j'ai toujours un souci.
    J'ai tenté de mettre ce formulaire à moitié pré-rempli (qui a un bouton de validation) en afin de voir si les variables de session se transmettaient via ce second moyen et cela fonctionne ! En partie.

    C'est-à-dire que mes variables de Session récupérées quand je clique sur un horaire sont bien transmises par ce biais-là. Mais le champ datePicker
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="calendar" name="calendar" readonly="readonly" placeholder="<?php date_default_timezone_get('France'); $date=date('d/m/Y'); echo $date ?>"/>
    qui fait appel au jQuery datePicker ne transmet pas sa propre variable de session. Le code de validation du formulaire pré-rempli est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["validReserv"])) {
     
            // Variables id, sens, arrêt, et heure du trajet déjà définies dans AfficherReserv.php
            $_SESSION["dateTrajet"] = $_POST["calendar"];
        echo $_SESSION["dateTrajet"];
            // Erreur s'il manque une donnée
            if ($_SESSION["sensTrajet"] == "" || $_SESSION["arretTrajet"] == "" || $_SESSION["heureTrajet"] == "" || $_SESSION["dateTrajet"] == "") {
                $reservErr = "Veuillez sélectionner un trajet";
    } else {
    // la suite de mon code
    }
    Une fois encore, j'arrive sur le même problème. Lorsque le formulaire pré-rempli est en action PHP_SELF, la variable $_SESSION["dateTrajet"] se remplit. Lorsqu'il est en action reserver.php, elle ne se transmet pas.


    Je ne sais pas si mon problème est assez clair, mais j'avoue bloquer complètement dessus :/

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Par défaut
    Après une petite semaine à travailler sur un autre projet, je suis revenu sur mon souci et je n'ai malheureusement toujours pas compris le problème. J'ai essayé de très nombreuses manipulations, mais j'obtenais toujours le même résultat.

    Pour pallier à ce problème j'ai finalement intégré le datePicker dans le formulaire de la grille horaire (au-dessus du premier horaire). De cette manière, j'ai décalé mon code de validation de réservation dans le afficherReserv.php. Dans ce cas de figure toutes les variables sont bien initialisées en même temps.
    C'est une légère dérive des specs initiales mais pas bien méchant et étant donné que je ne peux passer plus de temps à tenter de comprendre le problème j'ai du me résoudre à passer par là.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/01/2011, 15h10
  2. [SQL-Server] Les accents ne passent pas entre MS SQL et PHP ?
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 34
    Dernier message: 17/11/2008, 15h22
  3. Réponses: 1
    Dernier message: 21/02/2008, 15h36
  4. [Sécurité] Session qui ne fonctionne pas!!!!
    Par philippef dans le forum Langage
    Réponses: 5
    Dernier message: 27/10/2005, 17h35
  5. [VB.NET] Durée vie var session vs redirect page login
    Par fabthebreton dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/12/2004, 17h35

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