Besucherstatistik - Ausgabe der Daten in tabellarischer Form
Autor
Flitze
Klicks 80067
Keywords:
Besucherstatistik Tutorial, Besucher zählen, Benutzerstatistik, Counter, User auf der Homepage zählen, Daten ausgeben, Daten anzeigen, tabellarisch anzeigen
Klicks 80067
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, Daten ausgeben, Daten anzeigen, tabellarisch anzeigen
Breadcrumb:
Tutorials » Besucherstatistik » Besucherstatistik - Ausgabe der Daten in tabellarischer Form
Ausgabe der Daten
[ADSENSE_LINE]Ich persönliche verwende 2 verschiedene Anzeigemöglichkeiten der Daten. Zum einen eine Kurzübersicht in der linken Navigation, die die momentanen Besucher sowie die die Gesamtzahl der User heute, gestern und insgesamt enthält. Zum anderen eine detaillierte Anzeige im Statistikbereich für die Besucherzahlen, bei der man jeden Tag einzeln auswählen kann und in dem außerdem die entsprechenden Diagramme zu dieser Auswahl angezeigt werden.
In diesem Abschnitt werde ich auf beide Möglichkeiten eingehen, aber die zweite im nächsten Kapitel nochmal aufgreifen.
User, die momentan online sind
Der ensprechende Code ist wieder aus dem Tipp für ein User-Online-Script übernommen worden.
PHP:
<?php
// Alle IPs, die nicht älter als 2 Minuten sind,
// werden gezählt
$sql = "SELECT
COUNT(*)
FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 2 MINUTE) < Datum
";
$result = mysql_query($sql);
$user_now = mysql_result($result, 0);
?>
User 'heute'
PHP:
<?php
// User die 'heute' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_heute = $row['Anzahl'];
?>
Es wird nicht mehr mit COUNT(*) gearbeitet, sondern direkt das Anzahl-Feld des heutigen Tages ausgelesen. 'Heute' ergibt sich dabei aus Datum = CURDATE()
User 'gestern'
PHP:
<?php
// User die 'gestern' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_gestern = $row['Anzahl'];
?>
Funktioniert analog zu User heute, der einzige Unterschied ist, dass ich mittels DATE_SUB(CURDATE(), INTERVAL 1 DAY) den gestrigen Tag ('Heute' [minus] einen Tag) für die WHERE Bedingung definiere.
Wer mag, kann in gleicher Weise auch noch weitere Daten hinzufügen, aber wir müssen es ja nicht übertreiben
User 'gesamt'
PHP:
<?php
// User die insgesamt die Seite besucht haben.
// Dazu wird die Gruppenfunktion SUM()
// verwendet, die alle Werte der Spalte 'Anzahl' summiert
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
";
$result = mysql_query($sql);
$user_gesamt = mysql_result($result, 0);
?>
Wie kommentiert, wird die Funktion SUM() über alle Anzahl-Felder von Counter angewandt. Das Ergebnis ist dann die Gesamtzahl der Besucher der Homepage. Wer bereits selbst einen Counter besitzt (selbst programmiert oder einen Free-Counter eines Drittanbieters) oder anderweitige Daten über die Benutzerzahlen seiner Seite hat (einige Anbieter stellen ja dementsprechenden Statistiken zur Verfügung), der kann diese Zahl dann einfach auf $user_gesamt aufaddieren um die bisherigen Besucher nicht zu 'verlieren'.
Ausgabe der Daten
PHP:
<?php
echo "<h1>Statistik</h1>\n";
echo " <table cellpadding=\"2\" style=\"margin-bottom:10px;\">\n".
" <tr><td>Jetzt</td><td style=\"text-align:right;\">".$user_now."</td></tr>\n".
" <tr><td>Heute</td><td style=\"text-align:right;\">".$user_heute."</td></tr>\n".
" <tr><td>Gestern</td><td style=\"text-align:right;\">".$user_gestern."</td></tr>\n".
" <tr><td>Gesamt</td><td style=\"text-align:right;\">".$user_gesamt."</td></tr>\n".
" </table>\n";
?>
Nix programmiertechnisch erklärenswertes aus meiner Sicht. An die DIV-Verfechter:
Bei tabellarischen Daten darf man m.E. auch Tabellen benutzen
Detaillierte Angabe der Daten
Als erstes brauchen wir ein Formular, durch das wir einen bestimmten Tag respektive Counter auswählen können. Dabei setze ich auf Select-Elemente, schließlich kommt Klicki-Bunti bei dem Großteil der User besser an, als wenn man Tastatureingaben verlangt
PHP:
<?php
$Monatsnamen = array(1 => 'Januar',
2 => 'Februar',
3 => 'März',
4 => 'April',
5 => 'Mai',
6 => 'Juni',
7 => 'Juli',
8 => 'August',
9 => 'September',
10 => 'Oktober',
11 => 'November',
12 => 'Dezember'
);
echo "<form name=\"User\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<div style=\"padding:0px 0px 0px 20px;\">\n";
echo "<select name=\"Tag\">\n";
echo "<option value=\"0\">Tag</option>\n";
for($i=1;$i<=31;$i++){
if($i==$tag)
echo "<option value=\"".$i."\" selected>".$i.".</option>\n";
else
echo "<option value=\"".$i."\">".$i.".</option>\n";
}
echo "</select>\n";
echo "<select name=\"Monat\">\n";
echo "<option value=\"0\">Monat</option>\n";
for($i=1;$i<=12;$i++){
if($i==$monat)
echo "<option value=\"".$i."\" selected>".$Monatsnamen[$i]."</option>\n";
else
echo "<option value=\"".$i."\">".$Monatsnamen[$i]."</option>\n";
}
echo "</select>\n";
echo "<select name=\"Jahr\">\n";
echo "<option value=\"0\">Jahr</option>\n";
for($i=2008;$i>=2006;$i--){
if($i==$jahr)
echo "<option value=\"".$i."\" selected>".$i."</option>\n";
else
echo "<option value=\"".$i."\">".$i."</option>\n";
}
echo "</select>\n";
echo "<br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Daten anzeigen\">\n";
echo "</div></form>\n";
?>
Zu Beginn habe ich das Array $Monatsnamen definiert, weil 1. Januar 2008 besser aussieht als 1.1.2008. Außerdem kann es dadurch zu keinen Verwechslungen des Tag- und Monat-Select-Elements kommen. (Auch wenn das bei ein bisschen Nachdenken eh nicht vorkommen kann - Monate mit nur 12 Tagen haben wir nicht sooo viele ). Als Jahresvorgabe habe ich 2006-2008 gewählt, weil ich seit Ende 2006 Benutzerzahlen aufzeichne.
Wie außerdem sicherlich auffällt, verwende ich die Variablen $tag, $monat und $jahr, die ich bisher noch nicht definiert habe. Sie enthalten entweder das Datum, dass der Benutzer zuvor ausgewählt hat oder - sollte er kein Datum oder ein ungültiges gewählt haben - das Datum des heutigen Tages.
Um diese Variablen mit Leben zu füllen, muss Folgendes an den Beginn des Skriptes geschrieben werden:
PHP:
<?php
// heutiges Datum auswählen
$datum = getdate();
$jahr = $datum['year'];
$monat = $datum['mon'];
$tag = $datum['mday'];
// Fehlerarray erzeugen
$errors = array();
// Prüfen, ob Jahr, Monat und Tag ausgewählt wurden
if(!isset($_POST['Jahr']) OR $_POST['Jahr'] == '0')
$errors[] = "Sie haben kein Jahr ausgewählt.";
elseif(!isset($_POST['Monat']) OR $_POST['Monat'] == '0')
$errors[] = "Sie haben keinen Monat ausgewählt.";
elseif(!isset($_POST['Tag']) OR $_POST['Tag'] == '0')
$errors[] = "Sie haben keinen Tag ausgewählt.";
else{
// Prüfen, ob ds Datum gültig ist
if(!checkdate($_POST['Monat'], $_POST['Tag'], $_POST['Jahr']))
$errors[] = "Das Datum (".$_POST['Tag']." ".$Monatsnamen[$_POST['Monat']].". ".$_POST['Jahr'].") ist ungültig.";
else{
// Prüfen, ob zu dem ausgewählten Datum ein Counter existiert
$sql = "SELECT
COUNT(*)
FROM
Counter
WHERE
YEAR(Datum) = '".mysql_real_escape_string($_POST['Jahr'])."' AND
MONTH(Datum) = '".mysql_real_escape_string($_POST['Monat'])."' AND
DAYOFMONTH(Datum) = '".mysql_real_escape_string($_POST['Tag'])."'
";
$result = mysql_query($sql);
if(!mysql_result($result, 0))
$errors[] = "Zu dem gewählten Datum (".$_POST['Tag'].". ".$Monatsnamen[$_POST['Monat']]." ".$_POST['Jahr'].") existieren keine Daten.";
}
}
// Fehler ausgeben
if(count($errors)){
echo "<p style=\"font-weight:bold;\">\n";
foreach($errors as $error)
echo $error."\n<br>\n";
$echo "Standardmäßig wird das heutige Datum (".$tag.". ".$Monatsnamen[$monat]." ".$jahr.") ausgewählt.\n";
echo "</p>\n";
}
// Ansonsten Daten aus dem Formular übernehmen
else{
$jahr = (int)mysql_real_escape_string($_POST['Jahr']);
$monat = (int)mysql_real_escape_string($_POST['Monat']);
$tag = (int)mysql_real_escape_string($_POST['Tag']);
}
?>
Mit der Funktion getDate() lasse ich mir das aktuelle Datum erzeugen und speichere die darin enthaltenen, relevanten Daten in $tag, $monat und $jahr. Danach wird zum einen geprüft, ob der Benutzer überhaupt Tag, Monat und Jahr aus dem Formular ausgefüllt hat und, falls ja, ob ds daraus resultierende Datum gültig ist. Zur Datumsprüfung verwende ich checkDate(), denn dabei werden von Haus aus bereits Schaltjahre etc. berücksichtigt. Letztendlich muss ich noch sicherstellen, dass zu dem gewählten Datum auch ein Counter existiert, dessen Daten ich anzeigen kann. Über das Formular können nämlich auch Daten ausgewählt werden, die vor dem Beginn unserer Counteraufzeichnung oder in der Zukunft liegen. Die WHERE Bedingung des Querys erkläre ich bei der letzendlichen Auswahl der Daten.
Wenn alle Prüfungen ohne Fehler durchlaufen werden, wird das Datum des Nutzers übernommen und der Auswahl des Counters zu Grunde gelegt. Ansonsten wird einfach das aktuelle Datum als Grundlage beibehalten.Die Auswahl der Daten geht wie folgt von statten:
PHP:
<?php
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."' AND
DAYOFMONTH(Datum) = '".$tag."'
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$anzahl_tag = $row['Anzahl'];
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."'
";
$result = mysql_query($sql);
$anzahl_monat = mysql_result($result, 0);
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."'
";
$result = mysql_query($sql);
$anzahl_jahr = mysql_result($result, 0);
?>
Mittels der MySQL-Funktionen YEAR(), MONTH() und DAYOFMONTH() extrahiere ich aus dem im Counter-Datensatz gespeicherten Datum Jahr, Monat und Tag und vergleiche diese mit den jeweiligen Daten aus dem Formular. Ich wähle dabei sowohl die Daten des genauen Datums wie auch die des Monats und des Jahres aus. Dazu verwende ich die bereits oben erwähnte Gruppenfunktion SUM(). Wie Ihr die Daten nun ausgebt, überlasse ich eurer Phantasie bzw. dem Layout eurer Seite
Zurück zur vorigen Seite:
Besucherstatistik - Speichern der Besucherzahlen Weiter zur nächsten Seite:
Besucherstatistik - Graphische Auswertung ohne Graphikfunktionen