PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt1
Heute274
Gestern391
Gesamt2386089

Besucherstatistik - Ausgabe der Daten in tabellarischer Form

Autor Flitze
Klicks 80067
Rating für Besucherstatistik
  8 von 10
Bewertungen47
Stand 24.06.2010
Keywords:
Besucherstatistik Tutorial, Besucher zählen, Benutzerstatistik, Counter, User auf der Homepage zählen, Daten ausgeben, Daten anzeigen, tabellarisch anzeigen

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » Besucherstatistik » Besucherstatistik - Ausgabe der Daten in tabellarischer Form
Seite : 1 2 3 4 5 Bewerten
Article Wizard - deutscher Article Spinner

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($result0);
?>


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($result0);
?>


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(=> 'Januar',
                         
=> 'Februar',
                         
=> 'März',
                         
=> 'April',
                         
=> 'Mai',
                         
=> 'Juni',
                         
=> 'Juli',
                         
=> 'August',
                         
=> '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&auml;hlt.";
    elseif(!isset(
$_POST['Monat']) OR $_POST['Monat'] == '0')
        
$errors[] = "Sie haben keinen Monat ausgew&auml;hlt.";
    elseif(!isset(
$_POST['Tag']) OR $_POST['Tag'] == '0')
        
$errors[] = "Sie haben keinen Tag ausgew&auml;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&uuml;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($result0))
                
$errors[] = "Zu dem gew&auml;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&auml;ßig wird das heutige Datum (".$tag.". ".$Monatsnamen[$monat]." ".$jahr.") ausgew&auml;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($result0);

    
$sql "SELECT
                SUM(Anzahl)
            FROM
                Counter
            WHERE
                YEAR(Datum) = '"
.$jahr."'
           "
;
    
$result mysql_query($sql);
    
$anzahl_jahr mysql_result($result0);
?>


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

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2024