serialize <=> unserialize

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • serialize <=> unserialize

    so, jetzt mal wieder ein Problem,
    welches mir gerade den letzten Nerv raubt

    Aufgabe:

    1. ein Array wird per serialize in einen String umgewandelt
    2. der String wird in einer MySQL DB gespeichert
    3. der String wird wieder aus der DB ausgelesen
    4. Wiederherstellung des Arrays mit unserialize

    klingt einfach, klappt aber nicht wie gewünscht

    Code:
    $array( "abc" , "123" , " ' ", " \" ", " \\' ", " \\\" ");
    $ser = serialize($array);
    // $query ist ein Object der DB Klasse
    $query->insert('insert into ... values (\\''.$ser.'\\')');
    
    $output=$query->select_single('select data from ...');
    $feld = unserialize($output['data']);
    
    print_r($feld);
    das Ganze funktioniert nicht mehr, wenn \ verwandt werden ???
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

  • #2
    addslashes() ?

    Kommentar


    • #3
      Ich habe das ganze mal ausprobiert (allerdings ohne den Datenbankschritt) und es funktioniert. Nur die erste Zeile musste ich halt ändern:

      PHP-Code:
      $array = array( "abc" "123" " ' "" \" "" \' "" \\\" "); 
      Oder das Problem liegt irgendwo bei der Datenbankabfrage....

      Kommentar


      • #4
        also stripslashes()

        aber wenn er die daten so, wie sie sind übergeben will, kommt man so nicht weiter

        Kommentar


        • #5
          was hast du denn da geändert?

          bei mir ist so:


          gespeichert wird ( print_r($array) )
          Code:
          Array
          (
              [a] => det
              [meta_blob1] => 123
              [bewertung] => 1
              [memo] => \'\\\'\"\\\"
              [test] => \\""bla"
          )
          nach dem auslesen
          hab ich dann aber in $result['data'] ein

          Code:
          a:5:{s:1:"a";s:3:"det";s:10:"meta_blob1";s:3:"123";s:9:"bewertung";s:1:"1";s:4:"memo";s:12:"'\'"\"";s:4:"test";s:8:"\""bla"";}
          und das funktioniert nicht, weil die Längen nicht mehr stimmen.

          Zb bei der Variable "test" steht eine Länge 8 (s:8)
          \""bla" sind aber nur 7 Zeichen, das kommt durch die beim Speichern
          in der DB verschwundenen \

          Es fehlen ihm einfach ein paar \ womit er das Array nicht wieder
          aufbauen kann, aber ich habe schon wieder eine Idee ...

          ... bin testen ...
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            also doch addslashes()?

            Kommentar


            • #7
              nope, weil er dann bei den ", welche von serialize erzeugt wurden auch ein \ voranstellt, also unserialize definitiv nicht geht
              TBT

              Die zwei wichtigsten Regeln für eine berufliche Karriere:
              1. Verrate niemals alles was du weißt!


              PHP 2 AllPatrizier II Browsergame

              Kommentar


              • #8
                PHP-Code:
                $test=array( "abc" "123" " ' "" \" "" \' "" \\\" ");
                var_dump($test);
                $ser addslashes(serialize($test));

                // $query ist ein Object der DB Klasse
                //$query->insert('insert into ... values (\''.$ser.'\')');
                $output['data']=$ser;
                //$output=$query->select_single('select data from ...');

                $feld unserialize(stripslashes($output['data']));

                var_dump($feld); 
                Also ohne Datenbank klappt es so ! Mit habe ich gerade keinen nerv es auszuprobieren (zu heiss) sorry.

                gruss

                rth
                H I L F E
                GD FreeType Antialising
                Gesuch PHP Entwicklungsumgebung
                ------------------------------------------
                Der Cmabrigde rael tset, sruf whoin du wlilst

                Kommentar


                • #9
                  das es ohne DB funzt weiß ich auch,
                  aber ich brauch es für die DB.

                  es liegt an der automatischen Entfernung der \
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #10
                    so gehts auch mit DB

                    Code:
                    function &dbunprep(&$data){ // bekommt den DB String und gibt das Datenarray zurück
                    	$puffer = str_replace(array("'"),array("\\\'"),$data);
                    	$array = unserialize($puffer);
                    	foreach($array as $key => $value){
                    		$array[$key]=str_replace(							
                    					array("²","³"),
                    					array("\\\\","\\\""),
                    					$value);
                    	}
                    	return $array;
                    }
                    function &dbprep(&$data){ // bekommt das Datenarray und gibt einen DB String zurück
                    	foreach($data as $key => $value){
                    		$array[$key]=str_replace(
                    					array("\\\\","\\\""),
                    					array("²","³"),
                    					$value);
                    	}
                    	return serialize($array);
                    }
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      das es ohne DB funzt weiß ich auch,
                      sorry die hitze



                      so gehts auch mit DB
                      sehr schön, direkt mal merken

                      gruss

                      rth
                      H I L F E
                      GD FreeType Antialising
                      Gesuch PHP Entwicklungsumgebung
                      ------------------------------------------
                      Der Cmabrigde rael tset, sruf whoin du wlilst

                      Kommentar

                      Lädt...
                      X