WebsiteBaker Support (2.13.x) > Hilfe & Support (deutsch)
Fehlermeldung wbstats/class.count.php on line 303
gba:
Ich bekomme seit heute folgende Fehlermeldung statt der Homepage:
There was an uncatched exception
database::escapeString(): Argument #1 ($unescaped_string) must be of type string, null given, called in /pages/68/d0/d0013785/home/htdocs/wb/modules/wbstats/class.count.php on line 303
in line (259) of (/framework/class.database.php):
Auslöser scheint das Statistik-Modul zu sein.
Anmeldung im Backend ist möglich. Ich habe die Seite jetzt erst mal in den Wartungszustand versetzt.
Ich habe momentan die Version 2.13.6 r237 in Benutzung.
Die Visitor Statistik ist Version 0.2.5.5, im Backend läuft die richtig.
Was ist da los, bzw. wie kann ich das reparieren?
gba:
Ich glaube ich hatte so eine Meldung vor einigen Jahren schon einmal.
dbs:
Hi, du kannst mal die angehängte Version probieren. Darin hatte ich in class.count.php zeile 303 etwas gefixt.
Ist aber schon ein Jahr her. Ob es dein Problem löst weiß ich nicht.
siehe unten
sternchen8875:
Ursache ist ein nicht angekommender Wert, in diesem Fall aus den Besucher-Informationen. Die werden ja nicht in jedem Fall vollständig übertragen und müssen das auch nicht.
Da es wahrscheinlich ist, das solche Fehler öfter vorkommen, dröseln wir es mal auf
Die Fehlermeldung:
--- Quote ---database::escapeString(): Argument #1 ($unescaped_string) must be of type string, null given, called in /pages/68/d0/d0013785/home/htdocs/wb/modules/wbstats/class.count.php on line 303
in line (259) of (/framework/class.database.php):
--- End quote ---
Mit einfachen Worten übersetzt: Erwartet wird in diesem Fall ein String, also eine Zeichenkette mit Text, der Wert wurde aber garnicht übergeben (null given)
Danach folgen Datei und Zeilennummer
Die Originalzeile dort:
--- Code: ---$city = $database->escapeString($this->getCountryCode());
--- End code ---
Der Auftrag dort: Überprüfe den erwarteten String ($this->getCountryCode()) und escape ihn. Escapen wäre ein üblicher Vorgang zur Maskierung, z.b. von Hochkommas im Text
Da der Text aber garnicht da ist, gibt es nichts zu escapen, daher die Fehlermeldung.
Eine übliche Vorgehensweise wäre nun diese Änderung in Z 303 der genannten Datei
--- Code: ---$city = $database->escapeString($this->getCountryCode() ?? '');
--- End code ---
nennt sich: Null Coalescing Operator
Geprüft wird der Inhalt des Strings. Ist er nicht Null, wird er so verwendet. Ist er null, wird der Wert innerhalb der beiden Hochkommas hinter den Fragezeichen verwendet, in diesem Fall also ein leerer String, so, wie es das Script erfordert. NULL wäre nichts, so ist es aber etwas Leeres. Im exakten Beispiel der Fehlermeldung würde es heißen: "der CountryCode wurde nicht übermittelt, schreibt rein: er ist leer / keine Angabe
Nun sind solche Dinge seit PHP 8 immer strenger und werden es auch von jeder PHP-Version zur nächsten, auch mit PHP 8.5 ab Dezember 2025
Es liegt also nahe, das diese Fehler vermehrt auftreten werden
Wir haben uns daher entschlossen, auch in Rücksprache mit Ruud, dem Entwickler von wbstats, das Problem "eine Etage höher" anzugehen, in der class.database.php, die diesen Vorgang initiiert. Dort werden jetzt alle NULL-Einträge abgefangen
Heißt in der Summe: für deine Problematik ergeben sich 3 Möglichkeiten zur Korrektur
1.: ein Update der WebsiteBaker-Version. Das wäre in 2min erledigt. Da du schon eine recht neue Version benutzt, rechne ich nicht mit großen Problemen
2.: die entsprechende Zeile wie oben angegeben reparieren, allerdings kann es beim nächsten fehlenden Wert erneut auftreten
3.: für die kurzzeitige Abhilfe wäre es praktischer gewesen, nur die Einbindung von wbstats zu unterbinden, das wäre eine Zeile wie diese in der index.php deines Frontend-Templates, die man entsprechend auskommentieren müßte bis zur Reparatur
--- Code: ---if (is_readable(WB_PATH.'/modules/wbstats/count.php')){include (WB_PATH.'/modules/wbstats/count.php');}
--- End code ---
Erscheint mir besser zu sein als der Wartungsmodus, ich verstehe aber auch, wenn sich ungeübte User da nicht ran trauen
gba:
@ sternchen8875
So steht es in meiner index.php des Templates. Wieso das seit gestern nicht mehr ging weiß ich nicht.
@ dbs
Habe die bisherige Version 2.5.5 deinstalliert und die 2.5.6 installiert. Jetzt läuft es wieder.
Ich habe leider nur geringe php-Kenntnisse, deshalb kann ich nicht viel beitragen.
Vielen Dank für eure Hilfe (Y)
Navigation
[0] Message Index
[#] Next page
Go to full version