PHP-Logo
Druckansicht von http://www.php-homepage.de/artikel/artikel1.html

PHP-Logo
[ Main Menue ]
Homepage
Downloads
Artikel
Scripts
Forum
PHP-Manual
Links
News
Freelancer
Bücher
RuDolF
Suche
Misc
Über diese Seite
Kontakt
Wunschzettel
MyGuestbook
*
[ Suche ]
*
[ Partner ]


Domain Webhosting
*
[ Partner Sites ]
Dynamic-Webpages
PHP-Center
PHP-Welt
phpUG.de
Random Link
*
[ Autoren gesucht! ]
PHP-Homepage.de sucht laufend Autoren für News und Artikel
Interesse?
*

Follow on Twitter - @phphomepage

RSS Feed blogoscoop

Erweiterte Web-Statistiken per Redirector (erschienen auf Linuxticker.com)

Willkommen zu der erste Folge einer neuen Serie mit dem Namen "PHP-Tips". Hierbei handelt sich um eine Art PHP-Tutorial, bei dem zusätzlich nützliche Tools herauskommen. Mark Kronsbein leitet die Serie ein und beschreibt in dieser Folge die Realisierung eines Redirectors in PHP.

Die entsprechenden Sourcen stehen auch separat zur Verfügung.

PHP-Tips #1: Erweiterte Web-Statistiken per Redirector

von Mark Kronsbein

Was ist PHP?

PHP ist eine serverseitige Skriptsprache, d. h., im Vergleich zu z. B. JavaScript wird PHP vom Server ausgeführt, nicht vom Browser. PHP wurde von dem Kanadier Rasmus Lerdorf entwickelt, der anfangs damit nur die Zugriffe auf seine Website auswerten wollte. Ab der Version 3.0 arbeitet ein internationales Entwicklerteam an der weiteren Entwicklung. PHP ist in etwa das Linux/UN*X-Pendant zu Microsofts ASP (Active Server Pages). Inzwischen läuft es auf über 130.000 Hosts, wobei die Frontpage Extentions auf Platz 1 liegen (aber stetig Anteile an PHP verlieren ;-))

Warum dieses Tutorial?

Als wichtigsten Punkt, warum ich das hier schreibe, würde ich folgenden anführen: Als ich im November 1998 PHP für mich entdeckte gab es so gut wie keine Tutorials für Anfänger. Natürlich gab und gibt es das Manual, welches aber gerade für Anfänger nur sehr schwer zu verstehen ist. Dieses Tutorial soll für Anfänger und Fortgeschrittene gleichermaßen sein. Profis werden hiermit wenig anfangen können. Inzwischen gibt es einige mehr oder weniger gute Bücher über PHP, allerdings sind diese meistens nur eine dokumentierte und gedruckte Version des Manuals. Ich habe "MyRedirector" gewählt, um gleich in die Welt dessen einzusteigen, was PHP eigentlich am meisten ausmacht: Die Datenbankanbindung!

Was ist ein Redirector?

Sind Sie auch so neugierig wie ich? Sie haben eine Homepage, auf der viele Links gesammelt wurden. Interessieren diese Links aber auch den Surfer, oder werden sie ignoriert? Um das herauszufinden kommt ein sog. Redirector ins Spiel. Er zählt jeden Klick, den der User von Ihrer Homepage über einen Link auf eine andere Seite macht, mit und protokolliert die Anzahl der Hits in einer Datenbank, in diesem Fall MySQL.

Geht es Ihnen wie mir? Wollen Sie auch nach und nach Ihre Website von Perl-Scripts befreien und komplett auf PHP umstellen? Wenn ja, dann ist das nachfolgende Beispiel sicherlich sehr nützlich.

Es dreht sich um einen sogenannten Redirector, also ein Script, was Clicks auf Links mitzählt. Zwar gibt es solche Scripts zuhauf in Perl oder C, aber wir wollen uns ja mit PHP beschäftigen ;-))

Natürlich können Sie sich dieses Script herunterladen bzw. abschreiben. Der Lerneffekt bleibt dabei aber aus.

Es geht los

Wir beginnen mit einigen Variablen:

$host = "http://www.hostname.de/";
Hier sollte Ihre Domain stehen, damit der User bei einem kaputten Link, der beispielweise auf keine Seite (also redirect.php3? ohne das Argument "url") aufgerufen wurde. Dann wird Ihre Homepage geladen.
$hostname = "localhost";
Hier geben Sie den Host ein, auf dem Ihre MySQL-Datenbank läuft. Meistens ist dies "localhost", ein Wert wie "mysql.domain.de" kann aber auch möglich sein. Bitte fragen Sie im Zweifelsfall Ihren Provider.
$username = "your-username";
Ihr MySQL-Username, d. h. Ihr Loginname.
$password = "your-password";
Ihr MySQL-Passwort
$userstable = "redirect";
Der MySQL-Table, in welchem die Daten eingetragen werden sollen. Natürlich bleibt der Name Ihnen überlassen. Allerdings wird dieser Tabellename beim einfügen von MyRedir.sql erzeugt.
$password = "your-password";
Ihr Datenbankname. Meistens haben Sie nur eine Datenbank zur Verfügung. Wenn Sie mehrere Datenbanken anlegen können, steht es Ihnen natürlich frei, eine Datenbank mit dem Namen "Redirect" oder "redirector" anzulegen.

Damit hätten wir die Variablen zur Verbindung zu MySQL definiert. Beginnen wir nun mit dem eigentlichen Script:

if ($url != $host){
Checkt, ob die angegebene URL ungleich der $host-Angabe ist. Damit wird vermieden, daß Sie auch Zugriffe von Ihrer Seite auf Ihre Seite mitloggen.
MYSQL_CONNECT($hostname, $username, $password)
 OR DIE(mysql_error());
Die Verbindung zu MySQL wird mit obigen Angaben hergestellt. Bei einem gibt MySQL eine Fehlermeldung aus.
mysql_select_db(  "$dbName")
 or die(mysql_error());
MySQL benützt nun die oben angegebene Datenbank oder gibt eine Fehlermeldung aus.
$query = 
 mysql_fetch_row(mysql_query
  ( "select * from $userstable where(url = '$url')"));
Mit diesem Befehl sucht MySQL aus allen Ergebnissen (dafür der *) jenes heraus, welches der über den Parameter $url angegebene Adresse entspricht.
if ($query == false){
Wenn die Abfrage kein Ergbnis erzielt, dann wird die Variable $hits auf den Wert 1 gesetzt.
$hits =  "1";
$query2 =
 "INSERT INTO $userstable (url,hits) VALUES('$url','$hits')";
Danach werden die URL und der eine Hit eingetragen, d. h. ein neuer Eintrag wird in der Datenbank vorgenommen.
 }
 else {
Wenn bei der Abfrage oben ein Ergebnis gefunden wird,
$hitquery =
 "select hits from $userstable where url = '$url'";
wird eine erneute Abfrage zur Weiterverarbeitung benutzt.
$result = mysql_query($hitquery);
Mit $result hat man dann das Ergebnis der Abfrage $hitquery.
$hits = mysql_result($result, 0,  "hits");
Mit $hits wird das Feld "hits" angesteuert.
$query2 =
 "update $userstable set hits = hits+1 where url = '$url'";
Die Hits der in $url definierten Adresse werden um 1 erhöht.
 }
Nun wird die Weiterleitung vorgenommen.
MYSQL_QUERY($query2);
 }
Wenn $url nicht angegeben wurde, wird zu der in $host angegebenen Adresse weitergeleitet.
if(!$url) {
$url =  "$host";
}
else {
Wenn eine Adresse in $url angegeben wurde, wird zu dieser weitergeleitet.
         Header( "Location: $url");
}
Somit wären wir jetzt soweit, daß Sie die Hits zählen und in die Datenbank eintragen können. Natürlich können Sie die Ergebnisse über Telnet und den Befehl "mysql" abfragen. Weitaus einfacher (und schöner anzusehen) geht es aber mit dem nächsten Script, der grafischen Auswertung.

Die grafische Auswertung

Wir beginnen wieder mit den uns jetzt schon bekannten Variablen zur Verbindung zu MySQL.
$hostname = "localhost";
$username = "your-username";
$password = "your-password";
$userstable = "redirect";
$dbName = "your-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("Unable to connect to database");
@mysql_select_db( "$dbName")
 or die( "Unable to select database");

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_NUMROWS($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>No Links tracked yet!<
        /b></CENTER>";
}
Wenn Ergbnisse, sprich Hits und URLs, gefunden wurden, also $number größer oder gleich 1 ist:
 ELSEIF ($number >= 1) {
        WHILE ($i < $number){
Es wird definiert, daß
                $hits = mysql_result($result,$i,hits);

$hits das Ergebnis des Feldes "hits" ist.

                $url = mysql_result($result,$i,url);
$url 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 Ergbnisse bei der Abfrage nach $url und $hits werden ausgegeben.
                $i++;
                PRINT "</table>\n";
        }
}

So, das wars dann auch. Jetzt haben Sie einen voll funktionsfähigen Redirector, der sehr leicht anpaßbar ist.


Zurück zur Übersicht
© Copyright 1999 - 2011 by Mark Kronsbein | Impressum | NutzungsbedingungenWeiterempfehlen | Seitenanfang
0.0265