Page 1 sur 1

Pb Serialize/unserialize tableau deux dimension

Posté : 13 janv. 2009, 23:35
par yan2new
Excusez-moi,
J'ai parcouru un bon nombre de forum avant de faire ce post mais aucune des solutions n'a réglée mon problème.

Je voudrais passer un tableau deux dimensions d'un formulaire à un autre. Dans le premier, je fais:

<INPUT type='hidden' name='shippings' value='<?=serialize($cp->shipping_methods);?>'>
L'opération se passe bien et lorsque je fais un echo de la variable $_POST récupérée, j'ai bien ma chaire de caractères

$_POST["shippings"]=a:3:{i:0;a:7:{s:4:\"name\";s:30:\"Priorité Mondial INTL\";s:4:\"rate\";s:6:\"376.43\";s:12:\"shippingDate\";s:10:\"2009-01-14\";s:12:\"deliveryDate\";s:28:\"www.postescanada.ca/?Lang=fr\";s:17:\"d ... XPressPost International\";s:4:\"rate\";s:6:\"228.44\";s:12:\"shippingDate\";s:10:\"2009-01-14\";s:12:\"deliveryDate\";s:10:\"2009-01-21\";s:17:\"deliveryDayOfWeek\";s:1:\"4\";s:9:\"nextDayAM\";s:5:\"false\";s:9:\"packingID\";s:3:\"P_0\";}i:2;a:7:{s:4:\"name\";s:23:\"Colis Postaux - Surface\";s:4:\"rate\";s:6:\"118.06\";s:12:\"shippingDate\";s:10:\"2009-01-14\";s:12:\"deliveryDate\";s:19:\"1 à 3 mois\";s:17:\"deliveryDayOfWeek\";s:1:\"4\";s:9:\"nextDayAM\";s:5:\"false\";s:9:\"packingID\";s:3:\"P_0\";}}

Mais voilà lorsque je fais

$shippings=unserialize($_POST['shippings']);
Unserailize me retourne false.
J'ai essayé urlencode/serialize et stripslasches/unserialize l'erreur reste la même sauf que lorsque j'affiche la varaible poste j'ai plutot ceci:

a:3:{i:0;a:7:{s:4:"name";s:30:"Priorité Mondial INTL";s:4:"rate";s:6:"376.43";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:28:"www.postescanada.ca/?Lang=fr";s:17:"del ... XPressPost International";s:4:"rate";s:6:"228.44";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:10:"2009-01-21";s:17:"deliveryDayOfWeek";s:1:"4";s:9:"nextDayAM";s:5:"false";s:9:"packingID";s:3:"P_0";}i:2;a:7:{s:4:"name";s:23:"Colis Postaux - Surface";s:4:"rate";s:6:"118.06";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:19:"1 à 3 mois";s:17:"deliveryDayOfWeek";s:1:"4";s:9:"nextDayAM";s:5:"false";s:9:"packingID";s:3:"P_0";}}

Quelqu'un a-t-il une idée?

Merci beaucoup

Posté : 13 janv. 2009, 23:47
par Berzemus
Sans parler du souci de désérialisation, mais si tu dois garder des infos à travers les pages, pourquoi ne pas utiliser les variables de session ?

Posté : 13 janv. 2009, 23:48
par @rthur
Bonjour,

Vu les slashes que tu as en trop dans ta variable POST, je dirais que les magic_quotes sont activées sur ton serveur et qu'un stripslashes() avant d'unserialiser ta chaine devrait résoudre ton problème

Posté : 14 janv. 2009, 00:00
par yan2new
Bonjour,

Vu les slashes que tu as en trop dans ta variable POST, je dirais que les magic_quotes sont activées sur ton serveur et qu'un stripslashes() avant d'unserialiser ta chaine devrait résoudre ton problème
Merci pour vos réponses. J'ai essayé le stripslashes() sans succès. C'est justement ce qui me pose question. C'est avec un stripslashes que j'obtiens le résultat suivant

a:3:{i:0;a:7:{s:4:"name";s:30:"Priorité Mondial INTL";s:4:"rate";s:6:"376.43";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:28:"www.postescanada.ca/?Lang=fr";s:17:"del ... XPressPost International";s:4:"rate";s:6:"228.44";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:10:"2009-01-21";s:17:"deliveryDayOfWeek";s:1:"4";s:9:"nextDayAM";s:5:"false";s:9:"packingID";s:3:"P_0";}i:2;a:7:{s:4:"name";s:23:"Colis Postaux - Surface";s:4:"rate";s:6:"118.06";s:12:"shippingDate";s:10:"2009-01-14";s:12:"deliveryDate";s:19:"1 à 3 mois";s:17:"deliveryDayOfWeek";s:1:"4";s:9:"nextDayAM";s:5:"false";s:9:"packingID";s:3:"P_0";}}

et quand j'applique unserialize() là dessus ça me rerourne false.

Par rapport aux questions de sessions je voulais d'abord étudier l'option serialize/unserialize

Posté : 14 janv. 2009, 10:55
par blof
Bonjour,

Le problème semble se situer là :
s:30:"Priorité Mondial INTL"; ( on devrait avoir s:21 )
s:19:"1 à 3 mois"; ( on devrait avoir s:10 )

Ca ressemble à un problème d'encodage quelque part.
Par contre pourquoi +9 pour un caractère accentué ?

Posté : 14 janv. 2009, 11:52
par @rthur
Bonjour,

Le problème semble se situer là :
s:30:"Priorité Mondial INTL"; ( on devrait avoir s:21 )
s:19:"1 à 3 mois"; ( on devrait avoir s:10 )

Ca ressemble à un problème d'encodage quelque part.
Par contre pourquoi +9 pour un caractère accentué ?
Effectivement bien vu, blof!
Peut être qu'en faisant un utf8_encode avant de sérialiser (et utf8_decode après avoir désérialisé) résoudrait le problème.
Sinon il y a aussi htmlentities() qui pourrait aider à contourner le pb...

Posté : 14 janv. 2009, 12:27
par Berzemus
Ou urldecode() .