Der Counter
Nach der ganzen Vorbereitung kommen wir nun endlich zum eigentlichen, dem Counter. Das folgende Ablaufdiagramm gibt die prinzipiellen Überlegungen zum Counter wieder.
Datenbankverbindung prüfen
Direkt nach dem Start muss geprüft werden, ob die Verbindung zum Datenbank-Server und zur Datenbank funktioniert. Sollte dieses nicht der Fall sein, so kann der Counter nicht arbeiten und wird sofort mit Ausgabe von ? beendet.
Konfiguration festlegen
Am Anfang unseres Skriptes wollen wir mit Hilfe von Variablen unseren Counter konfigurieren. Dieses hat später den Vorteil, dass bei Änderungen nicht der ganze Quelltext durchsucht werden muss. Bei den Namen der Variablen sollte man immer größte Sorgfalt walten lassen. Eine später nicht mehr zuordbare Variablenstruktur erschwert die Fehlersuche oder eine spätere Erweiterung. Variablen die hier mit beginn
Mit legen wir die minimale Anzahl der Stellen fest. In speichern wir die aktuelle Zeit und zeihen von dieser die Anzahl der Sekunden ab, für die eine IP-Adresse nicht gezählt werden soll. In speichern wir genau diese IP-Adresse zwischen (Array, da die Variable außerhalb der Funktion deklariert wurde).
// Konfiguration $digits = 5; $compTime= time()-10; $compIP = $GLOBALS[tempIP];
Mit $digits legen wir die minimale Anzahl der Stellen fest. In $compTime speichern wir die aktuelle Zeit und zeihen von dieser die Anzahl der Sekunden ab, für die eine IP-Adresse nicht gezählt werden soll. In $compIP speichern wir genau diese IP-Adresse zwischen ($GLOBALS, da die Variable außerhalb der Funktion deklariert wurde).
Alte IP's löschen
Nun ist es an der Zeit die alten IP-Adressen, also diejenigen die älter sind als die Zeit, die in $compTime festgelegt wurde, aus der DB zu löschen. Genau das bewirkt folgende MySQL Formulierung:
// alte IP-Adressen freigeben
$query = "DELETE FROM counter WHERE edat<='$compTime'
AND id!='1'";
mysql_query($query);
Gesamtzählerstand ermitteln
Jetzt ist ein guter Zeitpunkt den aktuellen Gesamtzählerstand aus der DB zu lesen. Dieses wollten wir ja immer im Datenfeld id=1 unter ip speichern. Folgende Anweisung ließt den Zählerstand aus und speichert ihn in der Variable $counter.
// aktuellen Counterstand auslesen $query = "SELECT ip FROM counter WHERE id='1'"; $result = mysql_query($query); $row = mysql_fetch_row($result); $counter = $row[0];
Zählerstand erhöhen
Bevor wir den Gesamtzählerstand um 1 erhöhen, müssen ($compIP) noch gesperrt ist. Hierzu suchen wir einfach in der gesamten Tabelle nach dieser IP. Die Anzahl der Treffer muss > 1 sein.
// schauen ob aktuelle IP gesperrt
$query = "SELECT ip FROM counter WHERE ip='$compIP'";
if (dbCount($query) < 1) {
// IP ist frei, IP eintragen
$query = "INSERT INTO counter (ip,edat) "."VALUES
('$compIP',".time().")";
mysql_query($query);
// Counter +1
$counter = $counter+1;
$query = "UPDATE counter SET ip=$counter WHERE id='1'";
mysql_query($query);
}
Wenn dieses stimmt, können wir gleich die aktuelle IP-Adresse in der Datenbank eintragen. Somit ist diese IP dann für xxx Sekunden (festgelegt in der Konfigurationsvariable $compTime) für die nächsten Besuche gesperrt. Nun bleibt nur noch den Zählerstand um 1 zu erhöhen und diesen neuen Wert in die DB einzutragen. Sollte die Trefferanzahl >= 1 sein so ist diese Adresse noch gesperrt und es passiert nicht.
dbCount sowie dbOpen sind eigene Funktionen die uns den Umgang mit der Datenbank vereinfacht und zusätzlich den Quellcode des Counter übersichtlicher gestaltet. Den Quellcode finden Sie am Ende dieses Tutorials im Quelltext von counter.php.
als
Quellcode-Counter