Referrer einbauen

DaveThuet

Erfahrenes Mitglied
Guten Morgen liebe PHP-Profis,

wiedermal der Anfänger der gerne auf Eure Hilfe zurückgreift.

Ich möchte gerne ein Referrer-System bauen habe aber keine Idee wie es zu realisieren ist.
Ich habe einige Seiten hier bei Tutorials intern durchschaut und gelesen, fand aber leider nichts das mir weiterhelfen kann.

Ich habe nun mal in der Datenbank eine Tabelle mit vier Spalten angelegt auf der Domain weinschulung.ch.
Tabelle:
referrer
Spalten:
ref=1, wer=David Thuet, domain=www.thuet.ch, provision=20%
ref=2, wer=Peter Muster, domain=www.muster.de, provision=10%

Den ausgehenden Link ab thuet.ch baue ich folgendermassen ein:
HTML:
<a href="http://www.weinschulung.ch/?ref=1">Link</a>
Ich hoffe dies ist soweit Korrekt?

Wie gehe ich nun weiter auf vor auf weinschulung.ch?
Es sollte ja irgendwo abgespeichert werden das nun der Referrer "1" einen Besucher gesandt hat.
Dieser Besucher surft nun durch einigen Seiten auf weinschulung.ch und bucht irgendwann eine Schulung!
Wie übergebe ich nun im Buchungsformular bekannt das der buchende Besucher vom Referrer "1" gekommen ist?
Denn nachdem ich nur einen Link auf weinschulung.ch klicke verschwindet der "?ref=1" in der Adressleiste.
Wie könnte man es machen das wenn möglich auch eben diesen "?ref=1" gar nicht ersichtlich ist in der Adressleiste?

Ich hoffe Ihr versteht was ich meine, respektive was ich vor habe?

Das Buchungsformular auf weinschulung.ch sieht folgendermassen aus:
HTML:
<div class="formmaileralles">
<form action="./anmeldung-send.php" method="post" enctype="multipart/form-data" name="anmeldung" id="anmeldung" onsubmit="return checkAnmeldungForm(this)">

<div class="formmailertext">
Anrede:<span class="formularpflicht">*</span><br />
<select name="Anrede" class="formmailertextfeld" id="Anrede">
<option selected="selected" value="---">---</option>
<option value="Frau">Frau</option>
<option value="Herr">Herr</option>
</select>
<br />
Vorname und Nachname:<span class="formularpflicht">*</span><br />
<input name="Name" class="formmailertextfeld" id="Name" />
<br />
Email:<span class="formularpflicht">*</span><br />
<input name="Email" class="formmailertextfeld" id="Email" />
<br /> 
Gewählte Schulung:<br />
<input name="Schulung" class="formmailertextfeld" id="Schulung" value="<?php echo $schulungsname[$_GET['id']]; ?> (<?php echo $kundenart[$_GET['id']]; ?>) CHF <?php echo $totalkurskosten[$_GET['id']]; ?>" readonly="readonly" />
</div>

<div class="formmailertextrechts">
Firma:<br />
<input name="Firma" class="formmailertextfeld" id="Firma" />
<br />
PLZ und Orschaft:<span class="formularpflicht">*</span><br />
<input name="Ortschaft" class="formmailertextfeld" id="Ortschaft" />
<br />
Abkürzung Kanton:<br />
<input name="Kanton" class="formmailertextfeld" id="Kanton" />
<br />
Bei zweiter Buchung 10% auf Gesamtpreis:<br />
<?php $result = mysql_query($sql);
echo "<select name='Zweite Schulung' class='formmailertextfeld' id='Zweite_Schulung'>";
while ($row = mysql_fetch_row($result))
{
  if ($schulungsname[$_GET['id']] != $row['0'])
  {
    echo "<option value='".$row['0']."'>".$row['0']."</option>";
  }
}  
echo "</select>"; ?> 
</div>

<div class="formailertextlinks">
Mitteilung:<span class="formularpflicht">*</span><br />
<textarea name="Mitteilung" rows="5" cols="5" class="formmailertextarea" id="Mitteilung"></textarea><br />
<div class="small"><span class="formularpflicht">*</span> = Pflichtfelder / kein HTML-Code / kein BBCode</div>
<br />	
<input name="Submit" type="submit" class="formmailerbutton" id="Submit" value="Senden..." />
<input name="loeschen" type="reset" class="formmailerbutton" id="loeschen" value="Löschen!" /><br />
</div>
</form>
</div>
Dieses wird per Email versandt, also per "anmeldung-send.php".

Meine PHP-Kenntnisse sind gleich Null und darum wäre ich auch bereit für eine fertige funktionierende Lösung einen angemessenen Betrag zu bezahlen! (100.- €)

Nachtrag:
Dies mache ich nun gewollt mit Entlöhung, da mein PHP-Wissen so gering ist das ich ja auch bereits negativ Bewertet wurde mit "beschämendes Verhalten". :(
 
Zuletzt bearbeitet:
Versteh ich das richtig?
Du bist quasi weinschulung.ch und willst wissen ob von jemand der sich auf deiner seite anmeldet von z.b. thuet.ch oder muster.ch auf deine seite gekommen ist?!

Also Grundsätzlich kannst du in PHP den referrer per
PHP:
$_SERVER['HTTP_REFERER']
auslesen.

Das Problem ist allerdings:
1. Referrer können deaktiviert werden
2. Sollte der Besucher später noch einmal wiederkommen und diesmal einen direkt link benutzen dann kam er vielleicht z.B. per thuet.ch auf deine Seite davon weisst du aber nix


Code:
<a href="http://www.weinschulung.ch/?ref=1">Link</a>
Hat eigentlich nich mit Referrern zu tun. Du übergibst lediglich eine GET Variable. Wobei das u.U. sogar effektiver ist als referrer zu benutzen.

Wie könnte man es machen das wenn möglich auch eben diesen "?ref=1" gar nicht ersichtlich ist in der Adressleiste?
Wie gesagt bei ?ref=1 handelt es sich um eine GET Variable und die ist nunmal in der Browserleiste ersichtlich.
Referrer dagegen werden vom Browser gesendet davon kriegt im Prinzip niemand was mit.
 
Danke vorerst für die Erklärung der Referrer-Abfrage.
PHP:
$_SERVER['HTTP_REFERER']

Also, wenn ich richtig verstanden habe ist die GET Variable sicherer und besser als Lösungsansatz?
Gehen wir vom Prinzip der GET Variable im Link, ist ja egal wenn man diese sieht im Link, stört ja den Besucher nicht, denke ich?
Wie mache ich, dass die GET Variable bestehen bleibt solange der Besucher auf weinschulung.ch surft?
Also die Übergabe im Formular ist denke ich folgendermassen Lösbar indem ich die Variable ab Datenbank abrufe und in ein inputfeld (hidden) übergebe.

Ein Beispiel für das Anmeldeformular in der Hoffnung das ich es einigermassen richtig gelöst habe...

Die Datenbank-Abfrage:
PHP:
$query = "SELECT * FROM referrer";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
}

Formularfeld:
HTML:
<br /> 
Referrer:<br />
<input name="Referrer" class="formmailertextfeld" id="Referrer" value="<?php echo $ref[$_GET['id']]; ?>, <?php echo $wer[$_GET['id']]; ?>, <?php echo $domain[$_GET['id']]; ?>, <?php echo $provision[$_GET['id']]; ?>"  type="hidden" />

Das Problem ist nun, wie bleibt die GET Variable bestehen im Link (Adressleiste) wenn der Besucher auf den diversen Seiten surft?
 
Das Problem ist nun, wie bleibt die GET Variable bestehen im Link (Adressleiste) wenn der Besucher auf den diversen Seiten surft?

Das ist eigentlich garnicht nötig.

Mal angenommen ich befinde mich auch beispiel.ch und klicke dann auf den link
HTML:
<a href="http://www.weinschulung.ch/?ref=beispiel">Link</a>

Dann könnte man in der Zielseite des Links (z.b. der index.php) beispielsweise folgendes machen
PHP:
if (isset($_GET['ref'])){
    $referer = $_GET['ref'];
}

Sofern die GET Variable ref übergeben wurde enthält $referer also jetzt den Wert der GET Variable (bei meinem Link wäre das jetzt "beispiel")

Damit kannst du jetzt im Prinzip machen was du willst.
z.B.
Entweder du übergibst sie in einer Session
oder du speicherst referer und dazugehörige ip in einer DB woraufhin du auch nach verlassen der Seite noch in der Lage wärst zu prüfen ob der Besucher von einem deiner referer kam
Gibt sicher noch andere Möglichkeiten eventuell fällt jemandem noch was geschickteres ein.
 
Im so sorry, ich bringe das einfach nicht hin... :(
Zusammenfassung was ich bisher gemacht habe:

Auf ein Referrer hier real "zeitfuerwein.ch" ist einer meiner 88x31 Banner mit verlinkung zur Hauptseite von weinschulung.ch.

Link auf zeitfuerwein.ch: (Der Referrer)
HTML:
<a href="http://www.weinschulung.ch/?ref=1" target="_blank" title="www.weinschulung.ch"><img src="http://www.weinschulung.ch/images/banner/weinschulung-88.jpg" style="width:88px; height:31px; border: 1px solid #000000;" alt="www.weinschulung.ch" /></a>
Wobei die "1" auch gleich die Referrer "id" ist in meiner Datenbank auf weinschulung.ch.

Dies steht oberhalb der Metas auf weinschulung.ch:
PHP:
<?php 
// ** information zum referrer auslesen ** //
if (isset($_GET['ref'])){
    $referrer = $_GET['ref'];
} 

// ** abfrage aus der datenbank referrer ** //
$query = "SELECT * FROM referrer";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
}
?>
Wenn ich nun aber auf weinschulung.ch intern die Seiten durchstöbere geht die "?ref=1" verloren und kann im Buchungsformular nicht mehr abgerufen/übergeben werden?

Im Buchungsformular auf weinschulung.ch:
PHP:
<input name="Referrer" class="formmailertextfeld" id="Referrer" value="<?php echo $ref[$_GET['id']]; ?>, <?php echo $wer[$_GET['id']]; ?>, <?php echo $domain[$_GET['id']]; ?>, <?php echo $provision[$_GET['id']]; ?>" /><br />
Ich bin wirklich sehr dankbar für jegliche Hilfe...
Was mache ich falsch, was ist falsch eingebaut oder abgerufen. :(
Müsste ich nicht aus der GET Variable "ref" dann irgendwie irgendwo die Referrer id aus der Datenbank auslesen? Mann o Mann ist das deftig...
Und auch da, wie behalte ich Sie wenn der Besucher surft und auf einmal doch eine Anmeldung macht?
 
Wenn ich nun aber auf weinschulung.ch intern die Seiten durchstöbere geht die "?ref=1" verloren und kann im Buchungsformular nicht mehr abgerufen/übergeben werden?

Deswegen wie gesagt z.B. Session oder DB

Session Bsp:
Wenn ich nun von zeitfuerwein.ch kommend auf diesen Link
HTML:
<a href="http://www.weinschulung.ch/?ref=1" target="_blank" title="www.weinschulung.ch"><img src="http://www.weinschulung.ch/images/banner/weinschulung-88.jpg" style="width:88px; height:31px; border: 1px solid #000000;" alt="www.weinschulung.ch" /></a>
klicke lande ich auf der (z.B.) auf der index.php von weinschulung.ch in der folgender PHP schnippsel stehen
PHP:
session_start(); #nur falls noch nicht existent
if (isset($_GET['ref'])){
    $referrer = $_GET['ref'];
    $_SESSION['ref'] = $referrer;
}

Danach enthält $_SESSION['ref'] den Wert der GET Variable ref (in deinem Beispiel 1)
Um es kurz zu machen: Sessions bleiben während dem ganzen Besuch auf der Seite erhalten, es kann dir also wurst sein ob der Besucher noch ein bisl auf deiner Seite rumgurkt.

Im Endeffekt könntest du dann per
PHP:
if (isset($_SESSION['ref'])){
$query = "SELECT * FROM referrer where id = '$_SESSION['ref']'"; 
.
.
.
}
Den Datensatz mit der jeweiligen referer id auslesen.

Normalerweise würde ich im Zuge desen zumindest noch zu mysql_real_escape_string raten, aber ich will bei dir keine unnötige Verwirrung stiften ;)
 
Zuletzt bearbeitet:
Danke dir vorerst...
Ich weiss man braucht unheimlich Geduld mit mir, tut mir leid wenn ich dich da sicherlich Ärgere mit meiner unwissenheit.

Habe nun wie Oben angegeben eingebaut und die Homepage wird nicht mehr angezeigt? :(

PHP:
if (isset($_SESSION['ref'])){
$query = "SELECT * FROM referrer where id = '$_SESSION['ref']'"; }
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
}

Was ist da Falsch an dem PHP-Code?
 
Sorry diesmal hab ich mumpitz gemacht
PHP:
$query = "SELECT * FROM referrer where id = '$_SESSION['ref']'";
kann garnicht funktionieren.

Versuchs mal so rum
PHP:
if (isset($_SESSION['ref'])){
$referer = $_SESSION['ref'];
$query = "SELECT * FROM referrer where id = '$referer'"; 
.
.
.

Du hast allerdings auch einen Fehler

PHP:
if (isset($_SESSION['ref'])){
$query = "SELECT * FROM referrer where id = '$_SESSION['ref']'"; } # HIER HÖRT DEINE IF SCHLEIFE AUF
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
}

An der oben markierten Stelle hört deine if Schleife auf, das ist ok sofern $_SESSION['ref'] existiert
Sollte diese nicht existieren hast du aber keine mysql_query mehr.

Eventuell wäre es auch mal hilfreich du würdest etwas mehr Code posten
 
Danke...
Nun wird die Homepage wieder angezeigt und es gibt kein PHP-Fehler.
Hier der gesamte PHP-Code:
PHP:
<?php
session_start(); 
if (isset($_SESSION['ref'])){
$referrer = $_SESSION['ref'];
$query = "SELECT * FROM referrer where id = '$referrer'"; }
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
} 
?>
Beim Anmeldeformular werden aber komische Texte ausgegeben und nicht die Daten der Datenbank?

Es steht im Inputfeld:
Notice: Undefined index: 41 in /srv/www/vhosts/weinschulung.ch/httpdocs/content/contentanmeldung.php on line 61 , Notice: Undefined index: 41 in /srv/www/vhosts/weinschulung.ch/httpdocs/content/contentanmeldung.php on line 61 , Notice: Undefined index: 41 in /srv/www/vhosts/weinschulung.ch/httpdocs/content/contentanmeldung.php on line 61 , Notice: Undefined index: 41 in /srv/www/vhosts/weinschulung.ch/httpdocs/content/contentanmeldung.php on line 61

Die Abfrage im Anmeldeformular sieht folgendermassen aus:
PHP:
Referrer:<br />
<input name="Referrer" class="formmailertextfeld" id="Referrer" 
value="<?php echo $ref[$_GET['id']]; ?>, 
<?php echo $wer[$_GET['id']]; ?>, 
<?php echo $domain[$_GET['id']]; ?>, 
<?php echo $provision[$_GET['id']]; ?>" /><br />
Irgendwo ist wahrscheinlich noch was drinnen das ich Falsch gemacht habe!
Danke dir für deine Geduld mit mir...:-(
 
Ich glaube es Funktioniert nun...
Möchte nur sicher gehen das keine Fehler im Code sind und danke für eine Überprüfung.

PHP-Code oberhalb der Metatags:
PHP:
<?php
session_start(); 
if (isset($_SESSION['ref'])){
$referrer = $_SESSION['ref'];
$query = "SELECT * FROM referrer where id = '$referrer'"; }
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$ref[$row['id']] = $row['ref'];
$wer[$row['id']] = $row['wer'];
$domain[$row['id']] = $row['domain'];
$provision[$row['id']] = $row['provision'];
} 

?>

PHP-Code im Anmeldeformular:
PHP:
<input name="Referrer" class="formmailertextfeld" id="Referrer" 
value="<?php echo $ref[$_SESSION['ref']]; ?>, 
<?php echo $wer[$_SESSION['ref']]; ?>, 
<?php echo $domain[$_SESSION['ref']]; ?>, 
<?php echo $provision[$_SESSION['ref']]; ?>" /><br />

Danke dir vielmals rd4eva!
 
Zurück