Tutorial: Referrer-System in PHP

Mai 3rd, 2010 von Felix G.

Du wolltest schon immer mal wissen, wie oft auf deinen Link auf der Website deines Linkpartners geklickt wurde?
Dann könnte folgendes Tutorial zur Erstellung eines simplen Referrer-Systems genau das richtige sein!

Benötigt wird:

  • PHP
  • MYSQL

Als erstes musst du in deiner Datenbank eine neue Tabelle erstellen.
Ich habe meine Tabelle “refs” genannt. Hier die SQL-Query zum einfügen der Tabelle in eurer Datenbank:

   CREATE TABLE `refs` (`ID` int(255) unsigned NOT NULL AUTO_INCREMENT,
                        `url` varchar(255) NOT NULL,
                        `hits` int(255) NOT NULL,
                         PRIMARY KEY (`ID`))

Soweit so gut, nun geht es an das eigendliche Script:
Wir benötigen ein Script das den Referrer, welcher bei meinem Script über die URL übergeben wird, auswertet und in die Tabelle einträgt. (referrer.php)

<?php
   $website = ''http://www.example.org''; // Gib hier deine WebsiteURL an
   $cfg = array('db' => array('host' => ''localhost'', //Host, meist localhost
		''user'' => ''root'',   //Benutzername für Datenbank
        	''pass'' => 'PASSWORT',        //Datenbankpasswort
		''base'' => ''tutorials''     //Datenbankname
		             )
	       );
/* Mit der Datenbank verbinden */
$cfg['db'] = new mysqli($cfg['db']['host'],
                        $cfg['db']['user'],
                        $cfg['db']['pass'],
                        $cfg['db']['base']);
if(mysqli_connect_errno()) {
   die ('Konnte keine Verbindung zur Datenbank aufbauen:
        '.mysqli_connect_error().'('.mysqli_connect_errno().')');
 }

$db = $cfg['db']; // Variable $db für DB-Verbindung für spätere Querys deklariert

 // Falls der Referrer-Parameter mit der URL übergeben wird
if(isset($_GET['ref']) && !empty($_GET['ref'])) {
// Übergebenen Referrer absichern (SQL-Injections verhindern)

$ref = mysql_real_escape_string(htmlspecialchars($_GET['ref']));
$query = 'SELECT `ID`, `hits` FROM `ref_refs` WHERE `url` = \''.$ref.'\' LIMIT 1';
$result = $db->query($query); // Query ausführen
if($result->num_rows) { // Falls diese URL bereits als Referrer existiert
$row = $result->fetch_assoc(); // Dem Array $row die Tabelleneinträge (ID, hits) zuteilen
$hits = ++$row['hits']; // Hits + 1
$update_query = ''UPDATE `ref_refs` SET `hits` = \''.$hits.'\' WHERE `url` = \''.$ref.\'';
$update = $db->query($update_query); // Hits aktualisieren

} else { // Falls Seite noch nicht in die Datenbank eingetragen wurde
$insert_query = 'INSERT INTO ref_refs (url, hits)
VALUES ("'.$ref.'", "1")';
$insert = $db->query($insert_query);
}

} else { // Falls kein Referrer übergeben wurde soll er auch nichts tun

}

// Nach Eintrag sofort auf Startseite deiner Website weiterleiten
  header("Location: ".$website);
  exit();

?>

WICHTIG: vergiss nicht die benötigten Daten zu ändern. Nun nochmal zur Erleuterung:

[...]$cfg = array('db' => array('host' => ''localhost'', //Host, meist localhost
		                'user' => 'root',   //Benutzername für Datenbank
		                'pass' => 'PASSWORT',   //Datenbankpasswort
		                'base' => 'tutorials'     //Datenbankname
		               )
                );
/* Mit der Datenbank verbinden */
$cfg['db'] = new mysqli($cfg['db']['host'],
                        $cfg['db']['user'],
                        $cfg['db']['pass'],
                        $cfg['db']['base']);

if(mysqli_connect_errno()) {
   die ('Konnte keine Verbindung zur Datenbank aufbauen:
        '.mysqli_connect_error().'('.mysqli_connect_errno().')');
 }
$db = $cfg['db']; // Variable $db für DB-Verbindung für spätere Querys deklariert
[...]

Dieser Teil verbindet dein Script mit der Datenbank, welche später für das Einfügen der Referrer benötigt wird.

// Übergebenen Referrer absichern (SQL-Injections verhindern)
$ref = mysql_real_escape_string(htmlspecialchars($_GET['ref']));

Wie hier der Kommentar schon beschreibt, wird mithilfe von mysql_real_escape_string() und htmlspecialchars() für die Sicherheit gesorgt.

// Nach Eintrag sofort auf Startseite weiterleiten
 header("Location: ".$website);
  exit();

Dieser Teil leitet nach dem Aufruf des Scripts direkt auf die am Anfang des Scripts angegebene Website weiter.

Dein Linkpartner muss nur noch den Link anpassen (z.B. example.org/referrer.php?ref=http://www.manusblog.de) und schwups funktioniert es.
Der Rest des Scripts sollte denke ich klar sein, falls nicht bitte einfach nen’ Kommentar schreiben!

Geschrieben in Programmieren | 1 Kommentar »

1 Kommentar

  1. Micha Sagt:

    Hi,
    ich habe ein Blog und würde das Referersystem gerne auf diesem nutzen. In wieweit kann ich eine eigene Statistik anlegen? Diese soll auch öffentlich einsehbar sein, so dass eine Art Contest entsteht.
    Kannst du mir bei der Realisierung helfen?

    gruß

Einen Kommentar abgeben

Bitte beachte: Die Kommentare werden moderiert. Dies kann zu Verzögerungen bei Deinem Kommentar führen. Es besteht kein Grund den Kommentar erneut abzuschicken.