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

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Unicode

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt4
Heute229
Gestern249
Gesamt1548389

Besucherstatistik - Speichern der Besucherzahlen

Autor Flitze
Klicks 53628
Rating für Besucherstatistik
  8.1 von 10
Bewertungen43
Stand 24.06.2010
Keywords:
Besucherstatistik Tutorial, Besucher zählen, Benutzerstatistik, Counter, User auf der Homepage zählen, Besucher zählen, Besucherzahlen speichern

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » Besucherstatistik » Besucherstatistik - Speichern der Besucherzahlen
Seite : 1 2 3 4 5 Bewerten
Article Wizard - deutscher Article Spinner

Speichern der Besucherzahlen


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

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8.1

Workshops (3)

8.8
8.7
7.6

Tipps (13)

7.2
6.7
6.5

Artikel (26)

8.4
7.2
6.4

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-2016