Téléchargement
illégal
Posez votre question Signaler

[php] pb avec (un)serialize [Résolu]

Nico - Dernière réponse le 19 mai 2010 à 15:27
Bonjour,
je réalise une petite application en php objet et rencontre une difficulté.
J'ai l'habitude d'utilisé les methodes serialize et unserialize afin de transformer mes objets pour les faire passer par des liens de pages en pages.
Héla dans cette exemple, cela ne veut pas marché et je ne parvient pas a trouver l'érreur....

code page 1:
/// Serialisation de l'objet pour pouvoir le passer dans le lien ///
$mon_detail=serialize($this);
<a onclick=window.open('modifier_planning.php?mon_detail=".$mon_detail."','','width=600,height=350,left=800,top=100');> Modifier </a>

code page 2:

<?php require("haut.php");
$mon_detail=unserialize($_GET["mon_detail"]);
echo $dede=$mon_detail->dede(); ?>

Le code a été simplifié,
$_Get nous permet bien d 'obtenir la chaine de caractere,
aucune erreur de signaler lors du unserialize, mais a la troisieme ligne, le prog ne reconnait pas l'objet....

Merci d'avance :)
(j'utilise php5 avec wamp serveur)
Lire la suite 

[php] pb avec (un)serialize »

15 réponses
Réponse
+17
moins plus
Bonjour,

comme l'objet est envoyé en URL et qu'il contient des signes particuliers, il convient de l'encoder correctement :

$monObjetEnUrl = rawurlencode(serialize($monObjet));

Dans la page de réception de l'objet :

$monObjet = unserialize(rawurldecode($monObjetEnUrl));
Drag - 24 nov. 2009 à 13:22
Merci Drag, ça marche très bien !!!! meme si dans mon cas le transfert se faisait à travers un formulaire avec la méthode POST.
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,

J'ai le même problème mais c'est assez bizarre, je me demande si c'est pas un pb avec Wamp.

J'ai testé mon fichier avec Xamp, tout fonctionne nickel, j'ai copié ces derniers sous Wamp, et là, mes serialize fontionnent plus.

Est ce que ca pourrait venir de là ? car sous Xamp, aucun problème.
Ajouter un commentaire
Réponse
+1
moins plus
Salut ! J'ai eu le même problème après l'up sur FREE,
résolu aussi en changeant le nom de la variable de session.
Le pourquoi du comment maintenant ... Aucune idée.
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour à tous,

J'ai eu le même genre de problème et je l'ai résolu en modifiant une config dans le fichier php.ini :

magic_quotes_gpc = off

Bien à vous.
Erniane - 15 févr. 2010 à 13:07
Bonjour,

meme problème, meme solution;

Le problème c'est que souvent, les installs par défaut de php sont avec une configuration magic_quotes_gpc = on

peut etre pour protéger les débutants qui n'auraient pas placé de protection eux memes sur leurs sites.

Voici un très bon article expliquant pourquoi désactiver ça, et comment faire en remplacement pour garder une certaine sécurité : http://www.phpfrance.com/tutoriaux/index.php/2005/04/17/29-les-magic-quotes

Voici également une page où décoder rapidement un tableau sérialisé qui serait vue comme illisible par php serialize : http://www.unserialize.net . Pratique également pour, du coup, réparer un tableau corrompu "from : serialize => to serialize" sans avoir a tapper son petit script ;)

Ces magic quotes sont aussi la plaie pour l'enregistrement de texte via tinymce.... ;)
Ajouter un commentaire
Réponse
+1
moins plus
J'ai moi aussi le meme probleme avec serialize/unserialize.
Le souci est que tout fonctionne bien mais un objet natif de php ne peut pas etre serialisé.
Par exemple si dans le code de votre class vous avez $this->connection = new mysqli(...);
vous pourrez sérialiser votre objet mais l'objet connection ne le sera pas.
Ajouter un commentaire
Réponse
+0
moins plus
Escusez moi j'ai oublié de préciser que si je fait le serialize/unserialize, sur la meme page, cela fonctionne parfaitement...
Merci
Ajouter un commentaire
Réponse
+0
moins plus
bonjour, j'aimerai savoir si tu as resolu ton probleme car j'ai le meme que le tien.
Merci
Ajouter un commentaire
Réponse
+0
moins plus
moi aussi j ai le même problème si quelqu'un a la solution
merci !!
Ajouter un commentaire
Réponse
+0
moins plus
J'arrive un peu après la bataille...

Alors... Résolu ou pas ?
Aymeric - 4 juil. 2007 à 23:19
1- j'ai le tableau suivant (Print_r):
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1

2- Que je serialize avec la fonction serialize(). le résultat est :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}

3- si je l'unserialize avec la fonction unserialize(). le résultat est bon :
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1

4- Je constitue la requête suivante (avec addslashes()), que j'execute :
UPDATE `srr__parameter` SET `scp_params`='a:2:{s:9:\"signature\";s:30:\"un signature bidon bidon bidon\";s:6:\"langue\";s:2:\"br\";}', `scp_date`=CURRENT_TIMESTAMP, `scp_scr`='0.50' WHERE `scp_login` =2 AND `scp_sct` =3


5- Je constitue la requête suivante, que j'execute :
SELECT * FROM `srr__parameter` WHERE `scp_login`=2 AND `scp_sct`=3

6- la valeur du champ `scp_params` est la suivante (donc idem qu'en 2 ?) :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}

Execution d'un test à tout hasard : if($data['scp_params']==$TestSerialize)
Non, pas égal - c'est là qu'est le Bug... une histoire d'encodage des caractères ? JE SECHE !

7- erreur déclenchée lorsque je tente d'appliquer unserialize() à `scp_params` :
le code : 96 - $Params = unserialize($data['scp_params']);

Notice: unserialize() [function.unserialize]: Error at offset 5 of 122 bytes in /var/www/*****.php on line 96


Pour finir, j'utilise un serveur PHP sous Ubuntu

Important :
error_reporting(E_ALL);

j'ai du activer l'error reporting de niveau le plus important (E_ALL) afin de générer la E_NOTICE signalée plus haut. sinon, aucune erreur n'est montrée.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

J'avais le meme type de probleme:
-1- Un object etait bien serialise() en page_1, et stocke sur une variable de $_SESSION['xxx']
-2- je recuperais bien cet object serialise en page_2, mais unserialize ne me le rendait pas (sans pour autant retourner FALSE)

Resolution
J'utilisais le meme nom pour la definition de class (registration), pour l'object instantie ($registration) et pour la variable de $_SESSION['registration']
J'ai change le nom de ma variable de $_SESSION et maintenant ca marche

Stephane
Ajouter un commentaire
Réponse
+0
moins plus
pliz all
how we link betwoon base de donnee annd php
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
j'ai le même problème sauf que je suis sous xampp et que mon magic_quotes_gpc = off.

Je stock mon objet dans ma BDD avec mysqli et bind_param et quand je le ressort, ça m'envoie une erreur du genre:
Notice: unserialize(): Error at offset 224 of 687 bytes in /opt/lampp/htdocs/engies/classes/Mot.php on line 165
Est-ce que bind_param modifie les données que l'on créé ?

Merci de m'aider, j'ai cherché mais j'ai pas trouvé...
Ajouter un commentaire
Ce document intitulé « [php] pb avec (un)serialize » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?