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 d'éléments dans un tableau dans $_SESSION


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut perte d'éléments dans un tableau dans $_SESSION
    Bonjour,
    j'ai un problème avec une variable contenue dans le tableau $_SESSION.
    Cette variable est elle-même un tableau associatif et contient 5 éléments. chaque élément contient un tableau de 5 éléments.
    je sais pas si c'est très clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $_SESSION['Mavariable']=array();
    $_SESSION['Mavariable'][truc1]=(soustruc1_1,soustruc1_2,soustruc1_3,soustruc1_4,soustruc1_5);
    $_SESSION['Mavariable'][truc2]=(soustruc2_1,soustruc2_2,soustruc2_3,soustruc2_4,soustruc2_5);
    $_SESSION['Mavariable'][truc3]=(soustruc3_1,soustruc3_2,soustruc3_3,soustruc3_4,soustruc3_5);
    $_SESSION['Mavariable'][truc4]=(soustruc4_1,soustruc4_2,soustruc4_3,soustruc4_4,soustruc4_5);
    $_SESSION['Mavariable'][truc5]=(soustruc5_1,soustruc5_2,soustruc5_3,soustruc5_4,soustruc5_5);
    Je remplis ce tableau dans un formulaire X.
    Or, lorsque je soumets mon formulaire, dans la page suivante, seule subsiste la première entrée de mon tableau.
    Je ne comprends pas ce qui se passe, d'autant que j'ai d'autres tableaux (associatifs, et contenant eux-mêmes des tableaux de valeurs) qui, eux, sont bien conservés.
    Je me demandais si quelqu'un a déjà rencontré le problème, et s'il ne s'agit pas d'un petit truc qui m'aurait échappé.
    Encore que, pour essayer de comprendre, j'ai créé une autre page php qui ne contient rien d'autre qu'un print_r($_SESSION['Mavariable']).
    Et cette page est appelée lors de la soumission du formulaire.
    Du coup, je comprends vraiment pas comment je perds toutes les valeurs (sauf une) de mon tableau alors que je ne fais rien.
    Je suis ouvert à toutes les suggestions.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    Ta description et ton illustration ne correspondent pas.
    Tu devrais nous montrer le code qui remplit la tableau $_SESSION['tavariable'] s'il n'est pas trop long.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $requete="SELECT ID, type, nom FROM T1 WHERE ID=".$_SESSION['ID1'];
    $result=$bd->execRequete($requete);		
     
    while($champ=$bd->ligneSuivante($result)) {		
    $_SESSION['Mavariable1'][$champ['nom']]=array($champ['ID'],$champ['type'],'','');
    }
    A ce moment là, quand je fais un print_r($_SESSION['Mavariable'], j'obtiens ceci :

    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
     
    Array
    (
        [select5] => Array
            (
                [0] => 12
                [1] => select
                [2] => 95
                [3] => 2
            )
     
        [check4] => Array
            (
                [0] => 13
                [1] => check
                [2] => 104
                [3] => 
            )
     
        [radio3] => Array
            (
                [0] => 14
                [1] => radio
                [2] => 105
                [3] => 
            )
     
        [textarea2] => Array
            (
                [0] => 15
                [1] => textarea
                [2] => 106
                [3] => 
            )
     
        [text1] => Array
            (
                [0] => 16
                [1] => text
                [2] => 107
                [3] => 
            )
     
    )
    Dès que je poste ma page, il ne me reste que la première entrée...

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['Mavariable1']["'".$champ['nom']."'"]=array($champ['ID'],$champ['type'],'','');

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par siddh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['Mavariable1']["'".$champ['nom']."'"]=array($champ['ID'],$champ['type'],'','');
    Oula non, on va se retrouver avec des clefs entourées de ' inutils

    @jibouze
    As-tu tracé $_SESSION ? Tu dois la modifier qque part...
    Perso j'ai déjà envoyé envoyé des gros tableaux en session sans problème.

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    il me semblait qu un tableau associatif avait besoin des ' ou " justement pour les clés

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    bon, ça marche pas, mais ça montre un truc.
    Dans la première page, j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_SESSION['Mavariable']['truc1']=...
    $_SESSION['Mavariable']['truc2']=...
    Après avoir posté, je n'ai plus que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['Mavariable'][truc1]=...
    Le truc1 a perdu les quotes.
    Donc, il doit y avoir un traitement que je ne vois pas mais lequel.
    Par hasard, lorsqu'on fait un submit qui va d'une page A vers une page B, la page A n'intervient pas du tout ? Parce que la page B se contente d'afficher. Je vois donc pas pourquoi elle affiche pas pareil ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    @Seb : comment je peux tracer une variable de session ?
    Mais j'ai également des tableaux associatifs ou non, qui transitent sans problème.

  9. #9
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par siddh
    il me semblait qu un tableau associatif avait besoin des ' ou " justement pour les clés
    Un tableau associatif a besoin d'une chaîne de caractère en clef, oui. Mais ce n'est pas pour cela qu'il faut que la clef soit *littéralement* entourée de ' ou ".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $pays = 'France' ;
    $capitales[$pays] = 'Paris' ; // OK, $capitales['France'] => Paris
    $capitales["$pays"] = 'Paris' ; // " inutils, mais OK
    $capitales["'" . $pays . "'"] = 'Paris' ; // La clef devient 'France' et non France
    $capitales["'$pays'"] = 'Paris' ; // Pareil que précédemment
    @jibouze
    En PHP je trace mes variables avec la fonction recherche de mon éditeur. C'est basique mais ça fonctionne

    ar hasard, lorsqu'on fait un submit qui va d'une page A vers une page B, la page A n'intervient pas du tout ?
    Si tu n'as pas de JS ou autres trucs exotiques non. Tu donnes la main à la page du action dès le clique sur le bouton de soumission.

    Parce que la page B se contente d'afficher. Je vois donc pas pourquoi elle affiche pas pareil ?
    Est-tu vraiment sûr que tu ne modifies pas $_SESSION['varquidéconne'] après ton while( ) ?
    Peut-être parce que tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ( ... ) {
        // Je remplis $_SESSION['mavarialbequidéconne']
    }
    print_r($_SESSION['mavarialbequidéconne']) ; // OK pour le moment
    [...]
    // [BUG] Je modifie inopinément $_SESSION['mavarialbequidéconne']
    [...]
    // Affichage du HTML, <form>, etc.
    Pour contrôler essaie d'afficher $_SESSION['mavariablequideconne'] en bas de page, tout à la fin de tous tes traitements PHP et de ton HTML.

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    PS : Parfois tu parles de Mavariable et d'autres fois de Mavariable1, y'a peut-être un souci à ce niveau aussi...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Pardon pour l'alternance Mavariable et Mavariable1. Je pense que de ce côté là je suis bon.

    L'affichage de mon print_r se fait justement en dernière ligne de la page contenant le form pour être sûr que toutes les instructions ont été exécutées.

    Bon, ça me saoule. Je dois effectivement faire une manipulation sur cette variable mais je ne vois pas laquelle.
    J'ai testé en créant une nouvelle variable que je remplis avec l'ancienne qui déconne.
    Ô miracle, elle est intacte après la soumission.

    MAIS, je ne comprends toujours pas à quel moment je modifie ma variable car je l'affiche correctement tout en bas de la page, et je n'effectue aucun traitement dans la page appelée.
    Bon, je mets quand même résolu, parce que j'ai pas envie de vous faire perdre votre temps alors que c'est sûrement une erreur de crétin que je ne vois pas.
    Merci en tous cas, ça m'a permis de tester des trucs jusqu'à aboutir à quelque chose.


    Résolu :
    bon c'est pas très simple à expliquer donc je vous en ferai grâce, mais ce que je peux dire c'est que c'est effectivement une grosse boulette de ma part.

    Encore merci à tous. Même quand on n'a pas la réponse directe, le temps passé par les uns et les autres à essayer de vous répondre motive réellement.
    Je crois que j'en serais carrément venu à faire différemment si personne n'avait répondu !!

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

Discussions similaires

  1. Afficher un élément d'un tableau dans strftime
    Par rimbaut dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2010, 01h22
  2. [RegEx] Rechercher des éléments et les enregistrés dans un tableau
    Par arnaudperfect dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2010, 22h41
  3. Réponses: 6
    Dernier message: 12/09/2007, 15h58
  4. [Tableaux] Tester les éléments d'un tableau dans un if
    Par Leobaillard dans le forum Langage
    Réponses: 3
    Dernier message: 20/05/2006, 16h07
  5. Réponses: 4
    Dernier message: 11/01/2006, 09h22

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