Für einen xtCommerce Onlineshop musste ein Gästebuch integriert werden. Die Shopsoftware bietet von Hause aus keine solche Funktionalität an. Im Fundus von xtc-load.de fand ich die (scheinbar) optimale Lösung: Smart Guestbook für xt:Commerce 3.04 SP 2.1
Ein gut dokumentiertes Modul, welches in gefühlten 15 Minuten installiert ist. Danach fingen jedoch die Probleme an :)
Im Nachhinein steht fest: das Gästebuch hat so seine Probleme mit einer PHP5 Installation. Im erwähnten Onlineshop war nach der Installation kein Eintrag in das Gästebuch möglich. Jeder Eintrag wurde mit dem Hinweis zurückgewiesen, die Textangaben seinen nicht valide:
Das Kommentar Feld muss mindestens 25 Zeichen enthalten.
Ihr Name muss mindestens 4 Zeichen enthalten.
Bitte geben Sie eine gültige eMail-Adresse ein.
Die genannten Zeichen stimmten jedoch. Zusätzlich gab es eine PHP-Warnung in der Ansicht der Gästebucheinträge.
Nachfolgend einige Hinweise zur Korrektur der Fehlermeldung undder Fehlfunktion des Gästebuches.
Warning ‚Call-time pass-by-reference‘ im Gästebuch
Wer PHP-Warnings im xt:Commerce nicht komplett abgestellt hat, wird auf der neune Gästebuchseite folgende Meldung sehen:
Warning: Call-time pass-by-reference has been deprecated – argument passed by value
Die Lösung: in der media/content/guestbook.php folgenden Codeblock ausfindig machen:
while ($guestbook = xtc_db_fetch_array(&$guestbook_query,true)) { $rows++; $module_content[]=array( 'GUESTBOOK_AUTHOR' => $guestbook['visitors_name'],
Der Funktionsaufruf xtc_db_fetch_array(&$guestbook_query,true)
ist in PHP5 als veralted gekennzeichnet und ruf die Warnung hervor. Eine Änderungen in xtc_db_fetch_array($guestbook_query,true)
schafft Abhilfe. Mehr zum Hintergrund der Warnung.
Kein Eintrag ins Gästebuch möglich – $HTTP_POST_VAR
Nachdem die Warnung als Fehlerquelle ausgeschlossen werden konnte habe ich näher in den Code der guestbook.php debuged. Relativ schnell war die eigentlich Fehlerquelle ausgemacht: die Variable $HTTP_POST_VAR
.
Die in diesem Array abgelegten Werte (in unserem Fall eben der Gästebuch-Eintrag, der Besuchername und die EMail-Adresse) stehen in PHP 5 nicht mehr zur Verfügung.
Die Lösung: in der guestbook.php müssen alle Vorkommen von $HTTP_POST_VAR
durch $_POST
ersetzt werden. Mehr zum Hintergrund gibt es bspw. hier. Selbiges sollte auch mit $HTTP_GET_VAR
passieren. Alle Vorkommen sind mit $_GET
zu erstetzen.
Update: Hape hat eine aktualisierte Version des Gästebuch-Scripts veröffentlicht. Mit dabei neben Captchas zum Schutz vor Spam ebenfalls die in diesem Beitrag vorgeschlagenen Bugfixes.
Update II: Wie im Kommentar zu lesen, hat Xantiva eine Sicherheitslücke im Guestbook gefunden. Den Code bitte entsprechend abändern.
Oktober 18th, 2009 at 10:05 am
das sieht allerdings ziemlich kompliziert aus. ich bin kein techniker. vielleicht liegt es daran.
Bernd Helmut Frank
Januar 24th, 2010 at 7:02 pm
Hast Du bei diesem „smarten“ Gästebuch auch den Typecast für das $_GET[‚gbID‘] gemacht? Das Teil ist sonst offen wie ein Scheunentor …
Ich habe es hier dokumentiert: XTC Gästebuch mit Sicherheitslücke
Januar 24th, 2010 at 7:51 pm
Habe ich in der Tat, nur versäumt hier nochmal auf deinen Post hinzuweisen :(
Es lohnt ab und an schon, follow-ups in Blogs zu abbonieren :)