Hendrik: Referrer in PHP

Hi Leute,

gibt es in PHP wie in Javascript eine "referrer"-Auslesefunktion?
Wenn ja, habe ich noch eine Frage: Wenn ich bei einem Gästebuch nach dem Senden eines Beitrags Dank ausspreche und der Benutzer klickt auf "zurück" und sendet das Formular nochmal ab, dann häte ich ja zwiemal den selben Eintrag. Wird die Referrer-Variable mit dem neuen Inhalt belegt, obwohl der Benutzer auf "zurück" geklickt hat?

Dankeschön,
MfG Hendrik

  1. Die Variable heißt witzigerweise $HTTP_REFERER, ein Rechtschreibfehler aus früheren Versionen, der wegen der Kompatibilität nicht ausgebessert wurde. Die Variable ist nur belegt, wenn der User die Seite über einen Link aufgerufen hat. Nicht allerdings, wenn er über die History (zurück), einen Bookmark aufgerufen hat oder die URL selbst eingetippt hat.
    Ich hoffe ich konnte helfen.
    Grüße

  2. gibt es in PHP wie in Javascript eine "referrer"-Auslesefunktion?

    Ja, aber die hilft Dir nicht.

    Wenn ja, habe ich noch eine Frage: Wenn ich bei einem Gästebuch nach dem Senden eines Beitrags Dank ausspreche und der Benutzer klickt auf "zurück" und sendet das Formular nochmal ab, dann häte ich ja zwiemal den selben Eintrag. Wird die Referrer-Variable mit dem neuen Inhalt belegt, obwohl der Benutzer auf "zurück" geklickt hat?

    Welchen neuen Inhalt meinst Du? Du erhälst beim Empfang der Formulardaten die Formular-URL in $_SERVER["HTTP_REFERER"], egal, wie der Benutzer auf die Formularseite gekommen ist. Du kannst auch im Formular keine auf der Referer:-Angabe basierende Sperre einbauen, schließlich ist nicht gesagt, daß der Browser die Seite neu abruft - er kann sie genauso gut aus dem Cache holen.

    Wenn Du Doppelpostings vermeiden willst, verpasse dem Formular ein verstecktes Element mit einer eindeutigen Seriennummer. Diese Nummer speicherst Du zusammen mit dem geschriebenen Eintrag ab. Vor dem Abspeichern prüfst Du allerdings, ob die Nummer schon bei einem alten Eintrag existiert. Ist das der Fall, hat der Benutzer ein Formular zweimal abgeschickt und Du kannst den neuen Eintrag zurückweisen.

    Für Seriennummern wird meistens eine Funktion zur Verfügung gestellt, bei PHP heißt sie uniqid(). Ansonsten könnte man sich für diese Anwendung auch zum Beispiel mit einem Text aus aktueller Uhrzeit mit einer angehängten Zufallszahl begnügen.

    Willst Du hingegen verhindern, daß jemand mehrere Einträge absetzt (also nicht nur aus Versehen bzw. Ungeduld zweimal auf den "Absenden"-Knopf drückt), mußt Du eine Cookie- und IP-Sperre einbauen, d.h. diese Werte für eine bestimmte Zeit abspeichern, um über sie einen Benutzer innerhalb dieser Zeit identifizieren zu können.

    Gruß,
      soenk.e