Impossible de déserialisé mon objet

Impossible de déserialisé mon objet - PHP - Programmation

Marsh Posté le 23-09-2004 à 22:01:42    

Voila je trimballe un object un peu partout dans mon code et j'ai besoin qu'il recharge la page à un certain, donc je passer l'object dans l'url avec serialize()
 
et je cherche ensuite à le désérialiser de l'autre coté
 

Code :
  1. class ini {
  2. /* global parameters */
  3. var $iniName; //the name of the current INI file
  4. var $action; //the current action
  5. /* Site parameters */
  6. var $siteTitle; //title of the site
  7. var $artByPage; //number of art displayed by page
  8. function selectConfig() {
  9.  echo "<form action=\"".$_SERVER["PHP_SELF"]."\" method=\"POST\">".
  10.   "<input type=\"submit\" name=\"create\" value=\"create\" />".
  11.   "<input type=\"submit\" name=\"edit\" value=\"edit\" />".
  12.   "<input type=\"submit\" name=\"delete\" value=\"delete\" />".
  13.   "</form>";
  14. }
  15. function defineAction() {
  16.  if (isset($_POST["create"])) $this->action = "create";
  17.  if (isset($_POST["edit"])) $this->action = "edit";
  18.  if (isset($_POST["delete"])) $this->action = "delete";
  19.  $giveObject = serialize($this);
  20.  header("Location: ".$_SERVER["PHP_SELF"]."?1&object=$giveObject" );
  21. }
  22. /* Show an input box to enter the new ini file name [DO NOT WRITE THE .INI IN HERE]*/
  23. function defineNewIniName() {
  24.  echo $this->action;
  25.  echo "<form action=\"".$_SERVER["PHP_SELF"]."?1\" method=\"POST\">".
  26.   "<input type=\"text\" name=\"iniName\" />".
  27.   "<input type=\"submit\" name=\"createIni\" value=\"create .ini\" />".
  28.   "</form>";
  29. }
  30. function showIniForm() {
  31.  //return to give a name if the name is empty
  32.  if (empty($_POST["iniName"]))
  33.   header("Location: ".$_SERVER["PHP_SELF"]."?1" );
  34.  #TODO : remove tags
  35.  $this->iniName = $_POST["iniName"];
  36.  echo "<form action=\"".$_SERVER["PHP_SELF"]."?1\" method=\"POST\">".
  37.   "<input type=\"text\" name=\"siteTitle\" />".
  38.   "<input type=\"text\" name=\"artByPage\" />".
  39.   "<input type=\"submit\" name=\"createIni\" value=\"add values\" />".
  40.   "</form>";
  41. }
  42. /* This method use a lot of others method in order to create a totally new .ini file */
  43. function createIni() {
  44.  $this->defineNewIniName();
  45.  if (isset($_POST["createIni"])) //once the name is given we show the form
  46.   $this->showIniForm();
  47. }
  48. }
  49. ob_start();
  50. $management = new ini;
  51. if (!isset($_GET["1"])) {
  52. $management->selectConfig();
  53.  if (isset($_POST["create"]) || isset($_POST["edit"]) || isset($_POST["delete"]))
  54.   $management->defineAction();
  55. }
  56. else {
  57. $management = unserialize($_GET["object"]);
  58. if ($management->action == "create" )
  59.  $management->createIni();
  60. }
  61. ob_end_flush();


 
Le probleme est tout en bas, ou je désérialiser mon $_GET["object"] dans $management pour retrouver ma class INI originale.
 
quand je fait un echo $_GET["object"] j'ai bien
 

Code :
  1. &object=O:3:%22ini%22:4:{s:7:%22iniName%22;N;s:6:%22action%22;s:6:%22create%22;s:9:%22siteTitle%22;N;s:9:%22artByPage%22;N;}


 
donc action est bien spécifié, pourtant ca me laisse une page blanche et n'execute pas createIni();
 
J'ai essayer avec rawurlencode aussi mais ca marche encore moins bien :o
 
fin bref, besoin d'aide


Message édité par Profil supprimé le 23-09-2004 à 22:03:34
Reply

Marsh Posté le 23-09-2004 à 22:01:42   

Reply

Marsh Posté le 24-09-2004 à 03:27:47    

Normal.
 
Tu passes un objet dans l'url, avec des caractères spéciaux (en particulier les " ) qui sont automatiquement remplacés par %22, tu dois donc nettoyer $_GET['object'] avant de l'utiliser (stripslashes entre autre, tu l'aurais vu tout de suite avec un simple echo de la variable)
 
 

Reply

Marsh Posté le 24-09-2004 à 07:25:27    

ben le rawurlencode est la pour retirer tout ca justement

Reply

Marsh Posté le 24-09-2004 à 10:16:12    

en fait la deserialization à un probleme, pas le rawurldecode
 
j'arrete pas d'avoir
 
Notice: unserialize(): Error at offset 0 of 104 bytes in /home/iffaw/www/meltingArt/ini_parse.php on line 34
 
:(

Reply

Marsh Posté le 24-09-2004 à 10:26:30    

trouvé \o/
 
En fait je serializait/encodais avec
 
rawurlencode(serialize($this))
 
et je recuperais avec
 
unserialize(rawurldecode($_GET["object"]))
En fait en faisant un echo il me replacait tout les " par \", et avec un simple stripslashes  ca fonctionne :)


Message édité par Profil supprimé le 24-09-2004 à 10:27:14
Reply

Marsh Posté le 24-09-2004 à 17:55:14    

Ce que je te disais depuis le début remarques :sarcastic:

Reply

Marsh Posté le 24-09-2004 à 18:58:46    

ah oui [:wam]
 
ben désolé :(

Reply

Marsh Posté le 24-09-2004 à 19:01:21    

Y a pas de problèmes hein, c'est pas moi qui ait perdu 3 heures ce matin sur le problème :D

Reply

Sujets relatifs:

Leave a Replay

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