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 :

POO : serialize et session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 19
    Points
    19
    Par défaut POO : serialize et session
    Bonjour,

    Je suis bloqué depuis des heures sur un problème qui doit être simple, mais je n'arrive pas à comprendre d'où ça vient et je ne trouve pas de sujet similaire.

    Je passe mon objet "site" de ma page1 à ma page2 en le mettant en session avec serialize/unserialize : tout fonctionne, j'affiche bien le nom de mon site en page2, issu de ma BDD.

    Mais en page1, le nom du site n'apparait pas (l.24) et il m'affiche Fatal error: Call to a member function nom() on a non-object in C:\Program Files\wamp\www\page1.php on line 24
    Si je mets en commentaires la mise en session (l. 21), le nom s'affiche correctement en page1, évidemment plus en page2.
    En quoi la mise session de mon objet fait-elle que je ne peux plus l'utiliser dans ma page1 ? Je précise que je ne n'ai pas encore implémenté les méthodes magiques sleep() et wakeup(), si ça peut avoir un rapport...

    Merci d'avance pour vos réponses

    page1.php :
    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
    <?php
    session_start();
     
    $id_site = 1;
     
    // On crée une instance de PDO
    $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // On émet une alerte à chaque fois qu'une requête a échoué. 
     
    // On charge les classes
    require_once('classes/site.class.php');
    require_once('classes/site.manager.class.php');
     
    // On crée une instance du manager de site
    $manager = new SiteManager($db);
     
    // On récupère les infos du site
    $site = $manager->get($id_site);
     
    // On met l'objet site en session
    $_SESSION['site'] = serialize($site);
    ?>
    <a href="page2.php">Page 2</a>
    Nom du site : <?php echo $site->nom(); ?>
    page2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    session_start();
     
    // On charge les classes
    require_once('classes/site.class.php');
     
    // On récupère l'objet site
    $site = unserialize($_SESSION['site']);
     
    echo $site->nom();
    ?>

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Pour que ta session désérialise correctement ton objet, il faut que l'implémentation de la classe soit connue avant.
    Donc ton code devrait être plus dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // On charge les classes
    require_once('classes/site.class.php');
    session_start();
    Tu dois savoir que le mécanisme des sessions en PHP fait automatiquement la sérialisation/désérialisation des instances de classe. Pas la peine de le faire manuellement.

    Tiens un peu de lecture ici

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup, c'était bien l'ouverture de session placée au mauvais endroit. J'ai également supprimé serialize/unserialize.
    Je poste le code au cas où ça pourrait aider quelqu'un.

    page1.php :
    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
    <?php
    // On charge les classes
    require_once('classes/site.class.php');
    require_once('classes/site.manager.class.php');
     
    session_start();
     
    $id_site = 1;
     
    // On crée une instance de PDO
    $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // On émet une alerte à chaque fois qu'une requête a échoué. 
     
    // On crée une instance du manager de site
    $manager = new SiteManager($db);
     
    // On récupère les infos du site
    $site = $manager->get($id_site);
     
    // On met l'objet site en session
    $_SESSION['site'] = $site;
    ?>
    <a href="page2.php">Page 2</a>
    Nom du site : <?php echo $site->nom(); ?>
    page2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    // On charge les classes
    require_once('classes/site.class.php');
     
    session_start();
     
    // On récupère l'objet site
    $site = $_SESSION['site'];
     
    echo $site->nom();
    ?>

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

Discussions similaires

  1. Php POO gestion avec session
    Par xoum89 dans le forum Langage
    Réponses: 13
    Dernier message: 24/01/2011, 15h54
  2. [POO] recuperer objet session dans du javascript
    Par decksroy dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/01/2007, 15h15
  3. [POO] serialize pour une connexion
    Par lafracas dans le forum Langage
    Réponses: 5
    Dernier message: 24/05/2006, 14h28
  4. [POO] Serialize et version de PHP ?
    Par knilten dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2006, 17h11
  5. [Sessions] Session + Serialize + Objets?
    Par Chiwawa dans le forum Langage
    Réponses: 2
    Dernier message: 28/09/2005, 20h32

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