[Code] Counter mit MySQLSie befinden sich: Home > Webmaster News
Im Folgenden wollen wir uns einen eigenen Counter für unsere Webseiten programmieren, der den Zählerstand in einer MySQL-Tabelle verwaltet.
Diese Tabelle müssen wir zunächst erzeugen:
CREATE TABLE `counter` (
`id` INT NOT NULL AUTO_INCREMENT ,
`ipadresse` varchar(15) NOT NULL ,
`letzter_besuch` int(10) unsigned NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
INSERT INTO `counter` ( `ipadresse` , `letzter_besuch` )
VALUES ('zaehlerstand', '0');
Wie Sie sehen, haben wir sofort auch eine Zeile erzeugt, in der der Zählerstand gespeichert wird. Wir nutzen hier die Tatsache, dass wir einen varchar-Key und einen numerischen Wert brauchen und beides in dieser Struktur vorfinden. Als 'IP-Adresse' speichern wir das Wort 'zaehlerstand' und als Anfangswert für den Zählerstand den Wert 0. Dies spart uns eine weitere Tabelle, in der nur eine einzige Zeile verwaltet würde.
In dieser Hilfsdatei legen wir die Zugangsdaten für die Datenbank fest und zugleich eine Variable für die Zeitangabe einer Reloadsperre.
<?php
// connect.php
$cfg = array();
$cfg['zeitsperre'] = 4;
$cfg['host']='localhost';
$cfg['datenbank']='datenbankname';
$cfg['login']='username';
$cfg['passwort']='...passwort...';
$conn=mysql_connect($cfg['host'],$cfg['login'],$cfg['passwort']);
$db=mysql_select_db($cfg['datenbank']);
?>
Im folgenden gehen wir davon aus, dass connect.php schon per include-Anweisung ausgeführt wurde, es eine Verbindung zur datenbank gibt, und die $cfg[]-Variablen existieren.
Hier nun der erste Entwurf eines Counters, noch Ohne Reloadsperre:
<?php
// Zaehlerstand um 1 erhöhen
$sqlc = "UPDATE counter SET letzter_besuch = letzter_besuch+1 WHERE ipadresse='zaehlerstand'";
mysql_query($sqlc) OR die(mysql_error());
$sqlc = "SELECT letzter_besuch FROM counter WHERE ipadresse='zaehlerstand'";
$ergc = mysql_query($sqlc);
$rowc = mysql_fetch_assoc($ergc);
echo 'Anzahl Besucher bisher '.$row['letzter_besuch'];
?>
Wenn wir diesen Code einbauen so stellen wir fest, dass mit jedem Aufruf der Seite der Zähler um 1 erhöht wird. Wir wollen nun aber noch erreichen, dass jeder besucher nur einmal gezählt wird. Diese Sperre soll nach Ablauf von 4 Minuten, also der in $cfg['zeitsperre'] gespeicherten Zahl wieder aufgehoben werden. Einen bestimmten User erkennen wir an seiner IP-Adresse. Wir speichern also die erkannte IP zusammen mit der Zeit in die Datenbank. Der Ablauf des Zählens verändert sich nun wie folgt: a) alle Zeilen aus der tabelle löschen, die älter sind als 4 Minuten b) Nachsehen, ob ein Eintrag zur ermittelten IP-Adresse vorliegt b1) Wenn nein: IP-Adresse mit aktuellem Zeitstempel speichern und Counter erhöhen b2) Wenn ja: nichts machen c) neuen Counter auslesen und anzeigen
<?php
// Ermitttle Zeit(jetzt) und Zeit(vor 4 Minuten)
$jetzt = time();
$alt = $jetzt - 60 * $cfg['zeitsperre'];
// Alte Zeiten löschen
$sql = "DELETE FROM counter WHERE ipadresse != 'zaehlerstand' AND letzter_besuch < '$alt'";
mysql_query($sql) OR die(mysql_error());
// IP ermitteln
if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
// Tabellenzeile zu IP suchen
$sql = "SELECT letzter_besuch FROM counter WHERE ipadresse = '$realip'";
$erg = mysql_query($sql);
$row = mysql_fetch_assoc($erg);
if(mysql_num_rows($erg) == 0) { // IP nicht gefunden
// $realip mit $jetzt eintragen
$ins = "INSERT INTO counter (ipadresse,letzter_besuch) VALUES ('$realip',$jetzt)";
mysql_query($ins) OR die(mysql_error());
// Counter erhöhen
$sqlc = "UPDATE counter SET letzter_besuch = letzter_besuch+1 WHERE ipadresse='zaehlerstand'";
mysql_query($sqlc) OR die(mysql_error());
}
// Aktuellen Counter lesen und anzeigen
$sqlc = "SELECT letzter_besuch FROM counter WHERE ipadresse='zaehlerstand'";
$ergc = mysql_query($sqlc);
$rowc = mysql_fetch_assoc($ergc);
echo 'Anzahl Besucher bisher '.$row['letzter_besuch'];
?>
(Autor: Wolfgang), Eingetragen am 30.07.2008
Kommentare (1)Sven kommentierte am 31.12.2011 um 14:04 Uhr hi, da ist ein kleiner fehler auf deiner seite! am ende des tutorials steht diese zeile: echo 'Anzahl Besucher bisher '.$row['letzter_besuch']; an dem row fehlt ein c, sonst wird immer die letzte gespeicherte Zeit ausgegeben. mit dem rowc funktioniert es wunderbar! vlg Sven Schreib ein Kommentar
|