Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2006, 15h23   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 41
Points : 11
Points : 11
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 :
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 :
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 ?!
laetyboop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 15h45   #2
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Tu peux essayer de sérialiser tes tableaux (fonction serialize et unserialize).
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h20   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 41
Points : 11
Points : 11
Tu veux dire stocker le tableau serilaisé dans la session ? Je vais essayer ... Mais personne sait pourquoi çà fonctionne pas ?
laetyboop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h30   #4
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
salut
faudrai verifier que simplexml n'utilse pas de ressource (je crois que c'est le cas mais je ne suit pas sur)
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h31   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 41
Points : 11
Points : 11
Code :
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...


laetyboop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h38   #6
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
j'ai pas bien vu dans ton code mais essaye transformé les objet simplexml en tableau
Code :
1
2
$this->tabChem[$i]= (array)$chem;
$this->tabNom[$i]= (array)$nom;
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h50   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 41
Points : 11
Points : 11
Citation:
Envoyé par jeff_!
j'ai pas bien vu dans ton code mais essaye transformé les objet simplexml en tableau
Code :
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 ?!
laetyboop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2006, 10h17   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 41
Points : 11
Points : 11
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 !!
laetyboop est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web