Pb Serialize/unserialize tableau deux dimension

Petit nouveau ! | 2 Messages

13 janv. 2009, 23:35

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

ViPHP
ViPHP | 4039 Messages

13 janv. 2009, 23:47

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 ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 janv. 2009, 23:48

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

14 janv. 2009, 00:00

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

Eléphant du PHP | 170 Messages

14 janv. 2009, 10:55

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é ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 janv. 2009, 11:52

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...
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 4039 Messages

14 janv. 2009, 12:27

Ou urldecode() .
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.