[php] pb avec (un)serialize

Résolu/Fermé
Nico - 26 mai 2006 à 10:41
 laulemdev - 24 nov. 2013 à 15:46
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)
A voir également:

13 réponses

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));
16
Merci Drag, ça marche très bien !!!! meme si dans mon cas le transfert se faisait à travers un formulaire avec la méthode POST.
0
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.
2
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.
1
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
11 sept. 2009 à 17:15
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.
1
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.... ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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.
1
Déterrage de sujet !! :D
J'utilise base64_encode() en sus de serialize() et base64_decode() avec unserialize().

$variable=base64_encode(serialize($autrevariable);
et pour retrouver les valeurs d'origine

$newvariable=unserialize(base64_decode($variable);
Sous wampserver et php5, bien entendu.
Si jamais ça peut aider... :)
1
Escusez moi j'ai oublié de préciser que si je fait le serialize/unserialize, sur la meme page, cela fonctionne parfaitement...
Merci
0
bonjour, j'aimerai savoir si tu as resolu ton probleme car j'ai le meme que le tien.
Merci
0
moi aussi j ai le même problème si quelqu'un a la solution
merci !!
0
J'arrive un peu après la bataille...

Alors... Résolu ou pas ?
0
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.
0
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
0
pliz all
how we link betwoon base de donnee annd php
0
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é...
0