Ergebnis 1 bis 5 von 5

Thema: Deserialize klappt nicht

  1. #1
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Deserialize klappt nicht

    Hallo Team,

    ich schreibe gerade eine Erweiterung - eine Bewertungsfunktion mit Sternchen (erstmal für Kunden, später will ich Sie einstellen).
    An einer Stelle hänge ich:

    Ich will das jedes Mitglied nur einmal einen Shop oder ähnliches bewerten kann.
    Dazu will ich in die DB (tl_member -> Spalte shopsRated als BLOB) einen serialisierten String mit allen IDs schreiben, die das Mitglied schon bewertet hat.
    Mein Problem: Weder unserialize noch deserialize gibt mir den korrekten String aus:

    Weder mit array(deserialize(..)) gecasted, noch mit unserialize, noch mit deserialize (serialisierte Daten, true)

    Ausgabe deserialize($var, true):
    Pushed:Array ( [0] => $shopID [1] => 24 [2] => 25 [3] => 999 )
    Serialisiert:a:4:{i:0;s:7:"$shopID";i:1;s:2:"24";i :2;s:2:"25";i:3;s:3:"999";}
    Unserialisiert:Array ( [0] => s:64:"a:4:{i:0;s:7:"$shopID";i:1;s:2:"24";i:2;s:2: "25";i:3;s:3:"999";}"; )

    PHP-Code:
            array_push($shopsRated"24","25","999");
            
            echo 
    '<br /> Pushed:';   
            
    print_r($shopsRated).'<br />';
            
            
    $shopsRated serialize($shopsRated);
            
            echo 
    '<br /> Serialisiert:';   
            
    print_r($shopsRated).'<br />';
            
    //        $shopsRated = mysql_real_escape_string($shopsRated);
    //        echo '<br /> Escaped:';   
    //        print_r($shopsRated).'<br />';
     
            
    $objResult $this->Database->prepare("UPDATE tl_member SET shopsRated=? WHERE id=?")->execute(serialize($shopsRated),$memberID);
            
    $objResult $this->Database->prepare("SELECT shopsRated FROM tl_member WHERE id=?")->execute($memberID);
            
            
    //$shopsRated = unserialize ($objResult->shopsRated);
            
    $erg unserialize($objResult->shopsRated); 

            
            echo 
    '<br /> Unserialisiert:';   
            
    print_r($erg).'<br />'
    Hab noch nicht mit serialisierten Werten gearbeitet. Kann jemand weiterhelfen ? Danke .

  2. #2
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Contao hat eine extra Funktion namens "deserialize" dafür.

    http://blog.qzminski.com/article/ten...functions.html

  3. #3
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Hab ich geschrieben ....

    Danke für den Tipp,

    aber habe ich doch oben bereits geschrieben:
    "Weder mit array(deserialize(..)) gecasted, noch mit unserialize, noch mit deserialize (serialisierte Daten, true)"

  4. #4
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.451
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    moin,

    also in deinem Beispiel serialisierst du 2 x die Variable '$shopsRated'.

    Nimm das beim Execute in die DB mal weg.

    Gruß, Cliff

  5. #5
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Vielen Dank !

    Hi Cliffen,

    Vielen Dank ! Das wars !

    Es ist wieder eins der typischen "den Wald vor lauter Bäumen nicht sehen" Bsp. gewesen. Oder wahlweise auch "man sollte nicht Feiertage und Wochenenden und tage und nächtelang durcharbeiten". Sonst wird man Matsch im Gehirn !!!!

    Also Danke nochmal!

    VG Mickey.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •