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.

3 Antworten zu “Gästebuch für xt:Commerce und PHP5”

  1. BHF sagt:

    das sieht allerdings ziemlich kompliziert aus. ich bin kein techniker. vielleicht liegt es daran.

    Bernd Helmut Frank

  2. Xantiva sagt:

    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

  3. NiBa sagt:

    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 :)

Eine Antwort schreiben