zencartpro / zencart-german-grundsystem

Zen Cart ist eine kostenlose unter der GPL-Lizenz veröffentlichte Open-Source Shopsoftware. Das System wird in den USA entwickelt. Die deutsche Zen Cart Version ist eine Anpassung der amerikanischen Version an die Bedürfnisse von Onlineshopbetreibern im deutschsprachigen Raum.
https://www.zen-cart-pro.at
GNU General Public License v3.0
6 stars 3 forks source link

Bei Kleinunternehmerregelung: Uncaught ValueError: Unknown format specifier in /includes/functions/extra_functions/vataddon.php #45

Closed aurixan closed 5 months ago

aurixan commented 5 months ago

Seit version 1.5.7h (upgedate von 1.5.7f) bekomme ich zeitweise viele debug logs mit immer dem gleichen Fehler. Wenn ich selbst durch die Shop-Pages browse, sehe ich keine debug logs. Woran kann das liegen?

[24-Apr-2024 18:32:45 Europe/Berlin] Request URI: /index.php?main_page=product_info&products_id=54&language=en%25'%20and%2020%3d20%20and%20'%25'%3d', IP address: --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "'" in /includes/functions/extra_functions/vataddon.php:23 Stack trace:

0 /includes/functions/extra_functions/vataddon.php(23): sprintf('
<span clas...', '0% ')

1 /includes/functions/functions_prices.php(422): vatAddOn(Object(queryFactoryResult))

2 /includes/templates/responsive_classic/templates/tpl_product_info_display.php(119): zen_get_products_display_price(54)

3 /includes/modules/pages/product_info/main_template_vars.php(158): require('/is/htdocs/wp11...')

4 /includes/templates/responsive_classic/common/tpl_main_page.php(179): require('/is/htdocs/wp11...')

5 /index.php(95): require('/is/htdocs/wp11...')

6 {main}

thrown in /includes/functions/extra_functions/vataddon.php on line 23.

webchills commented 5 months ago

Da wird anscheinend ein so nicht existierender Artikel von einem Spider aufgerufen.

Ändere mal in includes/functions/extra_functions/vataddon.php

Zeile 13

von

if(DISPLAY_VATADDON_WHERE == '0'){`

auf

if((DISPLAY_VATADDON_WHERE == '0') || ($product_check->EOF)) {

Bitte melde zurück, ob diese Logs nach dieser Änderung noch auftreten

aurixan commented 5 months ago

Ich werde die Änderung einbauen und melde mich in ein paar Tagen zurück, weil das Problem nicht jeden Tag aufgetreten ist.

aurixan commented 5 months ago

Die debug logs treten leider auch mit dem geänderten Code wieder auf. Heute gab es innerhalb von 7 Sekunden 10 log dateien. Jede der 10 logs hat eine andere ip-addresse. Die product-id 54, auf die zugegriffen wird, existiert und ist freigeschaltet. Der Stack Trace ist immer gleich.

Hier die ersten 4 Zugriffe, die immer den gleichen Stack Trace erzeugen:

[27-Apr-2024 12:20:57 Europe/Berlin] Request URI: /index.php?main_page=product_info&products_id=54&language=en%20and%2015%3d19, IP address: 53.186.93.98 --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "a" in /includes/functions/extra_functions/vataddon.php:24 Stack trace:

[27-Apr-2024 12:20:58 Europe/Berlin] Request URI: /index.php?main_page=product_info&products_id=54&language=en%20and%2020%3d20, IP address: 76.248.210.84 --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "a" in /includes/functions/extra_functions/vataddon.php:24 Stack trace:

[27-Apr-2024 12:20:59 Europe/Berlin] Request URI: /index.php?main_page=product_info&products_id=54&language=en'%20and%2015%3d19, IP address: 79.173.209.159 --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "a" in /includes/functions/extra_functions/vataddon.php:24 Stack trace:

[27-Apr-2024 12:21:00 Europe/Berlin] Request URI: /index.php?main_page=product_info&products_id=54&language=en'%20and%2020%3d20, IP address: 151.5.241.47 --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "a" in /includes/functions/extra_functions/vataddon.php:24 Stack trace:

Ich kann selbst die debug logs erzeugen, wenn ich die in den logs verwendete ULR verwende. Wie kann man die debug logs vermeiden?

webchills commented 5 months ago

Wenn Du die URL ohne diese Zusätze normal so aufrufst: index.php?main_page=product_info&products_id=54&language=en Wird dann auch so ein Log erzeugt?

webchills commented 5 months ago

Welchen Steuersatz hat der Artikel mit der ID 54? Ist das ein normaler Artikel so wie alle anderen im Shop auch oder was Spezielles?

aurixan commented 5 months ago

Wenn Du die URL ohne diese Zusätze normal so aufrufst: index.php?main_page=product_info&products_id=54&language=en Wird dann auch so ein Log erzeugt?

Die Seite wird aufgebaut und es gibt kein Log.

Wenn ich weitere Zeichen hinzufüge, funktioniert der Seitenaufbau bis einschließlich: /index.php?main_page=product_info&cPath=6&products_id=54&language=en%27%20and

Ein weiteres Zeichen z.B. /index.php?main_page=product_info&cPath=6&products_id=54&language=en%27%20and% führt zu einem Log und die Seite bleibt weiß.

aurixan commented 5 months ago

Welchen Steuersatz hat der Artikel mit der ID 54? Ist das ein normaler Artikel so wie alle anderen im Shop auch oder was Spezielles?

Ich habe im Januar 2024 von 19% auf 0% umgestellt (Kleinnunternehmer). Ich habe in Zencart nur einen Steuersatz eingetragen. Vielleciht habe ich da grundsätzlich etwas verstellt. Aber der Shop funktioniert soweit.

Zum Test habe ich die Zeichenkette "%27%20and%" an die URL eines anderen bereits bestehenden Produkts herangehängt: Es gibt einen Log und die Seite bleibt weiss.

Ich habe eine neues Produklt angelegt und auch hier die Zeichenkette "%27%20and%" angefügt, und auch dies führt zu einem Log.

webchills commented 5 months ago

Danke für den Hinweis auf die Kleinunternehmerregelung. In Deinem Szenario macht es keinen Sinn die Steuer für diesen Hinweis auszulesen. Angehängt ist eine angepasste includes/functions/extra_functions/vataddon.php für Kleinunternehmer. vataddon.zip

Ersetze die bestehende in Deinem Shop mit der, dann sollte so ein Log unmöglich sein.

Achte auch darauf, dass Deine Sprachdatei für diesen Hinweistext ebenfalls keinen Steuerhinweis enthält. Das ist folgende Datei: includes/languages/german/extra_definitions/rl.vat_info.php In Deinem Szenario sollte deren Inhalt z.B. so aussehen: define('VAT_SHOW_TEXT_VERSANDKOSTENFREI','<br><span class="taxAddon">Gemäß §19 UStG wird keine Umsatzsteuer berechnet</span>'); define('VAT_SHOW_TEXT','<br><span class="taxAddon">Gemäß §19 UStG wird keine Umsatzsteuer berechnet<br> zzgl. <a href="' . zen_href_link(FILENAME_SHIPPING) . '">Versandkosten</a></span>');

Für die englische Sprache auch includes/languages/english/extra_definitions/rl.vat_info.php entsprechend anpassen.

aurixan commented 5 months ago

Wenn ich die neue vataddon.php verwende, dann geht der ganze Shop nicht mehr: HTTP500 :-( Ich habe es zwei Mal ausprobiert, um einen Fehler meinerseits auszuschließen.

Die Sprachdatei-Anpassungen habe ich mir heute nicht angesehen, denn ich ich habe schon einen Hinweis bei den Preisen einschließlich einem "*" Link. Dies Thema schaue ich mir noch einmal an, soblad der Debug Log verschwunden ist.

aurixan commented 5 months ago

Interessanterweise habe ich heute auch einen einzelnen Debug Log bekommen, der wahrscheinlich nicht von einem Spider kommt:

[28-Apr-2024 16:24:38 Europe/Berlin] Request URI: /index.php?main_page=index%27, IP address: 65.108.71.135 --> PHP Fatal error: Uncaught ValueError: Unknown format specifier "#" in /includes/functions/extra_functions/vataddon.php:24 Stack trace:

0 /includes/functions/extra_functions/vataddon.php(24): sprintf('
<span clas...', '0% ')

1 /includes/functions/functions_prices.php(422): vatAddOn(Object(queryFactoryResult))

2 /includes/modules/responsive_classic/product_listing.php(225): zen_get_products_display_price('53')

3 /includes/templates/responsive_classic/templates/tpl_modules_product_listing.php(12): include('/is/htdocs/wp11...')

4 /includes/templates/responsive_classic/templates/tpl_index_product_list.php(109): require('/is/htdocs/wp11...')

5 /includes/modules/pages/index/main_template_vars.php(233): require('/is/htdocs/wp11...')

6 /includes/templates/responsive_classic/common/tpl_main_page.php(179): require('/is/htdocs/wp11...')

7 /index.php(95): require('/is/htdocs/wp11...')

8 {main}

thrown in /includes/functions/extra_functions/vataddon.php on line 24.

webchills commented 5 months ago

Die oben verlinkte includes/functions/extra_functions/vataddon.php ist völlig ok und löst in einem normalen Zen Cart 1.5.7h deutsch keinen Error 500 aus. Die einzige Änderung gegenüber der Originaldatei aus 1.5.7h ist, dass die Abfrage nach dem Steuersatz herausgenommen wird:

Statt $vat = zen_get_tax_rate($product_check->fields['products_tax_class_id']) . '% '; if ($product_check->fields['product_is_always_free_shipping'] == 1) { $ret = sprintf(VAT_SHOW_TEXT_VERSANDKOSTENFREI, $vat); } else { $ret = sprintf(VAT_SHOW_TEXT, $vat); } return $ret;

Folgendes: if ($product_check->fields['product_is_always_free_shipping'] == 1) { $ret = VAT_SHOW_TEXT_VERSANDKOSTENFREI; } else { $ret = VAT_SHOW_TEXT; } return $ret;

Und die alte vaddon.php darf natürlich nicht noch weiter im Ordner includes/functions/extra_functions etwa unter einem anderen Namen herumliegen. Die bestehende muss gegen die neue ausgetauscht werden.

aurixan commented 5 months ago

Ich habe herausgefunden warum ich den HTTP500 Fehler bekomme. Ich hatte 2 Dateien vataddon_save.php und vataddon.php in meinem Folder. Ich wusste nicht, dass das nicht geht.

Ich neue vataddon.php für Kleinunternehmer erzeugt jetzt keine Debug Logs mehr. DANKE für die Hilfe.

webchills commented 5 months ago

Alle Dateien mit der Endung .php im Ordner includes/functions/extra_functions werden bei jedem Seitenaufruf automatisch alle geladen. Daher darf da nie was doppelt sein oder anderes Zeug, das da nichts verloren hat mit der Endung .php herumliegen. Ist überhaupt zu empfehlen, keine Backupdateien herumliegen zu lassen. Wenn schon, dann die Dateiendung auf .bak oder sowas umbenennen.

webchills commented 5 months ago

fix provided