Hab einen kleiner Counter gebastelt, der folgende Features hat:
ersteinmal das ganze Script. Erklärung folgt unten:
Schema der MySQL-Tabelle:
Erklärung
Hier wird die Verbindung zur Datenbank hergestellt und die Tabelle
angegeben, in der alle Daten gespeichert und ausgelesen werden.
Hier wird der Timestamp des heutigen Tages Punkt Mitternacht errechnet,
benötigt wird dieser gleich für die IP-Sperre.
Jetzt werden ersteinmal alle Datenbankeinträge, die vor heute gespeichert
wurden, glöscht, um die DB nicht zu überfüllen.
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)
Auslesen Teil I: die Anzahl der heutigen wird über die Anzahl der Einträge ermittelt.
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.
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.
bei Problemen oder Anregungen - einfach hier fragen.
fg Max
- 24h IP Sperre
- eine einzige MySQL-Tabelle
- leicht einzubinden und anzupassen
- zeigt heutige Besucher und die in den letzten 15 Min. an
ersteinmal das ganze Script. Erklärung folgt unten:
PHP-Code:
<?php
mysql_connect('localhost','user','passwort') or die("Verbindung fehlgeschlagen.");
mysql_select_db('datenbank') or die("Datenbank nicht vorhanden.");
$table = "counter";
$tag = date("j");
$monat = date("m");
$jahr = date("Y");
$timenow = mktime(0,0,0,$monat,$tag,$jahr);
$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']."'");
}
$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']."'");
}
$sql_heute = "SELECT * FROM `".$table."`";
$erg_heute = mysql_query($sql_heute);
$heute = mysql_num_rows($erg_heute);
echo "<b>heute:</b> ".$heute."<br />";
$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 "<b>gesamt:</b> ".$gesamt."<br />";
$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 "<b>online:</b> ".$online."";
?>
Code:
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;
PHP-Code:
<?php
mysql_connect('localhost','user','passwort') or die("Verbindung fehlgeschlagen.");
mysql_select_db('datenbank') or die("Datenbank nicht vorhanden.");
$table = "counter";
?>
angegeben, in der alle Daten gespeichert und ausgelesen werden.
PHP-Code:
<?php
$tag = date("j");
$monat = date("m");
$jahr = date("Y");
$timenow = mktime(0,0,0,$monat,$tag,$jahr);
?>
benötigt wird dieser gleich für die IP-Sperre.
PHP-Code:
<?php
$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']."'");
}
?>
wurden, glöscht, um die DB nicht zu überfüllen.
PHP-Code:
<?php
$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']."'");
}
?>
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)
PHP-Code:
<?php
$sql_heute = "SELECT * FROM `".$table."`";
$erg_heute = mysql_query($sql_heute);
$heute = mysql_num_rows($erg_heute);
echo "<b>heute:</b> ".$heute."<br />";
?>
PHP-Code:
<?php
$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 "<b>gesamt:</b> ".$gesamt."<br />";
?>
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.
PHP-Code:
<?php
$zeit = "900";
$time = time();
$zeit = $time-$zeit;
$sql_online = "SELECT * FROM `".$table."` WHERE `timed` > '".$zeit."'";
$erg_online = mysql_query($sql_online);
$online2 = mysql_num_rows($erg_online);
echo "<b>online:</b> ".$online2."";
?>
waren, wird ermittelt indem die Einträge zusammengezählt werden, deren Timestamp
innerhalb der letzten 15 Min (900sec) liegt.
bei Problemen oder Anregungen - einfach hier fragen.
fg Max
Kommentar