Besucherstatistik - Speichern der Besucherzahlen
Autor
Flitze
Klicks 79542
Keywords:
Besucherstatistik Tutorial, Besucher zählen, Benutzerstatistik, Counter, User auf der Homepage zählen, Besucher zählen, Besucherzahlen speichern
Klicks 79542
Rating für Besucherstatistik
8 von 10
Bewertungen47
Stand
24.06.2010
8 von 10
Bewertungen47
Keywords:
Besucherstatistik Tutorial, Besucher zählen, Benutzerstatistik, Counter, User auf der Homepage zählen, Besucher zählen, Besucherzahlen speichern
Breadcrumb:
Tutorials » Besucherstatistik » Besucherstatistik - Speichern der Besucherzahlen
Speichern der Besucherzahlen
[ADSENSE_LINE]Wie bereits erwähnt, greife ich auf den Tipp für ein User-Online-Script zurück und übernehme von dort auch den folgenden Quellcode. Sollten also Fragen dazu auftauchen, bitte zunächst den entsprechenden Tipp betrachten
PHP:
<?php
// Alte (mehr als 1 Tag) IPs in 'Online' löschen
// damit die Datenbank nicht überfüllt wird
$sql = "DELETE FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 1 DAY) > Datum
";
mysql_query($sql);
// Überprüfe, ob die IP bereits gespeichert ist
$sql = "SELECT
IP
FROM
Online
Where
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql);
// Falls nicht, wird sie gespeichert
if (!mysql_num_rows($result)){
$sql = "INSERT INTO
Online
(IP,
Datum
)
VALUES ('".$_SERVER['REMOTE_ADDR']."',
NOW()
)
";
mysql_query($sql);
}
// Falls ja, wird ihr Datum aktualisiert
else {
$sql = "UPDATE
Online
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'
";
mysql_query($sql);
}
?>
Als erstes muss der Code am Anfang ergänzt werden, denn im vorigen Kapitel sagte ich ja, dass die Counter für jeden Tag automatisch erzeugt werden. Genau das tun wir mit diesem Query:
PHP:
<?php
// Prüfen, ob bereits ein Counter für den
// heutigen Tag erstellt wurde
$sql = "SELECT
ID
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
// ist der Tag nocht nicht vorhanden,
// wird ein neuer Tagescounter erstellt
if(!mysql_num_rows($result)){
$sql = "INSERT INTO
Counter
SET
Datum = CURDATE()
";
mysql_query($sql);
}
?>
Falls kein Counter für das heutige Datum existiert, wird einer erstellt. Dabei muss ich nicht explizit Anzahl = 0 in den Query schreiben, denn bei der Erstellung der Tabelle habe ich 0 als Standard- (bzw. Default-) Wert gesetzt. Warum es wichtig ist, dass dort kein NULL sondern die 'Zahl' 0 steht erkläre ich später.
Nun haben wir also sichergestellt, dass ein Counter existiert. Danach wird geprüft, ob der Besucher oder besser die IP des Besuchers bereits existiert. Ist das der Fall, erhöhen wir den Counter nicht, denn er wurde bereits gezählt. Existiert die IP allerdings noch nicht, wird die IP in Online gespeichert und die Anzahl des Counters um 1 erhöht.
Zum Erhöhen wird der folgende Code verwendet:
PHP:
<?php
$sql = "UPDATE
Counter
SET
Anzahl = Anzahl+1
WHERE
Datum = CURDATE()
";
mysql_query($sql);
?>
Anzahl = Anzahl+1 ist sehr angenehm, da ich es mir damit erspare, zuerst den aktuellen Counterstand auszulesen, ihn dann zu erhöhen und erst dann wieder einzufügen. Diese Anweisung funktioniert aber nur, wenn Anzahl eine Zahl enthält. Deshalb muss bei der Erstellung des Counters auch zwingend darauf geachtet werden, dass er mit 0 und nicht mit NULL initialisiert wird.
Das gesamte Skript sieht jetzt so aus:
PHP:
<?php
// Prüfen, ob bereits ein Counter für den
// heutigen Tag erstellt wurde
$sql = "SELECT
ID
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
// ist der Tag nocht nicht vorhanden,
// wird ein neuer Tagescounter erstellt
if(!mysql_num_rows($result)){
$sql = "INSERT INTO
Counter
SET
Datum = CURDATE()
";
mysql_query($sql);
}
// Alte (mehr als 1 Tag) IPs in 'Online' löschen
// damit die Datenbank nicht überfüllt wird
$sql = "DELETE FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 1 DAY) > Datum
";
mysql_query($sql);
// Überprüfe, ob die IP bereits gespeichert ist
$sql = "SELECT
IP
FROM
Online
Where
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql);
// Falls nicht, wird sie gespeichert...
if (!mysql_num_rows($result)){
$sql = "INSERT INTO
Online
(IP,
Datum
)
VALUES ('".$_SERVER['REMOTE_ADDR']."',
NOW()
)
";
mysql_query($sql);
// ... und die Anzahl wird um 1 erhöht
$sql = "UPDATE
Counter
SET
Anzahl = Anzahl+1
WHERE
Datum = CURDATE()
";
mysql_query($sql);
}
// Ansonsten wird ihr Datum aktualisiert
else {
$sql = "UPDATE
Online
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'
";
mysql_query($sql);
}
?>
Anmerkung
Dieses Skript muss unbedingt auf jeder Seite der Website aufgerufen werden, sonst kann es zum einen sein, dass evtl. gar kein Counter erzeugt wird und zum anderen, dass falsche (zu geringe) Werte entstehen.
Zurück zur vorigen Seite:
Besucherstatistik - Aufbau und Erklärung der MySQL-Tabelle(n) Weiter zur nächsten Seite:
Besucherstatistik - Ausgabe der Daten in tabellarischer Form