Im Einsatz habe ich einen recht einfachen PHP counter mit DB Tabelle und er funktioniert prima – hoffe er ist für andere auch nützlich!
Voraussetzung: Webhosting mit PHP und MySQL DB
1) Tabelle definieren (SQL Kommando steht oben im Kommentar)
2) in der Tabelle sind folgende Felder gespeichert: ID, IP-Adresse, Zeitstempel
3) das erste Feld ID ist der Zählerstand, der wird per auto-increment mit jedem Eintrag hochgezählt!
(soll der Counter bei 500 beginnen, dann Wert in Tabelle verändern -> 500)
4) gespeichert werden die IP-Adresse des Besuchers und die Zeit (für max. 24 Stunden!)
Einbinden kann man das PHP Script z.B. mit:
<div align="center"><?php include_once'counter.php';?></div>
das eigentliche PHP Script:
<?php <br ?>// Datenbank Schema - create der Tabelle! /* CREATE TABLE `counter` ( `id` bigint(20) NOT NULL auto_increment, `ip` varchar(15) NOT NULL default '', `timed` varchar(11) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;*/ // Hier wird die Verbindung zur Datenbank hergestellt und die Tabelle // angegeben, in der alle Daten gespeichert und ausgelesen werden. mysql_connect('localhost','user','passwort') or die("Verbindung fehlgeschlagen."); mysql_select_db('datenbank') or die("Datenbank nicht vorhanden."); $table = "counter"; // Hier wird der Timestamp des heutigen Tages Punkt Mitternacht errechnet, // benötigt wird dieser gleich für die IP-Sperre. $tag = date("j"); $monat = date("m"); $jahr = date("Y"); $timenow = mktime(0,0,0,$monat,$tag,$jahr); // Jetzt werden ersteinmal alle Datenbankeinträge, die vor heute gespeichert // wurden, gelöscht, um die DB nicht zu überfüllen. $sql_check = "SELECT * FROM `".$table."` WHERE `timed` < '".$timenow."'"; $erg_check = mysql_query($sql_check); while($row = mysql_fetch_array($erg_check)){ mysql_query("DELETE FROM `".$table."` WHERE `id`='".$row['id']."'"); } // Dieser Scriptteil überprüft, ob die IP des User schon in der Datenbank // vorhanden ist. Ist dies der Fall, so wird der Timestamp dieses Besuchers erneuert. // Andernfalls wird ein neuer Eintrag hinzugefügt, der neben dem Timestamp und // der IP eine ID enthält, die automatisch nach oben gezählt wird. (dank MySQLs auto_increment) $sql_check2 = "SELECT * FROM `".$table."` WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."'"; $erg_check2 = mysql_query($sql_check2); $row = mysql_num_rows($erg_check2); if($row == "0"){ mysql_query("INSERT INTO `".$table."` ( `id` , `ip` , `timed` ) VALUES ('', '".$_SERVER['REMOTE_ADDR']."', '".time()."')"); }else{ mysql_query("UPDATE `".$table."` SET `timed`='".time()."' WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."'"); } // Auslesen Teil I: die Anzahl der heutigen wird über die Anzahl der Einträge ermittelt. $sql_heute = "SELECT * FROM `".$table."`"; $erg_heute = mysql_query($sql_heute); $heute = mysql_num_rows($erg_heute); echo "<strong>heute:</strong> ".$heute.""; // Aulesen Teil II: die Anzahl aller Besucher wird über die id des letzten // Besuchers ermittelt. Dies ist möglich, da der auto_increment-Wert der DB immer // gesteigert wird, auch wenn die letzten EInträge gelöscht werden. $sql_gesamt = "SELECT * FROM `".$table."` ORDER BY `id` DESC"; $erg_gesamt = mysql_query($sql_gesamt); $row = mysql_fetch_array($erg_gesamt); $gesamt = $row['id']; echo "<strong>gesamt:</strong> ".$gesamt.""; // Auslesen Teil III: die Anzahl der User, die in den letzten 15 Minuten online // waren, wird ermittelt indem die Einträge zusammengezählt werden, deren Timestamp // innerhalb der letzten 15 Min (900sec) liegt. $zeit = "900"; $time = time(); $zeit = $time-$zeit; $sql_online = "SELECT * FROM `".$table."` WHERE `timed` > '".$zeit."'"; $erg_online = mysql_query($sql_online); $online = mysql_num_rows($erg_online); echo "<strong>online:</strong> ".$online.""; ?>
Ein User Max hat das hier mal gepostet, ich habe es leicht modifiziert, danke Max!
Hinweis: Die Speicherung der IP Adresse erfolgt nur maximal 24 Stunden und wird dann wieder gelöscht.
siehe rechtlicher Hinweis hierzu!