Neu PHP Fatal error in Verfügbarkeitsbenachrichtigungen (OptinAvailAgain.php)

Marco Stark

Aktives Mitglied
18. Oktober 2014
24
3
Betroffene Shop Versionen: 5.1.5, 5.1.2

Nach Durchsicht der serverseitigen Fehlerprotokolle (Apache/nginx) tauchen dort vermehrt folgende Einträge auf:

error.log

2023-01-22 15:32:10 Warning 178.*** mod_fcgid: stderr: PHP Fatal error: Uncaught TypeError: JTL\\Campaign::setCampaignAction(): Argument #2 ($kKey) must be of type int, string given, called in ***/includes/src/Optin/OptinAvailAgain.php on line 131 and defined in ***/includes/src/Campaign.php:289, referer: android-app://com.google.android.gm/ Apache-Fehler 2023-01-22 15:32:10 Warning 178.*** mod_fcgid: stderr: #0 ***/includes/src/Optin/OptinAvailAgain.php(131): JTL\\Campaign::setCampaignAction(), referer: android-app://com.google.android.gm/ Apache-Fehler 2023-01-22 15:32:27 Warning 178.*** mod_fcgid: stderr: PHP Fatal error: Uncaught TypeError: JTL\\Campaign::setCampaignAction(): Argument #2 ($kKey) must be of type int, string given, called in ***/includes/src/Optin/OptinAvailAgain.php on line 131 and defined in ***/includes/src/Campaign.php:289 Apache-Fehler 2023-01-22 15:32:27 Warning 178.*** mod_fcgid: stderr: #0 ***/includes/src/Optin/OptinAvailAgain.php(131): JTL\\Campaign::setCampaignAction() Apache-Fehler 2023-01-22 15:32:30 Warning 178.*** mod_fcgid: stderr: PHP Fatal error: Uncaught TypeError: JTL\\Campaign::setCampaignAction(): Argument #2 ($kKey) must be of type int, string given, called in ***/includes/src/Optin/OptinAvailAgain.php on line 131 and defined in ***/includes/src/Campaign.php:289 Apache-Fehler 2023-01-22 15:32:30 Warning 178.*** mod_fcgid: stderr: #0 ***/includes/src/Optin/OptinAvailAgain.php(131): JTL\\Campaign::setCampaignAction() Apache-Fehler 2023-01-22 15:32:33 Warning 178.*** mod_fcgid: stderr: PHP Fatal error: Uncaught TypeError: JTL\\Campaign::setCampaignAction(): Argument #2 ($kKey) must be of type int, string given, called in ***/includes/src/Optin/OptinAvailAgain.php on line 131 and defined in ***/includes/src/Campaign.php:289 Apache-Fehler 2023-01-22 15:32:33 Warning 178.*** mod_fcgid: stderr: #0 ***/includes/src/Optin/OptinAvailAgain.php(131): JTL\\Campaign::setCampaignAction()

Betroffene Dateien:

-> Campaign.php (Zeile 289 in Shop 5.1.5 | Zeile 296 in Shop 5.2.1)
https://gitlab.com/jtl-software/jtl-shop/core/-/blob/master/includes/src/Campaign.php#L296

-> OptinAvailAgain.php (Zeile 131 in Shop 5.1.5 | Zeile 128 in Shop 5.2.1)
https://gitlab.com/jtl-software/jtl...r/includes/src/Optin/OptinAvailAgain.php#L128

Lösungsvorschlag:

Typ-Validierung von $inquiryID vor dem Aufruf von Campaign::setCampaignAction(\KAMPAGNE_DEF_VERFUEGBARKEITSANFRAGE, $inquiryID, 1.0); implementieren / $inquiryID - falls string - auf int casten, da ReturnType::LAST_INSERTED_ID vieles, aber leider keinen Wert vom Typ "int" zurück gibt.. Ebenfalls zu beachten ist, dass der Rückgabewert von ReturnType::LAST_INSERTED_ID auch ein Boolean sein kann. Diesen einfach auf "int" zu casten, wäre keine gute Idee (...) Ihr wisst was ich meine.

https://gitlab.com/jtl-software/jtl...cludes/src/Optin/OptinAvailAgain.php#L116-125

TL,
Marco
 

Anhänge

  • error.log.txt
    1,9 KB · Aufrufe: 3
Zuletzt bearbeitet:

shops247

Aktives Mitglied
28. April 2021
33
9
Bekomme den gleichen Fehler, Nutzer bekommt nach Klick auf den Bestätigungslink einen 500-Fehler im Browser. Keine Ahnung, ob das ergänzend hilft, aber das hier steht in unserem Fehlerlog (anders als @Marco Stark fehlt mir das Know-how, um Lösungen vorzuschlagen 😁):

Code:
[23-Jan-2023 18:41:33 Europe/Berlin] PHP Fatal error:  Uncaught TypeError: Argument 2 passed to JTL\Campaign::setCampaignAction() must be of the type int, string given, called in ***/includes/src/Optin/OptinAvailAgain.php on line 131 and defined in ***/includes/src/Campaign.php:288
Stack trace:
#0 ***/includes/src/Optin/OptinAvailAgain.php(131): JTL\Campaign::setCampaignAction(6, '179', 1)
#1 ***/includes/src/Optin/Optin.php(93): JTL\Optin\OptinAvailAgain->activateOptin()
#2 ***/includes/src/Shop.php(1711): JTL\Optin\Optin->handleOptin()
#3 ***/index.php(11): JTL\Shop::getEntryPoint()
#4 {main}
  thrown in ***/includes/src/Campaign.php on line 288
 
  • Gefällt mir
Reaktionen: Marco Stark

Marco Stark

Aktives Mitglied
18. Oktober 2014
24
3
Guten Abend nach Berlin :)

Ja, es sind die gleichen Aktoren im Spiel. Feedback von Support kam bereits. Der BugFix wird mit dem nächsten Release eingespielt.

In super dringenden Fällen kann man das Fehlverhalten manuell, vor dem offiziellen Path fixen. Würde ich aber nur machen, wenn der Nutzen entsprechend hoch ist. Denn: Never fummel in the core - oder so 🙌

PS: Dein Log File ist sooooo viel aussagekräftiger als meins. Bei dir stehen sogar die Parameter im Funktionsaufruf: JTL\Campaign::setCampaignAction(6, '179', 1). Die '179' ist das Problem. Dort sollte 179 - ohne Anführungsstriche stehen.

Gruß,
Marco
 
  • Gefällt mir
Reaktionen: shops247