Problème serialize...

Problème serialize... - PHP - Programmation

Marsh Posté le 02-12-2006 à 22:02:35    

Bonsoir.
J'ai un problème avec la fonction serialize de PHP...
Explication :  
j'ai 3 champs. Une fois rempli et validé, ca me donne un objet (PHP5).
Cet objet, je le serialise a l'aide de la fonction serialize() puis je stock la string dans la BdD.
Problème : Lorsque je unserialize un string precedemment mis dans une base de donnée, ca bloque, il ne me reconstruit pas l'objet et la fonction serialize renvoi false.
Attention : L'unserialize ne bloque QUE LORSQUE il y a une apostrophe dans un des champs rempli par l'utilisateur. Sans apostrophe tout marche nickel...
 
Oui j'ai chercher sur google qui m'a indiqué addslashes et html entities mais je n'ai rien reussi a faire...
J'ai aussi desactivé les magic quotes... j'y arrive pas.
Je sais que ca vient de la mais je sais pas comment faire pour resolver le problème.
 
Someone can help me?
 
Edit: j'utilise wamp 1.6.6 avec une BdD mysql.


Message édité par Agmoh le 02-12-2006 à 22:03:15
Reply

Marsh Posté le 02-12-2006 à 22:02:35   

Reply

Marsh Posté le 03-12-2006 à 02:33:18    

Tu pourrais parler français et pas un vilain franglais typique de ceux qui croient encore qu'être bon développeur c'est tout angliciser :o
 
Tu t'es surement demandé dans un premier temps si la valeur issue de la sérialisation était bien stockée, correctement et entièrement je suppose :??: :d
 
Ton addslashes() il est à quel endroit :??: Tu as sans doutes compris que c'est juste pour parer aux délimiteurs et autres caractères spéciaux de mysql que tu peux avoir dans ce que tu veux stocker. Donc si tu échappes pour stocker, faut peut être "déséchapper" pour s'en resservir :??: :whistle:
 
Htmlentities te servira à rien dans ton cas :jap:
 
Donc pour qu'on puisse avancer, faut savoir si le problème est situé au niveau :
- du stockage
- du déstockage
- du unserialize()
 
En gros je suis quasi sur que soit c'est le stockage qui foire, soit le déstockage ;)

Reply

Marsh Posté le 03-12-2006 à 03:09:08    

Merci de me répondre !  
voici mon code si ca peut t'eclairer :  
 
 
Serialisation
 

Code :
  1. $ref=$_POST['ref'];
  2.   $lib=$_POST['lib'];
  3.   $prix=$_POST['prixht'];
  4.   $parfum=$_POST['parf'];
  5.   $stock=$_POST['stock'];
  6. $ins_glace=new glace($ref,$lib,$prix,$parfum,$stock);
  7. $chaine=serialize($ins_glace); //je serialize
  8. $sess_sql -> execute("INSERT INTO glace (ref) VALUES (' ".$chaine." ')" ); //je stock dans la BdD


 
 
Deserialisation

Code :
  1. $sess_sql=new sql();
  2. $result=$sess_sql -> execute("SELECT * FROM $type" );
  3. while ($tresult=$sess_sql -> traite($result))
  4. {
  5.    if($type=="patisserie" )
  6.    {$ref="refp";}
  7.    else {$ref="ref";}
  8.    $objet=unserialize($tresult[$ref]);
  9.    echo "<fieldset>";
  10.    $objet -> Afficher();
  11.    echo"</fieldset>";
  12. }


 
voila mon code, j'ai virer toute les diverses fonction que j'ai pu tester sans succès.
 
Edit : ce code marche très bien. sauf lorsqu'il il y a un simple quote saisie dans un des champs.


Message édité par Agmoh le 03-12-2006 à 03:10:46
Reply

Marsh Posté le 03-12-2006 à 03:50:17    

Mais est ce que tu es sur que tes données sont présentes dans la base :??:
 
Parce que si t'échappes pas les guillements simples c'est normal que ça foire :spamafote:
 
Mais je répète ça sous entend d'éliminer les échappements quand tu récupères tes données :)

Reply

Marsh Posté le 03-12-2006 à 11:45:03    

Sans un mysql_real_escape_string lors de l'insertion, bof bof :/

Reply

Marsh Posté le 03-12-2006 à 12:18:21    

leflos5 a écrit :

Mais est ce que tu es sur que tes données sont présentes dans la base :??:

 

oui car kan je fais un var_dump de ce qui se trouve dans le resultat de ma requete, il m'affiche bien tout, y compris ce p**** d'apostrophe, non echappé :

 
Code :
  1. "O:5:"glace":5:{s:13:"glaceparfum";s:1:"1";s:12:"glacestock";s:1:"1";s:12:"produitref";s:9:"fuck'ths";s:12:"produitlib";s:2:"Fr";s:15:"produitprixHT";s:1:"1";}"
 

Il n'y a que quand je me ce foutu apostrophe que ca plante...

 


Message édité par Agmoh le 03-12-2006 à 12:20:00
Reply

Marsh Posté le 03-12-2006 à 15:47:11    

ok j'ai compris. je fais un str_replace de mon quote par son code ascii.

Reply

Marsh Posté le 27-05-2010 à 16:12:06    

Bonjour,
 
j'ai le même problème, peut tu me montrer ton code ?

Reply

Marsh Posté le 30-05-2010 à 13:34:16    

uh ! remontage de topic, j'ai fais ce truc il y a quatre ans, pour mes epreuves de BTS.. nostalgie oblige !
Donc... non je peux pas te montrer mon code !
Qu'est ce qui bloque chez toi ?
 
 

Reply

Marsh Posté le 30-05-2010 à 14:43:08    

eh bien exactement comme toi a priori ma variable se désérialise bien sauf quand elle contient une apostrophe

Reply

Marsh Posté le 30-05-2010 à 14:43:08   

Reply

Marsh Posté le 04-06-2010 à 10:27:53    

addslashes sur toute tes valeurs des tableau avant de serializer
array_map($ârray2serialize,addslashes);
//puis inversement lors de la récupération


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Sujets relatifs:

Leave a Replay

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