Page 1 sur 1

problème avec serialize

Posté : 31 mai 2010, 21:27
par popo60
Bonjour à tous,
J'ai serialize un tableau que j'ai passé dans un champ hidden d'un formulaires, voici ce que je récupère, mais quand je fais un echo de $a[0] je ne récupère rien !
Comment faire pour afficher les éléments du tableau.

Code : Tout sélectionner

echo ($_POST['cacher']); $a =unserialize($_POST['cacher']); echo $a[0] ; a:15:{i:0;s:12:\"ARM_0003.jpg\";i:1;s:1:\"1\";i:2;s:1:\"2\";i:3;s:1:\"3\";i:4;s:5:\"60€\";i:5;s:12:\"ARM_0030.jpg\";i:6;s:1:\"4\";i:7;s:1:\"5\";i:8;s:1:\"6\";i:9;s:6:\"141€\";i:10;s:12:\"ARM_0133.jpg\";i:11;s:1:\"7\";i:12;s:1:\"8\";i:13;s:1:\"9\";i:14;s:6:\"222€\";}
Merci pas avance de votre aide.

Re: problème avec serialize

Posté : 31 mai 2010, 22:37
par AoSiX
Salut,

je ne suis particulièrement pas fan de décryptage de données sérialisées :p Peut tu déjà faire un print_r($a) ?

Re: problème avec serialize

Posté : 01 juin 2010, 08:50
par macgawel
			    echo ($_POST['cacher']);
			    $a =unserialize($_POST['cacher']);
			    echo $a[0] ;

Code : Tout sélectionner

a:15:{i:0;s:12:\"ARM_0003.jpg\";i:1;s:1:\"1\";i:2;s:1:\"2\";i:3;s:1:\"3\";i:4;s:5:\"60€\";i:5;s:12:\"ARM_0030.jpg\";i:6;s:1:\"4\";i:7;s:1:\"5\";i:8;s:1:\"6\";i:9;s:6:\"141€\";i:10;s:12:\"ARM_0133.jpg\";i:11;s:1:\"7\";i:12;s:1:\"8\";i:13;s:1:\"9\";i:14;s:6:\"222€\";}
Bonjour.

1. Pour du code php, merci d'utiliser plutôt les balises
, c'est plus clair.

2. Si je comprends bien, tu envoies en POST la chaine de cractères sérialisée ?
=> Au cas où tu ne l'as pas remarqué, les apostrophes sont echappées (suite au passage en POST). Du coup, [b]unserialize()[/b] ne reconnaît plus la chaine.

[b]serialize()[/b] sert, à la base, pour stocker un tableau(objet) dans un fichier, pas pour passer un tableau en paramètre.
Trois solutions (enfin, il y a trois solutions qui me viennent à l'esprit) :
- Utiliser autant de champs cachés que de variables, plutôt qu'un seul qui contient le tableau sérialisé.
- Construire toi-même une chaîne au lieu d'utiliser [b]serialize()[/b].
- Utiliser des sessions et stocker le contenu du tableau dedans. Ca me semble la meilleure solution...

Re: problème avec serialize

Posté : 01 juin 2010, 21:52
par Ryle
Si les magic quotes sont activés sur le serveur, alors effectivement comme l'indique macgawel, les guillemets et apostrophes de ta chaine vont être protégés d'un antislash qui t'empêchent de reconstruire le tableau. Il suffit donc de les retirer.

Pour cela, tu peux utiliser stripslashes() pour les supprimer avant de dé-serialiser :)
$a =unserialize(stripslashes($_POST['cacher']));
echo $a[0] ;
Tu peux aussi tester si les magic quotes sont activées sur le serveur :
if (get_magic_quotes_gpc())
   $a =unserialize(stripslashes($_POST['cacher']));
else
   $a =unserialize($_POST['cacher']);

Re: problème avec serialize

Posté : 01 juin 2010, 22:18
par Invité
Merci pour la réponse, j'ai utilisé la SESSION c'est plus simple et moins de problème.