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 serialisation [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 46
    Points : 274
    Points
    274
    Par défaut Problème de serialisation
    Bonjour à tous!

    M'étant assez récemment penché sur le problème du combo HTML/PHP/JS, je rencontre actuellement un léger soucis : la sérialisation.
    Je précise que j'ai pas mal cherché avant de poster ici et que rien ne m'a actuellement sauvé.
    (Je développe via AptanaStudio couplé à WAMP avec un charset UTF-8)

    Je vous expose mon problème :
    Je dispose d'une classe dans un fichier .inc que j'inclus à chaque page l'utilisant.
    1ere page : un simple formulaire dirigeant vers une 2nde page.
    2nde page : création d'une variable via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $maClass = new maClass();
    , remplissage des attributs via la superglobale $_POST et sérialisation de la classe via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $serMaClass = serialize($maClass);
    Je fais alors un var_dump qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string 'O:5:"Perso":13:{s:10:"�Perso�nom";s:3:"nom";s:10:"�Perso�niv";s:1:"1";s:11:"�Perso�sexe";s:6:"female";s:10:"�Perso�for";s:2:"10";s:10:"�Perso�dex";s:1:"9";s:10:"�Perso�agi";s:1:"4";s:10:"�Perso�con";s:1:"5";s:10:"�Perso�int";s:1:"5";s:10:"�Perso�pou";s:1:"4";s:10:"�Perso�vol";s:1:"6";s:10:"�Perso�per";s:2:"10";s:16:"�Perso�avantages";a:0:{}s:19:"�Perso�desavantages";a:0:{}}' (length=376)
    (oui, c'est long, mais tout y est)

    Je passe donc ma classe sérialisée en champ hidden d'un formulaire pour le récupérer à la 3eme page.
    3eme page : J'effectue un nouveau var_dump qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string 'O:5:' (length=4)
    J'aimerais donc comprendre par quel miracle il y a une telle perte d'information et comment y remédier.

    A ceux qui lisent ce post, aidez un pauvre étudiant en détresse!

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Je pense que c'est tout simplement les doubles quotes présentes dans ta chaine qui sont en conflit avec celles du value de ton hidden

  3. #3
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 46
    Points : 274
    Points
    274
    Par défaut
    Mon dieu, quel boulet je fais...
    Toujours est-il que malgré l'ajout d'un addslashes(), les guillemets sont toujours pris en compte...
    Je ré-affiche la variable avant un stripslashes() et j'obtiens Donc y'a du mieux, mais pour le coup j'ai toujours pas mon objet...
    Une idée supplémentaire? Je bloque vraiment ^^'

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par Askirkela Voir le message
    Mon dieu, quel boulet je fais...
    Toujours est-il que malgré l'ajout d'un addslashes(), les guillemets sont toujours pris en compte...
    Je ré-affiche la variable avant un stripslashes() et j'obtiens Donc y'a du mieux, mais pour le coup j'ai toujours pas mon objet...
    Une idée supplémentaire? Je bloque vraiment ^^'
    T'inquiètes, je me suis déjà arraché les cheveux sur des erreurs bien plus stupides

    Essaye avec htmlentities() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="serMaClass" value="<?php echo htmlentities($serMaClass, ENT_QUOTES, 'UTF-8'); ?>" />

    Et pour récupérer la valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $serMaClass = html_entity_decode($_POST['serMaClasse']);

  5. #5
    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
    Bonsoir,

    Moi je remettrai plutôt en cause le passage de classe serialisée d'une page à l'autre. Pour quelle raison tu dois procéder ainsi ?

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 46
    Points : 274
    Points
    274
    Par défaut
    Ok, donc faisant comme tu proposes, je récupère au moins la totalité de mon objet.
    Reste le problème de dé-sérialisation.
    Je récupère cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: unserialize() [function.unserialize]: Error at offset 32 of 427 bytes
    Sachant que le caractère n°32 est un ", le caractère suivant étant un ;

    Encore un coup de main pour régler ça?

    @Rawsrc : Disons que faire un modèle objet pour une feuille de perso de JDR, ça parait pertinent. Après, juger de la justesse d'une telle idée, ok ^^'
    Comment tu t'y prendrais, toi?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as pas à faire un html_entity_decode

    je te déconseille fortement de passer un objet comme ça

  8. #8
    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
    Citation Envoyé par Askirkela Voir le message
    Ok, donc faisant comme tu proposes, je récupère au moins la totalité de mon objet.
    Reste le problème de dé-sérialisation.
    Je récupère cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: unserialize() [function.unserialize]: Error at offset 32 of 427 bytes
    Sachant que le caractère n°32 est un ", le caractère suivant étant un ;

    Encore un coup de main pour régler ça?
    Pour éviter ceci tu peux très bien faire un base64_encode() et base64_decode()

    Citation Envoyé par Askirkela Voir le message
    @Rawsrc : Disons que faire un modèle objet pour une feuille de perso de JDR, ça parait pertinent. Après, juger de la justesse d'une telle idée, ok ^^'
    Comment tu t'y prendrais, toi?
    N'ayant aucun élément, je ne peux juger la justesse de ta méthode, juste que je trouve ça bancal et très risqué. Tu n'exposes pas tes objets dans tes pages.

  9. #9
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 46
    Points : 274
    Points
    274
    Par défaut
    Ok, donc avec un serialize ET un base64_encode, j'arrive à récupérer mon objet.
    Merci à vous pour votre aide.
    (Et maintenant, le problème du javascript qui ne marche plus sans y avoir touché... )

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Askirkela Voir le message
    Ok, donc avec un serialize ET un base64_encode, j'arrive à récupérer mon objet.
    Merci à vous pour votre aide.
    (Et maintenant, le problème du javascript qui ne marche plus sans y avoir touché... )
    pas contre niveau sécurité c'est zéro

  11. #11
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 46
    Points : 274
    Points
    274
    Par défaut
    Alors, juste pour préciser, c'est un projet perso qui n'est même pas forcément destiné à être mis en ligne
    Disons que ça tient plutôt d'un carnet de tests pour apprendre "quoi faire", "comment faire" et je me pencherais plus tard sur le "comment faire bien"

    Et juste pour savoir sur le côté sécurité, ça serait moins pire de passer mon objet en BDD et de le ressortir sur les pages suivantes?

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

Discussions similaires

  1. [JTree] Problème de Serialisation / Deserialisation
    Par jojodu31 dans le forum Composants
    Réponses: 6
    Dernier message: 21/07/2009, 10h35
  2. Problème de serialisation/deserialisation
    Par NoiBe dans le forum Services Web
    Réponses: 0
    Dernier message: 18/03/2009, 18h40
  3. Problème xstream serialisation
    Par PESkiller dans le forum Documents
    Réponses: 0
    Dernier message: 05/12/2008, 12h49
  4. Petit problème de serialisation
    Par Julien_C++ dans le forum C++/CLI
    Réponses: 8
    Dernier message: 22/01/2008, 19h59
  5. problème de serialisation
    Par volivi dans le forum Services Web
    Réponses: 2
    Dernier message: 19/10/2007, 17h44

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