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 :

Problème de sessions avec SimpleXml


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Problème de sessions avec SimpleXml
    Salut à tous ! Help me please je m'arrache les cheveux

    Depuis une page nommé Select.php je fais un autoload de deux classes, afin d'injecter des tableaux issus de la 1ere, dans la deuxieme. Jusque là tout va bien. Maintenant je souhaite stocker un de ces tableaux ( tableau d'objets simpleXml) dans une variable de session, et là tout va mal : ca marche pour des variables de type string mais avec mes tableaux, pourtants déclarés en public eux aussi !
    Je n'utilise pas le session_register comme mentionné dans la documentation php 5 ...

    La page :

    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
     
    <?php
    function __autoload($class_name) {
        require_once $class_name . '.php';
    }
    session_start();
     
    $t=$_GET['theme'];
    $d=$_GET['diapo'];
     
    if(isset($t)){
        $instance  = new ParcourClass();
        $instance->Partheme($t);
        $N=$instance->tabNom;
        $C=$instance->tabChem;
     
        $InstMin = new ClassMin($N,$C,$D);
        $Navigateur=$InstMin->return_browser();
        $InstMin->miniatures($Navigateur);
        $InstMin->finpage();
     
        $_SESSION['courant']=$instance->test; //Marche
        $_SESSION['courant']=$Navigateur; //Marche
     
        $_SESSION['courant']=$instance->tabNom; /* Warning: session_start() [function.session-start]: Node no longer exists in C:\laetitia\site\Phototheque\v.Class\Select.php on line 5
    
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\laetitia\site\Phototheque\v.Class\Select.php:5) in C:\laetitia\site\Phototheque\v.Class\Select.php on line 5
    
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\laetitia\site\Phototheque\v.Class\Select.php:5) in C:\laetitia\site\Phototheque\v.Class\Select.php on line 5
    3array(3) { [0]=>
    Warning: var_dump() [function.var-dump]: Node no longer exists in C:\laetitia\site\Phototheque\v.Class\Select.php on line 43
    object(SimpleXMLElement)#1 (0) { } [1]=>
    Warning: var_dump() [function.var-dump]: Node no longer exists in C:\laetitia\site\Phototheque\v.Class\Select.php on line 43
    object(SimpleXMLElement)#2 (0) { } [2]=>
    Warning: var_dump() [function.var-dump]: Node no longer exists in C:\laetitia\site\Phototheque\v.Class\Select.php on line 43
    object(SimpleXMLElement)#3 (0) { } }  */
    }
     
    if(isset($d)){
        echo $d;
        echo var_dump($_SESSION['courant']);
     
    }
    La classe source :
    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
     
    class ParcourClass 
    {
        public $tabChem=array();
        public $tabNom=array();
        public $tabDesc=array();
        public $xml;
        public $test;
     
        public function __construct(){
            $this->xml= simplexml_load_file("Fic.xml");
            $this->test="testok";
     
        }
     
     
        public function  Partheme($Theme){
                // $theme est fourni en parametre ds Select.php
            $requeteNomFic='/racine/'.$Theme.'/photo/NomFic';
            $requeteChem='/racine/'.$Theme.'/photo/Chemin';
            $i=0;
     
            foreach ($this->xml->xpath($requeteNomFic) as $nom) {
     
                foreach ($this->xml->xpath($requeteChem)as $chem){
     
                        $this->tabChem[$i]= $chem;
                        $this->tabNom[$i]=$nom;
     
                }
                    $i++;
            }
        }//function xml
    }
    Une idée ?!

  2. #2
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Tu peux essayer de sérialiser tes tableaux (fonction serialize et unserialize).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Tu veux dire stocker le tableau serilaisé dans la session ? Je vais essayer ... Mais personne sait pourquoi çà fonctionne pas ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut
    faudrai verifier que simplexml n'utilse pas de ressource (je crois que c'est le cas mais je ne suit pas sur)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $s=serialize($N);
    $_SESSION['courant']=$s; 
    ...
    $uns=unserialize($_SESSION['courant']);
    Warning: unserialize() [function.unserialize]: Node no longer exists in C:\laetitia\site\Phototheque\v.Class\Select.php on line 45

    Je me prend cette erreur autant de fois que d'enregistrements dans le tableau ! snif...



  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    j'ai pas bien vu dans ton code mais essaye transformé les objet simplexml en tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->tabChem[$i]= (array)$chem;
    $this->tabNom[$i]= (array)$nom;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par jeff_!
    j'ai pas bien vu dans ton code mais essaye transformé les objet simplexml en tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->tabChem[$i]= (array)$chem;
    $this->tabNom[$i]= (array)$nom;
    Malheureusement je ne peut pas car mon autre classe a besoin de recevoir les tableaux typés SimpleXml...

    D'autre part, ce que je trouve louche c'est que lorsque je n'utilise pas le unserialize et ke je fais un var_dump sur la session serialisée ca me donne ca :

    a:3:{i:0;O:16:"SimpleXMLElement":1:{i:0;s:12:"00042813.jpg";}i:1;O:16:"SimpleXMLElement":1:{i:0;s:12:"00042825.jpg";}i:2;O:16:"SimpleXMLElement":1:{i:0;s:12:"00042817.jpg";}}

    C'est pas serialisé ca, si ?!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Apres une bonne nuit de sommeil...
    $this->tabChem[$i]=(string)$chem;
    ..
    $s=base64_encode(serialize($N));
    $_SESSION['courant']=$s;
    $uns=unserialize(base64_decode($_SESSION['courant']));

    ouf !!

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

Discussions similaires

  1. Problème de session avec les Browser Iexplorer
    Par Andry dans le forum Langage
    Réponses: 2
    Dernier message: 16/07/2008, 08h10
  2. Problème de SESSION avec les "pseudo-frame" PHP
    Par kergad dans le forum Langage
    Réponses: 10
    Dernier message: 24/05/2008, 01h12
  3. Problème de session avec Firefox 1.5.x
    Par Andéa dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2006, 22h06
  4. [Sécurité] Problème de sessions avec IE6
    Par TheMoutch dans le forum Langage
    Réponses: 8
    Dernier message: 21/08/2006, 17h52
  5. problème de session avec asp
    Par salmer dans le forum ASP
    Réponses: 13
    Dernier message: 17/05/2006, 09h46

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