problème avec serialize

popo60
Invité n'ayant pas de compte PHPfrance

31 mai 2010, 21:27

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.

Eléphant du PHP | 314 Messages

31 mai 2010, 22:37

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) ?
Cordialement,
Julien - http://laravel.fr/

Mammouth du PHP | 672 Messages

01 juin 2010, 08:50

			    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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juin 2010, 21:52

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']);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2010, 22:18

Merci pour la réponse, j'ai utilisé la SESSION c'est plus simple et moins de problème.