Page 1 sur 1

Erreur de récupération d'un tableau provenant de MySQL avec

Posté : 15 nov. 2008, 22:38
par Mandrax
Bonjour à tous et à toutes,

Je me suis lancé dans la programmation d'une interface d'administration pour mon site internet mais je me heurte, sans trouver de solution, à un problème qui, apriori, lorsque je parcours différent forums et/ou sites, disent que la fonction serialize et unserialize fonctionnent à merveille et ne posent jamais de problèmes.
Hors, dans mon cas, il en est autrement!

Je m'explique. Tout d'abord, dans une première page, je choisis, dans une liste checkbox, une série de données que je souhaiterais voir afficher dans une autre page. J'effectue une serialisation du tableau que me renvoie le formulaire avec les checkbox. J'enregistre ce tableau dans un champ dans ma base donnée MySQL afin de pouvoir la récupérer quand je le souhaite sans devoir avoir recours à des variables de session.

Le tableau sérialisé du choix de mon formulaire avec des checkbox est bien enregistré dans ma base de donnée.

Cependant, c'est au moment de désérialiser ce tableau provenant de ma base de donnée que les problèmes se posent.

En effet, au moment d'utiliser unserialize sur mon tableau, il m'indique:

Code : Tout sélectionner

Warning: unserialize() expects parameter 1 to be string
J'ai beau parcourir plusieurs topics ou aides disponibles, je n'arrive pas à comprendre ce qui empêche la fonction unserialize de fonctionner correctement!

Concrètement, dans le fichier qui enregistre le tableau avec le résultat du formulaire avec les checkbox, j'ai:
$choice = $_POST["choice"]; /*La variable choice contient l'array des checkbox sélectionnées*/
$bd_choix=serialize($choice);
mysql_query("UPDATE affichage SET affichage_cours=$bd_choix WHERE affichage_cours_id=1");
Ici, aucun problème et si je vais consulter le champ en question dans phpMyAdmin, j'ai bien un tableau sérialisé qui se présente, par exemple, sous cette forme:

Code : Tout sélectionner

a:2:{i:0;s:2:"22";i:1;s:2:"32";}
Ensuite, dans la page où je souhaite récupérer ce tableau et effectuer le unserialize:
$selection="SELECT affichage_cours FROM affichage WHERE affichage_cours_id=1";
$resultat=mysql_query($selection); /*$resultat me renvoie bien le tableau, par exemple, enregistré plus haut*/
$data=unserialize($resultat);
Et ici, rien à faire, unserialize me renvoie non-stop

Code : Tout sélectionner

Warning: unserialize() expects parameter 1 to be string
Si quelqu'un a une solution à mon problème, je suis ouvert à tout!

Merci d'avance pour votre aide

Posté : 15 nov. 2008, 23:50
par sadeq
$selection="SELECT affichage_cours FROM affichage WHERE affichage_cours_id=1";
$resultat=mysql_query($selection);
$data=unserialize($resultat);
L'erreur est là : tu dois appliquer ton unserialize() au champ "affichage_cours" et non au résultat de la requête $resultat.
Il te faut faire d'abord un mysql_fetch_array() pour lire l'enregistrement retourné par $resultat.

Voici comment :
$selection="SELECT affichage_cours FROM affichage WHERE affichage_cours_id=1";
$resultat=mysql_query($selection); 
if ($resultat && $row = mysql_fetch_array($resultat)){
    $data=unserialize($row["affichage_cours"]);
    // ... ici la suite de ce que tu veux faire après dé-sérialiser ce champ
}

Posté : 16 nov. 2008, 00:59
par Mandrax
Un GRAND Merci à toi Sadeq :!:

Tu as résolu mon problème et tout fonctionne correctement grâce à toi ;)