Unserialize Array Object

Hallo,

habe ein Problem mit meinen Quellcode, soviel vorweg in meinen alten Shops mit PHP 5.2 funktioniert es, mit der neuen Shopversion 4.9.7 und PHP 5.3 geht es nicht mehr, ich habe keine Erkärung dafür ob es an der PHP Version liegt oder andere Ursachen hat. Ich poste mal den Code, evtl. fällt irgendjemand auf, wo das Problem liegt, im Grunde wird bei diesem Code ein zusätzlicher Reiter erzeugt, der insofern vorhanden zusätzliche Daten zum Produkt anzeigen soll.

Wäre für hilfreiche Ansätze sehr dankbar, suche seit Tagen nach einer Lösung aber irgendwie klappt nichts.

Grüße aus Berlin

    $ean=$this->_tpl_vars['oDetailsProduct']->oxarticles__oxdistean->value;
    $result = "SELECT DescrTable FROM icecat_data WHERE EAN='".$ean."'";
    $rxDB=oxDb::getDb(true);
    $row=$rxDB->Execute($result);
    if ($row !== false && $row->recordCount() > 0) 
    {
      $rowDescrTable=$row->fields['DescrTable'];
      $arraytableout = unserialize($rowDescrTable);
      $this->_tpl_vars['ResultDescrTable']=special_character_replace_table($arraytableout);        
    }

und die Ausgabe

[{ if isset($ResultDescrTable) }]
    [{block name="details_tabs_techdata"}]
        [{capture append="tabs"}]<a href="#attributes">DATENBLATT</a>[{/capture}]
        [{capture append="tabsContent"}]
        <div id="attributes">
            [{foreach from=$ResultDescrTable item=ausgabeProduktDaten}]
             [{$ausgabeProduktDaten}]
            [{/foreach}]
        </div>
        [{/capture}]
    [{/block}]      
[{/if}]

Eventuell liegt es daran:

$rxDB=oxDb::getDb(oxDb::FETCH_MODE_ASSOC);

[QUOTE=foxido.de;178623]Eventuell liegt es daran:

$rxDB=oxDb::getDb(oxDb::FETCH_MODE_ASSOC);

[/QUOTE]

Nein leider nicht, habs getestet, weitere Ideen?

Grüße aus Berlin

Hi itnic :slight_smile:

was hast du schon alles probiert?

Viele Grüße,
indianer3c

Die bessere Frage wäre, wie genau das “geht nicht mehr” sich bemerkbar macht. Gibt’s keine Daten? Eine Fehlermeldung? Ist das Modul überhaupt aktiv?

oxArticle erweitert:


    public function hoLa(){
        $aReturn = array();
        $ean = $this->oxarticles__oxdistean->value;
        $sQ = "SELECT oxdistean FROM oxarticles WHERE oxean='" . $ean . "'";
        $rs = oxDb::getDb()->execute($sQ);
        if ($rs != false && $rs->recordCount() > 0) {
            while (!$rs->EOF) {
                $aReturn[] = $rs->fields[0];
                $rs->moveNext();
            }
        }
        return $aReturn;
    }

im Template:


[{assign var="ResultDescrTable" value=$oDetailsProduct->hoLa()}]

Grüße
Rafig

Hallo,

danke schon mal für die Antworten, was nicht mehr geht, ist die Ausgabe des Arrays.
@Rafig ich weiß nicht was du mir mit deinem Code sagen willst, die EAN erhalte ich, was nicht ausgegeben wird, ist tatsächlich nur der Inhalt vom Array. der schaut dann in etwa wie folgt aus:

a:230:{i:0;s:71:"<!-- Technical data beginning  --><div class=dinfo><table id=hor-zebra>";i:1;s:16:"<tr><td><strong>";i:2;s:13:"Energiebedarf";i:3;s:14:"</td></strong>";i:4;s:4:"<td>";i:5;s:5:"430 W";i:6;s:10:"</td></tr>"; ... 

Es liegt nur an der Ausgabe dieses Arrays was nicht funktioniert.

Grüße aus Berlin

Wie der vanilla_thunder schon schrieb wussten wir nicht was nicht funktioniert. SQL query war nur zum testen und es funktioniert. Wenn du möchtest ergänze meinen Code wie folgt und gib uns bescheid.

 
   public function hoLa(){
        $aReturn = array();
        $ean = $this->oxarticles__oxdistean->value;
        $sQ = "SELECT DescrTable FROM icecat_data WHERE EAN='".$ean."'";
        $rs = oxDb::getDb()->execute($sQ);
        if ($rs != false && $rs->recordCount() > 0) {
            while (!$rs->EOF) {
                    $arraytableout = unserialize($rs->fields[0]);
                    $aReturn[] = $this->special_character_replace_table($arraytableout);      
                $rs->moveNext();
            }
        }
        return $aReturn;
    }   

In tabs.tpl:


[{assign var="ResultDescrTable" value=$oDetailsProduct->hoLa()}]
[{ if $ResultDescrTable}]
    [{block name="details_tabs_techdata"}]
        [{capture append="tabs"}]<a href="#attributes">DATENBLATT</a>[{/capture}]
        [{capture append="tabsContent"}]
        <div id="attributes">
            [{foreach from=$ResultDescrTable item=ausgabeProduktDaten}]
             [{$ausgabeProduktDaten}]
            [{/foreach}]
        </div>
        [{/capture}]
    [{/block}]      
[{/if}]

Grüße
Rafig

Also habs getestet, mit dem gleichen Ergebnis, die EAN wird angezeigt, die Daten aus dem Array nicht. Früher hatte ich den Code direkt im Template (ja ich weiß, macht man nicht aber es funktionierte), jetzt hab ich den Code in oxarticle.php eingesetzt, dennoch klappt es nicht, die EAN steht da, aber das Array zeigt nichts. Zur Info, zu den gesteten Daten ergo der jeweiligen EAN gibt es auch Daten, also der Array dürfte nicht leer sein.

Grüße aus Berlin

Hi itnic :slight_smile:

vielleicht ist das serialisierte Array was sich in der Datenbank befindet kaputt und kann nicht in ein Array zurückgewandelt werden…

Viele Grüße,
indianer3c

Ergibt für mich keinen Sinn, in den alten Shops funktioniert es ja problemlos, im neuen Shop auf einem anderen Server ist nur die Shopversion aktuell, PHP Version ist 5.3 und das oxid Theme hat sich geändert, denke aber nicht das es daran liegt, ist übrigens eines von Rafig ;).

[QUOTE=itnic;178640]ist übrigens eines von Rafig ;).[/QUOTE]

Dann schickt doch mir Daten und ich sehe mir das genauer an. Ein kleines gratis Modul ist immer drin, überhaupt kein Problem.

Grüße
Rafig

@itnic Bei serialisierten Arrays reicht es aus den Dump falsch zu erzeugen das die Daten in Datenbank kaputt sind und nicht ausgelesen werden können. Daher macht es sehrwohl Sinn!

Großes DANKE :wink: an @Rafig, Gratismodul war drin, wie versprochen und alles funktioniert wie es soll.

Grüße aus Berlin

Abgefahren :slight_smile: