php counter mit MySQL DB

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."";
?>

Beispiel als download

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!


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*