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 :

mauvaise utilisation d'une variable de session


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut mauvaise utilisation d'une variable de session
    Bonjour,

    au départ, je pensais à un titre de discussion "bug de variable de session", ce qui aurait été plus accrocheur, mais m'aurait attiré des foudres, vu que le problème est certainement du à mon code et non à la variable de session...

    Bref, dans ma page initiale, j'affiche une liste d'erreurs et l'utilisateur a la possibilité d'afficher davantage de détails en cliquant sur un bouton "details" (et de ce fait, aller sur un fichier Details.php). Comme ces détails sont élaborés dans la page initiale et qu'il faut les transmettre au fichier Details.php, comme les détails sont dans une variable de type array, je les transmets via une variable de session. A priori, dans cette variable, j'y mets les données relatives à l'erreur sélectionnée, mais en fait, quelque soit cette erreur, dans la variable de session, on y trouve systématiquement les données relatives à la dernière erreur. Il y a donc vraisemblablement un bug chez moi, mais je ne le trouve pas. Merci pour l'aide.

    Page initiale :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      $nb_line = 0;
        foreach($result as  $errorname => $line) {
            echo $errorname;
            echo '<br/><br/>';
            echo "line:",$nb_line++."<br/>";
            var_dump($line);echo '<br/><br/>';
            $_SESSION['result'] = $line;
            ?>
     
    <a href = "?action=Details&debug=false" target="_blank"> (details) </a> <br/>
     
    <?php
     
        }

    Details.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Details
    {
        public function invoke(array $data = [])
        {
            $result = $_SESSION['result'];
     
            foreach($result as $one_result)
                echo $one_result['appliname']." ".$one_result['sesaid']."<br/>";
     
            echo '<br/>';
            ?>
            <a href="#" onclick="window.close()">Close the windows</a>
        <?php
        }
    }
    Le var_dump de la ligne 6 de la page initiale montre que les données sont correctes avant transmission ; par contre, une fois dans le fichier Details.php, la variable de session, copiée dans la variable $result contient systématiquement les données relatives à la dernière erreur. Pourquoi ?

    NB : le lien <a href = "?action=Details... va en fait sur le fichier index.php et le routeur placé dans ce fichier va appeler la méthode invokedu fichier Details.php.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    Bonjour
    Citation Envoyé par laurentSc Voir le message
    mais en fait, quelque soit cette erreur, dans la variable de session, on y trouve systématiquement les données relatives à la dernière erreur.
    C'est normal parce que tu n'enregistre que la dérnière erreur avec cette ligne $_SESSION['result'] = $line;.

    il faudrait ajouter des crochets vides afin de stocker toutes les erreurs dans le tableau $_SESSION["result"] : $_SESSION['result'][] = $line;

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ca me permet certes de récupérer mes données mais en faisant ça, au lieu une fois dans Details.php de récupérer uniquement les données relatives à l'erreur sélectionnée, je récupère un tableau de 5 lignes : les 2 premières contiennent les données relatives à la dernière erreur, et les 3 suivantes, 3 tableaux contenant les données relatives à toutes les erreurs (au nombre de 3 dans mon cas). C'est obligatoire ?

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    La question que tu dois te poser est : est ce que tu as besoin de générer 5 liens de détails d'erreurs ou bien seulement 1.

    Si tu veux quand même garder les 5 liens, et que les paramètres ?action=Details&debug=false sont exploitables dans la méthode invoke de la class Details, pourquoi ne pas ajouter un 3éme paramètre indiquant l'index de l'erreur "?action=Details&debug=false&indexError=<?=$nb_line?>" puis dans la class Details, tu n'as qu'à sélectionner l'erreur en fonction du paramètre indexError.

    Remarque : avec cette méthode, tu dois incrémenter la variable $nb_line APRES la géneration du lien.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Je viens de comprendre pourquoi dans la variable de session, je récupère les données relatives à la dernière erreur : à chaque boucle du foreach, je la mets à jour, donc forcément, elle contient les données relatives à la dernière erreur. Mais je ne vois pas comment faire pour qu'elle ne contienne que les données relatives à l'erreur sélectionnée. Tu as une idée ?

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    C'est ce que j'ai essayé de t'expliquer dans mon dernier post, non?

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

Discussions similaires

  1. Utilisation tableau dans une variable de session
    Par Etibru dans le forum Langage
    Réponses: 18
    Dernier message: 20/02/2018, 13h09
  2. Réponses: 6
    Dernier message: 09/04/2007, 16h53
  3. [WebForms]Comment utiliser une variable de session depuis JavaScript ?
    Par ThunderBib dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 05/05/2006, 14h01
  4. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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