Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: modified eCommerce Shopsoftware 2.0.7.2 rev 14622 veröffentlicht

    DerNachbar

    • Viel Schreiber
    • Beiträge: 538
    Dann sollte es klappen mit der Nachbarin.  ;-)
    Finger weg von meiner Frau  :lol2:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Vor allem muß er den "Stiefelriemen Vorlage Manager" aktualisieren, mmh, ist das was perverses ?, ich würd mir Sorgen machen...  :flee-mrgreen:

    esoversum

    • Fördermitglied
    • Beiträge: 131
    • Geschlecht:
    Dann sollte es klappen mit der Nachbarin.  ;-)
    Finger weg von meiner Frau  :lol2:

     :lol: :lol2:

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Endlich mal den Testshop aktualisiert (von 2.0.5.1). Ich habe nach der Umstellung von PHP 7.4 auf 8.0/8.1 folgende Fehlermeldung, wenn ich den Warenkorb (shopping_cart.php) aufrufe:

    Unsupported operand types: string * string in File: /www/htdocs/shop/includes/classes/xtcPrice.php on Line: 508 {} {}
    Der Code in der xtcPrice.php sieht für mich unkritisch aus (Zeile 507-509):

    Code: PHP  [Auswählen]
      function xtcCalculateCurr($price) {
        return $this->currencies[$this->actualCurr]['value'] * $price;
      }

    Fehler, oder muss ich noch irgendwo anders was anpassen?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Hab' jetzt nicht den Code analysiert was alles die Ursache dafür sein kann, daß der Shop sowohl
    $this->currencies[$this->actualCurr]['value']
    als auch
    $price
    als String ansieht.
    Hast du evtl. Artikel im Warenkorb die es nicht mehr im Shop gibt ?
    Geh mal in die DB in die Tabelle customers_basket und lösche die Einträge mit deiner customers_id.
    Danach sicherheitshalber, falls es Attribute zu den sich im WK befindlichen Artikeln gab, das ausführen:

    Code: SQL  [Auswählen]
    DELETE FROM customers_basket_attributes WHERE customers_id NOT IN(SELECT customers_id FROM customers_basket);

    Danach legst du erneut einen Artikel in den WK und schaust ob das Problem weiterhin besteht.

    Nebenbei: Was steht in der DB-Tabelle currencies, gibt's da für alle Einträge einen Eintrag bei value ?

    Gruß,
    noRiddle

    *NACHTRAG*
    Evtl. sollte man in der betroffenen Funktion die beiden Werte casten:

    Code: PHP  [Auswählen]
      function xtcCalculateCurr($price) {
        return (float)$this->currencies[$this->actualCurr]['value']) * (float)$price;
      }

    [EDIT Tomcraft 23.07.2022: Code korrigiert.]

    Q

    • Fördermitglied
    • Beiträge: 1.531
    [...]
    Hast du evtl. Artikel im Warenkorb die es nicht mehr im Shop gibt ?
    [...]

    Nein. Der Artikel im WK ist zwar schon vor dem Update dort drin gewesen, aber gibt es noch.

    [...]
    Geh mal in die DB in die Tabelle customers_basket und lösche die Einträge mit deiner customers_id.
    [...]
    Danach legst du erneut einen Artikel in den WK und schaust ob das Problem weiterhin besteht.
    [...]

    :thumbs: Hat funktioniert. Wieso passiert sowas? Dann müsste man doch theoretisch alle offenen WK löschen, weil sonst jeder Kunde der noch einen offenen WK hat auf eine leere Seite stößt, sobald er auf den WK geht, oder?

    [...]
    Nebenbei: Was steht in der DB-Tabelle currencies, gibt's da für alle Einträge einen Eintrag bei value ?
    [...]

    Ja, für jeden Währung ein Eintrag. 1 bei Euro, usw. Müssten noch die Defaultwerte von der Erstinstallation sein.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Ja, der Grund sollte eruiert werden, weil ansonsten genau das bei anderen Kunden passieren kann, wie du richtig sagst.
    Im Warenkorb werde diversen Funktionen aus der xtcPrice-Klasse verwendet, u.a. xtcFormat(), welche wiederum die Funktion verwendet die in der Fehlermeldung bezeichnet ist.
    Sehr dubios, daß die bereits genannten Variablen von PHP als String interpretiert wurden. Das muß einen Grund haben, der mir leider mom. noch verborgen ist.
    Vielleicht hat jemand anders eine Idee.

    Gruß,
    noRiddle

    *NACHTRAG*
    War die Currency (= Währung) vielleicht auf eine eingestellt die den Status 0 hat, also nicht aktiv ist/war ?
    Die Einstellung steht auch in der Session und sie ist auch an die $_SESSION['customer_id']  gebunden, also an die ID dessen der gerade auf dem Shop ist.

    Ich habe dir vielleicht eine ungeschickte Vorgehensweise empfohlen. Hättest mal die Cookies löschen und dich neu einloggen sollen, dann hätten wir mehr gewusst.

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Danke!

    Ich sehe jetzt auch keinen wesentlichen Unterschied in der Datenbank zwischen den neuen und alten Einträgen. Wenn ich nochmal etwas Zeit finde, spiele ich das DB Backup von davor ein und teste noch etwas. Es dürfte schwer im Dev-Shop nachzustellen sein und dafür ein Ticket zu erstellen.... Mal schauen ob ich es noch etwas eingrenzen kann.

    Q

    • Fördermitglied
    • Beiträge: 1.531
    [...]
    *NACHTRAG*
    War die Currency (= Währung) vielleicht auf eine eingestellt die den Status 0 hat, also nicht aktiv ist/war ?
    Die Einstellung steht auch in der Session und sie ist auch an die $_SESSION['customer_id']  gebunden, also an die ID dessen der gerade auf dem Shop ist.

    Ich habe dir vielleicht eine ungeschickte Vorgehensweise empfohlen. Hättest mal die Cookies löschen und dich neu einloggen sollen, dann hätten wir mehr gewusst.

    Die Währungsauswahl und Optionen sind soweit alle "deaktiviert". Es wird alles mit EUR 1:1 verwurstet. Seltsam ist halt, dass es bei der Änderung auf PHP 8.0/8.1 nicht funktioniert und sobald ich wieder auf 7.4 wechsel, alles läuft. Hab jetzt aber auch keine Ahnung wie PHP mit Sessions umgeht.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Die Lösung dürfte das sein
    [...]
    Evtl. sollte man in der betroffenen Funktion die beiden Werte casten:

    Code: PHP  [Auswählen]
      function xtcCalculateCurr($price) {
        return (float)$this->currencies[$this->actualCurr]['value']) * (float)$price;
      }
    [...]

    (Das Zitat ist korrigiert, da es einen Klammerfehler gab, noRiddle)

    allein, ich weiß nicht warum das nötig ist, da die Werte aus der DB kommen und bereits Floats sein sollten.

    Gruß,
    noRiddle

    *NACHTRAG*
    Eigtl. müsste PHP 7.4, wenn auch keinen Error, so doch ein Warning werfen.

    [EDIT Tomcraft 23.07.2022: Korrektur in Antwort #34 übernommen.]

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.302
    • Geschlecht:
    Der Meldung nach wird beides als String erkannt. Ich weiß aber nicht ob die Meldung auch kommen würde, wenn nur ein Teil ein String ist.

    Was schon mal nicht sein kann, dass bei der Währung als Value ein String steht, da das direkt aus der DB kommt und es dort ein Decimal Feld ist.

    Ich wüsste jetzt auch nicht was es für einen Unterschied macht, die Artikel aus dem Warenkorb zu löschen und dann wieder neu reinzulegen.

    Was hast du jetzt genau gemacht, dass es funktioniert ?

    Gruß Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Der Meldung nach wird beides als String erkannt. Ich weiß aber nicht ob die Meldung auch kommen würde, wenn nur ein Teil ein String ist.
    [...]

    Exakt das dachte ich ebenfalls. Werde dafür mal ein schnelles Test-Case aufsetzen.

    Das Leeren der customers_basket  war nur so eine Idee für den Fall, daß sich zufällig ein Artikel im WK befinden sollte der nicht mehr aktiv oder nicht mehr im Shop ist.

    @oneQ
    Um nicht durch diesen meinen Post zu verwirren, beantworte doch bitte mal genau die Frage GTBs.

    Gruß,
    noRiddle

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.302
    • Geschlecht:
    - Ich vermute dass $price ein String ist.
    - Ich vermute noch weiter, dass das von einem Modul kommt
    - Ich vermute noch weiter dass es aus einem Versandmodul kommt und die Versandkosten nicht als float übergeben werden
    - Ich vermute weiter dass es ein Fremdmodul oder ein angepasstes Modul ist

    Uiuiui da lehne ich mich ganz schön weit aus dem Fenster. :panic:

    Gruß Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.973
    • Geschlecht:
    Die Vermutung ist nicht schlecht, denke ich.

    Allerdings:
    Auf PHP 8.1.7 ergibt das:

    Code: PHP  [Auswählen]
    $nr_var1 = '2.5';
    $nr_var2 = '2.0';
    var_dump($nr_var1 * $nr_var2);

    float(5)

    was auch der bisher bekannte Toleranz bei PHP-Variablen-Typen entspricht,
    zumal auch das explizite casten der Variablen zu string:

    Code: PHP  [Auswählen]
    $nr_var3 = (string)'2.5';
    $nr_var4 = (string)'2.0';
    var_dump($nr_var3 * $nr_var4);

    => float(5)

    kein Problem ergibt.

    Gruß,
    noRiddle

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.302
    • Geschlecht:
    Was ergibt :

    Code: PHP  [Auswählen]
    $nr_var1 = '2.5';
    $nr_var2 = '';
    var_dump($nr_var1 * $nr_var2);

    Gruß Gerhard
    Shop Hosting