Felidae
New member
Hallo, ich habe einen Besucherzähler geschrieben und für alle die selbst einen schreiben möchten oder einfach einen zum Übernehmen brauchen stelle ich ihn hier mit Erklärung zur Verfügung.
Er soll jeden Besucher zählen (kein Botschutz usw.) aber das nur einmal pro Tag. Der selbe Besucher wird also erst nach 0 Uhr wieder gezählt. Das ganze funktioniert mit einer IP Kontrolle.
In einer MySQL Datenbank speichern wir alle Notwendigen Daten.
Besucher_ID: Eine fortlaufende Nummerierung aller Gäste.
Besucher_Datum: Speichert das Datum des Besuchers.
Besucher_IP: Die IP das Besuchers.
Zuerst beginnen wir das PHP Script, lassen uns alle Fehler anzeigen und senden einen header. Anschließend muss noch die Verbindung zum Server und zur Datenbank aufgenommen werden.
Da wir nach 0 Uhr den Besucher wieder zählen möchten, müssen die Einträge die nicht von heute sind gelöscht werden. Dazu senden wir einen Query, der genau dies tut.
Jetzt wenden wir uns dem aktuellen Besucher zu und überprüfen erstmal, ob seine IP schon in der Datenbank steht. Dazu senden wir einen Query der alle Einträge aus der Datenbank holt die die selbe IP haben wie der aktuelle Besucher.
Wenn wir diese Anzahl jetzt von der Funktion mysql_num_rows() durchzählen lassen, erhalten wir entweder 1 oder 0, da die IP entweder schon da ist oder eben nicht. Das überprüfen wir mit einer If-Abfrage und wenn die IP noch nicht in der Datenbank steht fügen wir sie mit dem aktuellen Datum hinzu.
Auf der Seite möchten wir nacher ausgeben wie viele Besucher heute und wie viele schon insgesamt auf der Seite waren. Dazu benutzen wir die beiden Variaben $heute und $gesamt.
Um die Variable $heute zu füllen zählen wir einfach alle Einträge in der Datenbank durch, denn da wir ganz am Anfang alle älteren gelöscht haben sind jetzt nur noch die heutigen darin.
Die Variable $gesamt füllen wir, indem wir die größte Besucher_ID auslesen. Denn da ja alle Besucher fortlaufend nummeriert werden sagt uns die neuste ID auch wie viele Besucher insgesamt da waren.
Jetzt müssen wir das nur noch mit HTML auf die Seite schreiben lassen und das PHP Script beenden.
Das ist schon der komplette Besucherzähler. Der folgende Code beinhaltet nochmal alles am Stück und ist damit nichts neues mehr.
Ich hoffe, dass mein Tutorial einigermaßen hilfreich und verständlich war.
mfg.
Er soll jeden Besucher zählen (kein Botschutz usw.) aber das nur einmal pro Tag. Der selbe Besucher wird also erst nach 0 Uhr wieder gezählt. Das ganze funktioniert mit einer IP Kontrolle.
In einer MySQL Datenbank speichern wir alle Notwendigen Daten.
Code:
Besucher
Besucher_ID (int, auto_increment, Primärschlüssel)
Besucher_Datum (date)
Besucher_IP (varchar 39)
Besucher_Datum: Speichert das Datum des Besuchers.
Besucher_IP: Die IP das Besuchers.
Zuerst beginnen wir das PHP Script, lassen uns alle Fehler anzeigen und senden einen header. Anschließend muss noch die Verbindung zum Server und zur Datenbank aufgenommen werden.
PHP:
<?php
error_reporting(E_ALL);
header("Content-Type: text/html; charset=utf-8");
mysql_connect("localhost", "name", "passwort") OR die("Verbindung zum Server konnte nicht aufgebaut werden.\n");
mysql_select_db("datenbank") OR die("Verbindung zur Datenbank konnte nicht aufgebaut werden.\n");
Da wir nach 0 Uhr den Besucher wieder zählen möchten, müssen die Einträge die nicht von heute sind gelöscht werden. Dazu senden wir einen Query, der genau dies tut.
PHP:
$query = "DELETE FROM
Besucher
WHERE
Besucher_Datum != CURDATE();";
mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
Jetzt wenden wir uns dem aktuellen Besucher zu und überprüfen erstmal, ob seine IP schon in der Datenbank steht. Dazu senden wir einen Query der alle Einträge aus der Datenbank holt die die selbe IP haben wie der aktuelle Besucher.
PHP:
$query = "SELECT
Besucher_IP
FROM
Besucher
WHERE
Besucher_IP = '".$_SERVER['REMOTE_ADDR']."';";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
Wenn wir diese Anzahl jetzt von der Funktion mysql_num_rows() durchzählen lassen, erhalten wir entweder 1 oder 0, da die IP entweder schon da ist oder eben nicht. Das überprüfen wir mit einer If-Abfrage und wenn die IP noch nicht in der Datenbank steht fügen wir sie mit dem aktuellen Datum hinzu.
PHP:
if(mysql_num_rows($result) == 0) {
$query = "INSERT INTO
Besucher
SET
Besucher_Datum = NOW(),
Besucher_IP = '".$_SERVER['REMOTE_ADDR']."';";
mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
}
Auf der Seite möchten wir nacher ausgeben wie viele Besucher heute und wie viele schon insgesamt auf der Seite waren. Dazu benutzen wir die beiden Variaben $heute und $gesamt.
Um die Variable $heute zu füllen zählen wir einfach alle Einträge in der Datenbank durch, denn da wir ganz am Anfang alle älteren gelöscht haben sind jetzt nur noch die heutigen darin.
PHP:
$query = "SELECT
Besucher_ID
FROM
Besucher;";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
$heute = mysql_num_rows($result);
Die Variable $gesamt füllen wir, indem wir die größte Besucher_ID auslesen. Denn da ja alle Besucher fortlaufend nummeriert werden sagt uns die neuste ID auch wie viele Besucher insgesamt da waren.
PHP:
$query = "SELECT
Besucher_ID
FROM
Besucher
ORDER BY
Besucher_ID DESC
LIMIT
1;";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
$row = mysql_fetch_assoc($result);
$gesamt = $row['Besucher_ID'];
Jetzt müssen wir das nur noch mit HTML auf die Seite schreiben lassen und das PHP Script beenden.
PHP:
echo "<?xml version='1.0' encoding='utf-8' ?>\n";
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n";
echo "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de'>\n";
echo " <head>\n";
echo " <title>Besucherzähler</title>\n";
echo " <meta name='robots' content='noindex, nofollow' />\n";
echo " </head>\n";
echo " <body>\n";
echo " <table border='1'>\n";
echo " <tr>\n";
echo " <th colspan='2'>Besucher</th>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>Heute</td>\n";
echo " <td>$heute</td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>Gesamt</td>\n";
echo " <td>$gesamt</td>\n";
echo " </tr>\n";
echo " </table>\n";
echo " </body>\n";
echo "</html>\n";
?>
Das ist schon der komplette Besucherzähler. Der folgende Code beinhaltet nochmal alles am Stück und ist damit nichts neues mehr.
PHP:
<?php
error_reporting(E_ALL);
header("Content-Type: text/html; charset=utf-8");
mysql_connect("localhost", "name", "passwort") OR die("Verbindung zum Server konnte nicht aufgebaut werden.\n");
mysql_select_db("datenbank") OR die("Verbindung zur Datenbank konnte nicht aufgebaut werden.\n");
// Alte IP-Adressen löschen
$query = "DELETE FROM
Besucher
WHERE
Besucher_Datum != CURDATE();";
mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
// Wenn aktuelle IP nicht vorhanden, dann in die DB eintragen
$query = "SELECT
Besucher_IP
FROM
Besucher
WHERE
Besucher_IP = '".$_SERVER['REMOTE_ADDR']."';";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
if(mysql_num_rows($result) == 0) {
$query = "INSERT INTO
Besucher
(Besucher_Datum,
Besucher_IP)
VALUES
(NOW(),
'".$_SERVER['REMOTE_ADDR']."');";
mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
}
// IP-Adressen durchzählen und größte ID auslesen
$query = "SELECT
Besucher_ID
FROM
Besucher;";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
$heute = mysql_num_rows($result);
$query = "SELECT
Besucher_ID
FROM
Besucher
ORDER BY
Besucher_ID DESC
LIMIT
1;";
$result = mysql_query($query) OR die("Daten konnten nicht übertragen werden.\n");
$row = mysql_fetch_assoc($result);
$gesamt = $row['Besucher_ID'];
// Ausgabe in HTML
echo "<?xml version='1.0' encoding='utf-8' ?>\n";
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n";
echo "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de'>\n";
echo " <head>\n";
echo " <title>Besucherzähler</title>\n";
echo " <meta name='robots' content='noindex, nofollow' />\n";
echo " <meta http-equiv='Content-Style-Type' content='text/css' />\n";
echo " <link rel='stylesheet' type='text/css' href='style.css' />\n";
echo " </head>\n";
echo " <body>\n";
echo " <table border='1'>\n";
echo " <tr>\n";
echo " <th colspan='2'>Besucher</th>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>Heute</td>\n";
echo " <td>$heute</td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>Gesamt</td>\n";
echo " <td>$gesamt</td>\n";
echo " </tr>\n";
echo " </table>\n";
echo " </body>\n";
echo "</html>\n";
?>
Ich hoffe, dass mein Tutorial einigermaßen hilfreich und verständlich war.
mfg.
Zuletzt bearbeitet: