Fortgeschrittene - Freitag, Februar 22, 2008 16:19

Counter mit PHP

Wir erstellen hier ein einfachen PHP Counter her. Dieser Counter besitzt eine IP Sperre und protokolliert Täglich. Wir können also zu jedem Tag sehen wie viele Besucher wir an diesem Tag hatten. Alles was wir dazu brauchen sind zwei MySQL Tabellen und ein sehr kleines PHP Skript.

Die MySQL Tabellen

Beginnen wir also mit der Erstellung unserer beiden Tabellen.

Die Erste Tabelle soll nur für die IP Sperre reserviert werden. Wir nennen diese Tabelle am besten “counter_ip”!
Die Tabelle füllen wir mit zwei Felder:

name: ip | typ: Varchar(24)
name: zeit | typ: Varchar(24)

Die Zweite Tabelle sind für die Statistiken, wir nennen sie “counter_stat” und füllen 4 Felder hinzu:

name: id | typ: INT | auto_increment | Primary
name: datum | type: DATE | Unique
name: besucher | type: INT
name: hitz | type: INT

info: PHPMyAdmin ist ein sehr einfaches und Mächtiges Tool zum Entwickeln der Datenbank.

Jetzt wo unsere Tabellen angelegt worden sind, können wir uns mit dem PHP Code beschäftigen.

Die PHP Datei “counter.php”

Der folgende Code scheint auf dem ersten Blick sehr umfangreich ich werde euch aber Schritt für Schritt jede Zeile erklären.

<?php
    
// Verbindung zur MySQL Datenbank herstellen:
    
$db=mysql_pconnect(“localhost”,“username”,“passwort”);
    
mysql_select_db(“my_datebase”,$db);
    
    
$ip $_SERVER[“REMOTE_ADDR”];
    
$zeit time();
    
    
// Alte IP Adresse aus der Tabelle löschen (300 Sekunden IP Sperre!):
    
$ablauf=$zeit-300
    
mysql_query(“DELETE FROM counter_ip WHERE zeit<$ablauf”);

    // Ist die IP schon in der Tabelle vorhanden?
    
$res=mysql_query(“SELECT ip FROM counter_ip WHERE ip = ’$ip’”,$te);
    if(!
mysql_fetch_row($res))
    {
        
        
// Nein, IP noch nicht vorhanden… Also eintragen !
        
mysql_query(“INSERT INTO counter_ip (ip,zeit) VALUES (’$ip’);”,$db);
    
        
// Counter aktualisieren
        
mysql_query(“UPDATE counter_stats SET besucher=besucher+1 WHERE datum=NOW();”,$db);
        if(
mysql_affected_rows()==0)
            
mysql_query(“INSERT INTO counter_stats (datum,besucher) VALUES (NOW(),’1′);”,$db);
    }
    
    
// Hitz aktualisieren … (ohne IP Sperre!)
    
mysql_query(“UPDATE counter_stats SET hitz=hitz+1 WHERE datum=NOW();”,$db);
    
    
// Counter Daten holen…
    
$res=mysql_query(“SELECT besucher,hitz FROM counter_stats WHERE datum = NOW();”,$db);
    list(
$besucher_heute,$hitz_heute)=mysql_fetch_row($res);
    
$res=mysql_query(“SELECT sum(besucher),sum(hitz) FROM counter_stats WHERE 1″,$db);
    list(
$besucher_gesamt,$hitz_gesamt)=mysql_fetch_row($res);
    
    
mysql_close($db);
    
    echo 
“Besucher Heute: $besucher_heute<br>Besucher Gesamt: $besucher_gesamt<br>Hitz Heute:     $hitz_heute<br>Hitz Gesamt: $hitz_gesamt”;
?>

Um diesen Code zu verstehen muss man eigentlich nur Schritt für Schritt die Kommentare lesen. Vieles Erklärt sich von selbst. Aber dennoch schreibe ich ein paar Zeilen dazu. Zu Beginn stellen wir eine normale Datenbank Verbindung her. Danach werden zwei Variablen geholt, erstmal die IP Adresse des Users und dann die aktuelle Zeit als UNIX Zeitstempel. Wir müssen nun alle ältern IP Adressen löschen. Das geschieht durch den DELETE Befehl.

Jetz schauen wir nach ob sich die IP noch in der Tabelle befindet, bei negativen Ergebnis schreiben wir die IP in der Tabelle mit der aktuellen Zeit. Zusätzlich aktualisieren wir den Tagescounter um +1! Wenn diese Aktualisierung fehlschlägt (weil bei ein neuen Tag noch keine passende Zeile gefunden wird), erstellen wir diese Zeile mit den aktuellen Datum.

Zum Schluss holen wir uns die Statistiken und geben diese aus.



Kommentieren

wichtige Artikel