Seite 1 von 2

Wie HTTP_REFERER von HTML-Seite an PHP übergeben?

Verfasst: 18.04.2007, 12:40
von WilliWusel
Hallo zusammen,

ich möchte auf jeder unserer Seiten einen Link "Seite empfehlen" einbauen (kein Problem). In dem sich öffnenden PopUp möchte ich den Referrer HTTP_REFERER retten (Problem) und später in einem PHP-Skript verwenden (der Referrer soll in der eMail angegeben werden).

Was muss ich in das PopUp (HTML) schreiben, was in das PHP-Skript? Bin absoluter Laie auf diesem Gebiet, daher bitte genau beschreiben. :roll:

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 25.04.2007, 23:35
von semtex
Du brauchst doch den Referer nur in einer Session deklarieren und kannst ihn dann überall wieder ausgeben und auch verabeiten.

Verfasst: 26.04.2007, 07:27
von d0nut
oder eben als GET Variable

Code: Alles auswählen

window.open('popup.php?ref='+document.referrer, "Popup", "width=300,height=200");

Verfasst:
von

Verfasst: 21.08.2007, 11:34
von WilliWusel
So, jetzt habe ich mal wieder etwas Luft, um das Thema nochmals aufzugreifen. :roll:

Antwort 1) hilft mir leider überhaupt nicht weiter, da ich auf diesem Gebiet Laie bin, wie schon in meinem Eingangsposting erwähnt. Antwort 2) führt mich in die richtige Richtung. :D Ich schaffe es jetzt immerhin schon, mittels

refer = document.referrer;

den richtigen Referrer zu retten. Ist das so überhaupt optimal? Dieses PopUp wiederum ruft ein Skript mit folgendem Inhalt auf:

Code: Alles auswählen

<?
$content="
$absender hat diese Seite empfohlen&#58;

» http&#58;//www.seite.de

$kommentar
";
if&#40;mail&#40;$empfaenger,$betreff,$content,"From&#58;$absender"&#41;&#41; &#123;
header&#40;"Location&#58; ../html/d/empfehlen-ok.html"&#41;;
&#125;
?>
Statt der fixen Adresse » https://www.seite.de sollte da der ursprüngliche Referrer stehen, wie mache ich das? Please help! Bild

Verfasst: 21.08.2007, 11:44
von Airport1
> Ist das so überhaupt optimal?

naja die ganzen counter dienste arbeiten meist genau so. fuer deinen anwendungsfall - du sagst es muss auf ner html seite integriert werden - ist es wohl die "beste wahl", und nach den letzten umfragen haben die meisten user javascript aktiviert.

Den "refer" kannst Du holen mittels $referer = $_GET['refer'];
Wuerde aber noch ein paar Pruefungen machen, damit da niemand was Boeses ins Script reinschmuggelt, denn Du musst Dir bewusst sein dass ein jeder den "refer" so ganz leicht manipulieren kann.

Verfasst: 21.08.2007, 13:42
von WilliWusel
Danke, jetzt kommen wir der Sache schon näher. :wink: Das Skript sieht nun so aus:

Code: Alles auswählen

<?
$referer = $_GET&#91;'refer'&#93;;
$content="
$absender hat diese Seite empfohlen&#58;

» http&#58;//www.seite.de

=> $referer

$kommentar
";
if&#40;mail&#40;$empfaenger,$betreff,$content,"From&#58;$absender"&#41;&#41; &#123;
header&#40;"Location&#58; ../html/d/empfehlen-ok.html"&#41;;
&#125;
?>
Leider ist die Zeichenkette hinter "=>" leer, d.h. der Referrer fehlt. :( Was mache ich falsch? In dem aufrufenden Dokument steht weiterhin:

refer = document.referrer;

Verfasst: 21.08.2007, 18:28
von Airport1
komisch, heisst es in javascript wirklich refeRRer mit einem doppel-r?
dann waere es ja ausnahmsweise mal richtig geschrieben!?!
sonst ist es naemlich meist nur mit einem r falsch geschrieben, "refeRer".
mehr zur falsch/richtig-schreibweise im kleinen kasten auf
https://www.rtrev.com/articles/attacks-2.html (englisch)

Verfasst: 21.08.2007, 21:07
von chris21
Mal ganz kurz eingehakt:

Wenn Du den Javascript-Code von D0nut einsetzt, musst Du den Referrer dann über $referer=$_GET["ref"]; holen, nicht über $_GET["refer"];

Zweites Problem: Du willst auf der HTML-Seite, die weiterempfohlen werden soll, ja nicht den Referrer auslesen, sondern die Seitenurl selber, oder? Dann müsste D0nuts Zeile für das Popup in

Code: Alles auswählen

window.open&#40;'popup.php?ref='+self.location.href, "Popup", "width=300,height=200"&#41;;
geändert werden.

Zudem ist dabei zu beachten, dass nicht alle User Javascript erlauben bzw. aufgrund der Einschränkungen mancher Browser document.referrer nicht unbedingt mit einem Wert gefüllt wird. Daher als Empfehlung:

Code: Alles auswählen

<?
$referer = $_GET&#91;'ref'&#93;;
if&#40;empty&#40;$referer&#41;&#41;
&#123;
$referer="deinehaupturl.de";
&#125;
$content="
...
Zudem sollte man noch beachten, dass eine solche einfache Abfrage einer Get-Variable immer Sicherheitslücken schaffen kann, insbesondere, wenn bei Deinem Server/Webhosting-Paket nicht z.B. magic_quotes_gpc auf on gestellt ist.

Verfasst: 22.08.2007, 08:32
von WilliWusel
Erst mal vielen Dank für eure Mühe, aber die Mimik funktioniert leider immer noch nicht! :oops: Ich habe den Code jetzt so geändert wie von Chris21 vorgeschlagen, dann steht in $referrer (Schreibweise angepasst) immer "deinehaupturl.de" bzw. in diesem Fall "https://www.kohlschein.de". Ich könnte mir jetzt noch vorstellen, dass

refer = document.referrer;

an der falschen Stelle im PopUp steht und daher die Info nicht weitergibt. Ohne jetzt Werbung machen zu wollen, könntet ihr vielleicht mal die Seite https://www.kohlschein.de aufrufen und auf einer beliebigen Unterseite unten rechts auf "Seite weiterempfehlen" klicken. Schaut euch dann bitte mal den Quellcode dieses PopUps empfehlen.html an, ob ihr da einen Fehler sehen könnt. Der Code des Skriptes lautet jetzt im Original:

Code: Alles auswählen

<?
$referrer=$_GET&#91;'refer'&#93;;
if&#40;empty&#40;$referrer&#41;&#41;
&#123;
$referrer="http&#58;//www.kohlschein.de";
&#125;
$content="
$absender hat diese Seite empfohlen&#58;

Kohlschein. Kreative Lösungen aus Pappe und Karton.
» $referrer

$kommentar
";
if&#40;mail&#40;$empfaenger,$betreff,$content,"From&#58;$absender"&#41;&#41; &#123;
header&#40;"Location&#58; ../html/d/empfehlen-ok.html"&#41;;
&#125;
?>
Ihr könnt euch die Empfehlung auch mit einem fiktiven Absender selbst zuschicken (die Daten werden nirgendwo gespeichert), um zu sehen, dass da etwas schiefläuft. :roll:

Verfasst: 22.08.2007, 09:38
von chris21
Hallo WilliWusel,

habs mir angeschaut und gesehen und das Problem vermutlich gefunden:

Der (/Das?) Popup wird geöffnet über

Code: Alles auswählen

<a href="#" title="Seite weiterempfehlen" class="txt2" onClick="MM_openBrWindow&#40;'empfehlen.html','Weiterempfehlen','width=610,height=425'&#41;"> Seite weiterempfehlen</a>
Daraus musst Du

Code: Alles auswählen

<a href="#" title="Seite weiterempfehlen" class="txt2" onClick="MM_openBrWindow&#40;'empfehlen.html?refer='+self.location.href,'Weiterempfehlen','width=610,height=425'&#41;"> Seite weiterempfehlen</a>
machen. Dadurch würde auf der Unterseite Messen + Projekte das Popup unter der URL empfehlen.html?refer=https://www.kohlschein.de/html/d/messen-projekte.html aufgerufen werden, wodurch erst PHP durch die Abfrage des $_GET["refer"]; den string "https://www.kohlschein.de/html/d/messen-projekte.html" als empfohlene Seite bekommt.

Das "refer = document.referrer; " im Quelltext des Popups ist leider nutzlos, da der Popup über Javascript aufgerufen wird und dadurch keinen Referrer übergibt. Du musst also den Code zum Aufruf des Popup wie oben abändern, wodurch dann der Referrer als Parameter mit übergeben wird.

Verfasst: 22.08.2007, 14:00
von chris21
Ok, nachdem ich mir Deine Seiten mal genauer angeschaut habe, bin ich jetzt etwas weitergekommen:

(und jetzt verstehe ich auch die Überschrift hier besser)

Es gibt dabei drei (bzw. mit der empfehlen-ok.html sogar vier) relevante Dateien:

1. eine Unterseite, die empfohlen werden soll (z.B. messen-projekte.html)

2. das Seite empfehlen Popup (empfehlen.html)

3. das Seite empfehlen Skript (empfehlen.php)

Lösung:

1. von der zu empfehlenden Unterseite wird das Popup empfehlen.html mit

Code: Alles auswählen

<a href="#" title="Seite weiterempfehlen" class="txt2" onClick="MM_openBrWindow&#40;'empfehlen.html?refer='+self.location.href,'Weiterempfehlen','width=610,height=425'&#41;"> Seite weiterempfehlen</a> 
geöffnet

2. Mit Javascript wird dieser an die Datei empfehlen.html übergebene Parameter ausgelesen und den Formulardaten hinzugefügt:

Code: Alles auswählen

var seitenurl=window.location.search;
document.forms&#91;0&#93;.Seitenurl.value = seitenurl;
In das Formular muss dann noch eine Zeile:

Code: Alles auswählen

<input type=hidden name="Seitenurl" value="http&#58;//www.kohlschein.de">
3. und die empfehlen.php muss diese Information jetzt auslesen:

d.h. mit PHP:
$seitenurl=$_POST["Seitenurl"];
$seitenurl=explode("=",$seitenurl);
$referrer=$seitenurl[1];

Dann endlich könntest Du mit $referrer in dem Emailtext die tatsächlich empfohlene Seite angeben.

Ich bin leider in javascript nicht so bewandert, daher habe ich z.B. den String seitenurl erst in php auseinandergenommen (Anfangs beinhaltet dieser ja z.B. "?refer=https://www.kohlschein.de/html/d/messen-projekte.html", Du könntest diesen natürlich auch schon im Javascript der empfehlen.html verarbeiten, um den relevanten Teil zu extrahieren (z.B. über substring).

Insgesamt muss ich aber feststellen, dass Du hier einen sehr komplizierten Weg gehst, der sich z.B. vereinfachen lassen könnte, wenn Du direkt empfehlen.php aufrufst und dieses Skript erst den Inhalt in der Art der Datei empfehlen.html mit Formular aufruft und dann nach selbstreferentiellen absenden z.B. auf die empfehlen-ok.html weiterlenkt. Würde viel Mühe ersparen und zugleich den Vorteil bringen, dass man eine "Seiten empfehlen" Routine auch für Nutzer bereitstellen könnte, die kein Javascript eingeschaltet haben.

Verfasst: 22.08.2007, 14:58
von WilliWusel
chris21 hat geschrieben:Ok, nachdem ich mir Deine Seiten mal genauer angeschaut habe, bin ich jetzt etwas weitergekommen:
Danke für Deine Geduld, ich hoffe, der Tee hat geschmeckt! :wink:
und jetzt verstehe ich auch die Überschrift hier besser
Habe mir größte Mühe gegeben. :wink:
Es gibt dabei drei (bzw. mit der empfehlen-ok.html sogar vier) relevante Dateien:
1. eine Unterseite, die empfohlen werden soll (z.B. messen-projekte.html)
2. das Seite empfehlen Popup (empfehlen.html)
3. das Seite empfehlen Skript (empfehlen.php)
Das stimmt. Habe das so gemacht, weil ich es nicht anders / besser kann.

Ich habe den geänderten Aufruf testweise mal in die Seite "Kontakt" eingebaut und auch die anderen Ergänzungen vorgenommen, das Ergebnis ist leider immer noch suboptimal. :( Kannst Du bitte noch mal prüfen, ob ich die Änderungen an den richtigen Stellen eingebaut habe? Danke! :D

Verfasst: 22.08.2007, 15:50
von chris21
Hallo WilliWusel, ja, Du hast es richtig eingebaut.

Es gibt allerdings noch einen (von mir produzierten) Fehler, den wir ausmerzen müssen:

Das Popup wird inzwischen richtig aufgerufen.

Aber leider wird die Info aus dem window.location.search noch nicht ins Formular geschrieben. Die Javascript-Error-Konsole meldet: document.forms[0] has no properties. Liegt wohl dummerweise daran, dass hier das Formular noch gar nicht aufgebaut war. Ergo kann da auch nicht die Referrer-Url reingeschrieben werden :(

Ähem, da ich mich mit Javascript eben nicht so gut auskenne, sind meine Ideen hier vielleicht etwas humpelig:

Vielleicht würde es einfach helfen, würde man den JavaScript-Einschub (oben unter 2.) im Head der empfehlen.html wieder zu vergessen und einfach im Formular

Code: Alles auswählen

<script type="text/javascript">
document.write&#40;'<input type="hidden" name="Seitenurl" value="' + window.location.search + '">'&#41;;
</script>
statt

Code: Alles auswählen

<input type="hidden" name="Seitenurl" value="http&#58;//www.kohlschein.de">
einfügen?

Verfasst: 23.08.2007, 11:38
von WilliWusel
chris21 hat geschrieben:Vielleicht würde es einfach helfen, würde man den JavaScript-Einschub (oben unter 2.) im Head der empfehlen.html wieder zu vergessen und einfach im Formular ... einfügen?
Überraschung! :o Das klappt! Bild Mein Dank wird Dir ewig hinterherschleichen... :wink:

Verfasst: 23.08.2007, 11:58
von chris21
Freut mich. :wink:

Wollen wir jetzt die ganze Routine nochmal so lösen, dass es ganz ohne JavaScript funktioniert, damit auch User ohne eingeschaltetes JavaScript eine spezielle Seite empfehlen können? Dafür müsste man aber einiges umstellen, u.a. die empfehlen.html ganz rauswerfen und in die empfehlen.php eingliedern... Wäre aber alles recht einfach machbar.