[PHP] Pb de serialisation ...

Pb de serialisation ... [PHP] - PHP - Programmation

Marsh Posté le 24-02-2003 à 18:13:57    

Bonjour,
 
Je souhaite sérialiser un tableau multidimentionnel et ca ne fonctionne pas.
Voici ce que j'utilise :
 

Code :
  1. $temp=htmlspecialchars(serialize($user));
  2. echo "<INPUT TYPE='HIDDEN' NAME='user' VALUE='$temp'>";


 
...
 

Code :
  1. $user=unserialize(stripslashes($user));
  2. while (list($key,$val)=each($user))
  3. {
  4. ...
  5. }


 
Il me dit : "variable passed to each() is not an array or object"
 
J'ai testé avec un tableau associatif et ca passe nickel (en utilisant la meme chose).
 
Merci d'avance ;)


Message édité par SCREAM78 le 24-02-2003 à 18:14:38
Reply

Marsh Posté le 24-02-2003 à 18:13:57   

Reply

Marsh Posté le 24-02-2003 à 19:37:18    

si tu recopies le while de ta seconde page dans ta première page pour tester ton tableau, ton code fonctionne t'il ?

Code :
  1. $temp=htmlspecialchars(serialize($user));
  2. echo "<INPUT TYPE='HIDDEN' NAME='user' VALUE='$temp'>";
  3. while (list($key,$val)=each($user))
  4. ...
  5. }


 
ceci dit, passer les valeurs du user dans un form n'est pas une très bonne idée, mais ça dépend de ce que tu veux faire...


Message édité par ethernal le 24-02-2003 à 19:37:59

---------------
...oups kernel error...
Reply

Marsh Posté le 24-02-2003 à 19:41:27    

Oui il fonctionne correctement. Il m'affiche tout ce qu'il faut ... c'est à n'y rien comprendre ... pourtant dans la doc php de la fonction serialize() ils disent que ca marche avec un tableau multidimentionnel ...
Mon tableau user a pour clé le nom de l'utilisateur et pour chaque utilisateur il y a le profil, le password etc ...
J'utilise un tableau de tableau ...  

Reply

Marsh Posté le 24-02-2003 à 19:50:45    

oui oui...
ton problème vient du fait que tu fais un htmlspecialchars.
tu dois appliquer la fonction inverse évidemment de l'autre côté !


---------------
...oups kernel error...
Reply

Marsh Posté le 24-02-2003 à 20:31:20    

Euh ... la je suis chez moi et pas au taff mais non il me semble pas ... je croyais que c'était stripslashes qui faisait ca ... c quoi la fonction inverse ?
Merci pour ton aide ;)

Reply

Marsh Posté le 24-02-2003 à 20:37:59    

je l'ai pas sous la main, mais va voir sur php.net la fonction htmlspecialchars(),  dans les commentaires des utilisateurs je pense qu'il y en a un qui l'a fait.
 
sinon, si j'étais toi, je passerais à un mode session pour stocker ce tableau. Modifier des données même sérializées est tout à fait possible sans trop de problème.
 
stripslasches <> addslashes ;)


Message édité par ethernal le 24-02-2003 à 20:38:42

---------------
...oups kernel error...
Reply

Marsh Posté le 24-02-2003 à 22:13:16    

Oui je pense que je vais regarder de plus pret ces sessions ;) merci pour ton aide :)

Reply

Marsh Posté le 25-02-2003 à 12:10:46    

Je suis passé par les sessions et ca marche beaucoup mieux.
J'ai juste un petit souci avec les frames :
Je m'explique ... j'ai divisé l'ecran en 3 parties : frame gauche haut, frame gauche droite, frame droite.
Dans la frame gauche haut je vais lire un fichier de conf, créer un tableau et enregistrer ce tableau dans la session ainsi que d'autres infos (je le fais une fois évidemment, uniquement si seesion_is_register renvoie false). L'utilisateur choisit dans un menu une action a effectuer, un formulaire est alors passé a right.php (frame de droite). Le pb est que dans la frame de droite j'ai pas les infos tant que j'ai pas fait un refresh global (sous mozilla et IE du moins ... sous Netscape ca marche ... va comprendre comment il fait). Je sais pas si je suis super clair ??

Reply

Marsh Posté le 25-02-2003 à 15:28:09    

met le code des sessions dans la page principale (celle qui crée les frames), tu auras plus de chance que ce soit la première chargée.  En effet, rien ne garanti que la frame de droite se charge avant celle de gauche... si c'est bien ça le problème (?)
 
ps : les frames c'est pas terrible non plus :(, tu vas rien gagner, sauf des problèmes...


---------------
...oups kernel error...
Reply

Marsh Posté le 25-02-2003 à 16:16:57    

Oui oui tu avais bien pigé le pb ...
J'ai mit tout le code de session dans la page qui charge les frame et ca va bcp mieux ;) j'y avais pas pensé ... je suis une vrai merde (loule).
Pour les frame j'ai pas le choix ... c'est ce que veut le chef ... il est vrai que ca apporte des emmerde mais bon ...

Reply

Marsh Posté le 25-02-2003 à 16:16:57   

Reply

Marsh Posté le 25-02-2003 à 17:06:19    

j'étais pas sûr d'avoir mis le doigt sur le problème ;)
 
 
explique lui qu'avec les pseudos frames php tu as les même avantages qu'avec les frames html :
- facilité de modification et de maintenance par la séparation du code
- en frame php, tu as moins de code (pas de <html></html> à chaque fois, juste un tableau) d'où une économie de la bande passante...
 
sans ses inconvénients :
- problèmes de sécurité (imagine que le client ne charge que la page de droite -> pas de session -> problème, je ne dis pas que c'est le cas sur ton site, mais il faut y penser)
- d'où une complexification du code et une charge de travail du serveur inutile pour faire des choses simples (pour gérer ce que je dis au dessus), contrairement au frames php.
- gestion des tailles d'écran souvent pénible (souvent en 800x600 tu ne vois plus rien). En frame-php tu n'auras jamais des assenceurs droite gauche si le gars à du 800x600...
 
a+


Message édité par ethernal le 25-02-2003 à 17:07:17

---------------
...oups kernel error...
Reply

Marsh Posté le 25-02-2003 à 17:16:56    

Merci beaucoup ... j'apprend des choses ;) ... je vais regarder de ce coté la si ca peut me simplifier la vie :D.
En tout cas un grand merci pour ton aide ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed