Diese Folge unserer PHP-Tips-Serie stammt von Mark Kronsbein, welcher ebenfalls Autor der ersten Folge war. Diesmal beschreibt er, wie man
Referer-Statistiken per PHP3 erstellen kann.
Der Artikel bezieht sich auf folgende Sourcen.
PHP-Tips #3: Referer-Auswertung
Was ist ein Referer?
Ein sogenannter Referer ist die URL, von welcher der User Ihre Seite
betritt. Wenn er z. B. auf http://www.server.de/links.html auf den Link
"Ihre Seite" klickt und dann auf http://www.ihre-seite.de (in diesem fall Ihre Seite)
landet wäre http://www.server.de/links.html der Referer.
Das folgende Beispiel zeigt Ihnen, wie Sie diese URLs mitprotokollieren können und
so einen (ungefähren) Überblick haben, welche Seiten einen Link auf Sie gelegt haben.
Erfassung der Daten
$hostname = "localhost";
$username = "name";
$password = "passwort";
$userstable = "referer";
$dbName = "db-name";
$domain = "server.de";
Diverse Variablen wie MySQL-Login und Passwort werden definiert
Das haben wir ja schon in der letzten Ausgabe gelernt.
Unter $domain muß der Domainname angegeben werden, damit dieser in
den Statistiken nicht auftaucht. Sollte ein Zugriff sowohl auf www.server.de als auch auf server.de möglich sein, empfiehlt es sich, nur "server.de" anzugeben, da dann alles
aussortiert wird, was diesen String beinhaltet.
$ref = "$HTTP_REFERER";
Nun wir der Referrer, also die Seite, von der der User kam, ausgelesen
und als $ref definiert.
$ref2 = strtolower($ref);
$ref wird mittels strtolower in Kleinbuchstaben umgewandelt. Z.B. kann ja statt www.server.de
auch www.Server.de oder WWW.SERVER.DE eingegeben werden.
$check = strstr($ref2,"$domain");
Um nun den entgültigen Wert des gewünschten Referers zu erhalten wird der nun
kleingeschriebene Referer nach dem Wert $domain durchsucht.
if(!empty($check)){
}
Falls $check, also die Suche nach Ihrem Domainnamen in Referer, kein Ergebnis
findet, wird nichts ausgegeben.
elseif (empty($check)){
mysql_connect($hostname, $username, $password)
or die(mysql_error());
mysql_select_db("$dbName") or die(mysql_error());
Falls ein Ergebnis, also ein Referer von "auswärts", gefunden wird, wird eine
Datenbankverbindung mit den obigen Variablen hergestellt.
$query
= "select * from $userstable where url = '$ref2'";
Die ausgewählte Tabelle sucht sich jetzt die Zeile raus, in welcher
$ref2 (also der kleingeschriebene Referer) im Feld url steht.
$result = mysql_query($query);
$rows = mysql_num_rows($result);
$rows zählt die gefundenen Ergebnisse.
if ($rows == 0){
Sollte $rows kein Ergebnis bringen, also 0 sein,
$hits = "1";
wird die Variable $hits, also die Anzahl der Zugriffe, auf den Wert 1 gestellt.
$query1
= "insert into $userstable (url,hits)"
. " values('$ref','$hits')";
Dann werden die URL und die Anzahl der Hits, im Falle dieses Neueintrags 1,
in die Datenbank eingetragen.
mysql_query($query1);
}
Wurde ein Eintrag gefunden
else {
$hitquery
= "select hits from $userstable"
. " where url = '$ref'";
wird dieser ausgewählt.
$result2 = mysql_query($hitquery);
$row = mysql_fetch_array($result2);
$hits = $row["hits"];
Das Feld hits aus dem Ergebnis wird nun in ein Array gepackt.
$query2
= "update $userstable set hits ="
. " hits+1 where url = '$ref'";
Dann wird die das Feld hits der Tabellenzeile, die die URL enthält, um den
Wert 1 erhöht, das heißt, nur das eine Feld wird verändert.
mysql_query($query2);
}
}
Speichern Sie nun diese Datei als referer.php3 und fügen Sie sie mittels
include("referrer.php3");
in Ihre Seiten ein.
Die grafische Auswertung
Wir beginnen wieder mit den uns jetzt schon
bekannten Variablen zur Verbindung zu MySQL.
$hostname = "localhost";
$username = "name";
$password = "passwort";
$userstable = "referer";
$dbName = "db-name";
Als nächstes definieren wir die gewünschten Farben für
die Anzahl der Hits.Selbstverständlich können Sie die Farben Ihren Wünschen
anpassen.
$color10 = "#FFFF00";
$color20 = "#FF0000";
$color50 = "#008000"
$color1k = "#0000FF"
$color2k = "#0000A0"
$color5k = "#000040"
Die Verbindung wird hergestellt.
mysql_connect($hostname, $username, $password)
or die(mysql_error());
mysql_select_db("$dbName") or die(mysql_error());
Jetzt werden wieder alle Daten ausgewählt und absteigend nach Hits
geordnet.
$query
= "select * from $userstable order by hits desc";
$result = mysql_query($query);
Die Anzahl der Ergebnisse, sprich der gefundenen Eintragungen wird ermittelt.
$number = mysql_num_rows($result) or die (mysql_error());
$i = 0;
Wenn jetzt das Ergebnis von $number gleich 0 ist wird eine Fehlermeldung
ausgegeben.
if ($number == 0) {
print "<center><p><b>Bisher keine Referer!<
/b></center>";
}
Wenn Ergbnisse, sprich Hits und URLs, gefunden wurden, also $number
größer oder gleich 1 ist:
elseif ($number >= 1) {
while ($i < $number){
$row = mysql_fetch_array($result);
Es wird definiert, daß
$hits = $row[hits];
$hits das Ergebnis des Feldes "hits" ist.
$ref = $row[url];
$ref das Ergebnis des Feldes "url" ist.
Nun werden die Hits gezählt und entsprechen der obigen Angaben
die gewünschte Farbe ausgewählt.
if ($hits < 10){
$color = "$color10";
}
elseif (($hits >= 10 )
and ($hits < 20)){
$color = "$color20";
}
elseif (($hits >= 20 )
and ($hits < 50)){
$color = "$color50";
}
elseif (($hits >= 50 )
and ($hits < 100)){
$color = "$color1k";
}
elseif (($hits >= 100 )
and ($hits < 200)){
$color = "$color2k";
}
elseif ($hits >= 200){
$color = "$color5k";
}
Nachdem die Farbe gewählt wurde, wird eine HTML-Tabelle aufgebaut,
die eine Zelle beinhaltet,
deren Breite (in Pixel) genau der Anzahl der Hits entspricht.
print "<div align=\"left\">";
print "<table cols=3 border=\"0\" width=
\"100%\"><tr><td align=left with=\"400\">
<b><a href=\"$url\">$url</a></b></td>";
print "<td align=right width=\"60\">
<b>$hits</b></td>";
print "<td align=left width=\"$hits\"
bgcolor=\"$color\"></td></tr>";
print "</table>\n";
}
}
Sämtliche Ergebnisse bei der Abfrage nach $url und $hits werden
ausgegeben.
$i++;
print "</table>\n";
}
}
Speichern Sie die Datei unter viewreferer.php3 und warten Sie einige Zeit. Dann werden Sie eine
grafische Auswertung über die (meisten) Seiten haben, die auf Ihre Site gelinkt haben. |