Photoshop
Cinema 4d
HTML / CSS
JavaScript
PHP
Flash
Fotografie
Terragen
Webserver
Informatik
Sonstige
Counter mit PHP und MySQL (Php Tutorial)
Tutorial erstellt von BapKe, letzte Änderung am 04.07.2007Einleitung:
Einen Counter findet man heute auf fast jeder Website.
Kein Wunder, findet man im Internet heute schon viele Fertig-Codes, die man dann nur noch in seine Page einfügen muss und schon hat man seine eigene Zählmaschine.
Oftmals (so ist zumindest meine Erfahrung) entsprechen diese Counter aber nicht den eigenen Ansprüchen. Deshalb will ich euch in diesem Tutorial erklären, wie ihr euch euren eigenen Counter programmieren könnt.
Voraussetzungen:
1- Grundkenntnisse in HTML, PHP, MySQL
2- Zugriff auf eine MySQL-Datenbank
Schritt 1:
Wir erstellen zuerst 2 Tabellen in unserer MySQL-Datenbank.
Die Erste nennen wir "counter" und geben ihr folgende Eintellungen (3 Spalten):
Spalte 1 - id, int(11), auto_increment, Primärschlüssel
Spalte 2 - date, varchar(10)
Spalte 3 - hits, varchar(4)
Die Zweite nennen wir "reload" und geben ihr folgende Eintellungen (3 Spalten):
Spalte 1 - id, int(11), auto_increment, Primärschlüssel
Spalte 2 - date, varchar(10)
Spalte 3 - ips, varchar(15)
Schritt 2:
Wir fügen folgenden Code am Anfang der Seite ein, auf der wir die Besucher zählen wollen. Im Normalfall sollte dies die index.php sein.
Code:
$ipabfrage = $_SERVER['REMOTE_ADDR'];
$datumabfrage = date("d.m.Y");
$result = mysql_query("SELECT date FROM reload") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($datumabfrage != $row['date'])
{
mysql_query("DELETE FROM reload");
mysql_query("INSERT INTO reload(date, ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("INSERT INTO counter(date , hits) VALUES('".$datumabfrage."',1)");
}
else {
$result = mysql_query('SELECT ips FROM reload') OR die(mysql_error());
$a = 0;
while ($row = mysql_fetch_assoc($result))
{
if ($row['ips'] == $ipabfrage)
{
$a = 1;
}
}
if ($a == 0)
{
mysql_query("INSERT INTO reload(date , ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("UPDATE counter SET hits = hits + 1 WHERE date = '".$datumabfrage."'");
}
}
$datumabfrage = date("d.m.Y");
$result = mysql_query("SELECT date FROM reload") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($datumabfrage != $row['date'])
{
mysql_query("DELETE FROM reload");
mysql_query("INSERT INTO reload(date, ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("INSERT INTO counter(date , hits) VALUES('".$datumabfrage."',1)");
}
else {
$result = mysql_query('SELECT ips FROM reload') OR die(mysql_error());
$a = 0;
while ($row = mysql_fetch_assoc($result))
{
if ($row['ips'] == $ipabfrage)
{
$a = 1;
}
}
if ($a == 0)
{
mysql_query("INSERT INTO reload(date , ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("UPDATE counter SET hits = hits + 1 WHERE date = '".$datumabfrage."'");
}
}
So, und was bedeutet dass nun?
Das wird jetzt im Einzelnen erklärt:
Code:
$ipabfrage = $_SERVER['REMOTE_ADDR'];
$datumabfrage = date("d.m.Y");
$datumabfrage = date("d.m.Y");
In diesen zwei Zeilen wird die IP des Besuchers, sowie das aktuelle Datum in zwei Variablen gespeichert, da wir diese in den nächsten Zeilen noch öfter brauchen werden ...
Code:
$result = mysql_query("SELECT date FROM reload") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$row = mysql_fetch_assoc($result);
Wir fragen nach dem aktuellen Datum in unser Tabelle "reload".
Code:
if ($datumabfrage != $row['date'])
Jetzt testen wir, ob das aktuelle Datum im "reload" mit dem aktuellen Datum übereinstimmt.
Code:
{
mysql_query("DELETE FROM reload");
mysql_query("INSERT INTO reload(date, ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("INSERT INTO counter(date , hits) VALUES('".$datumabfrage."',1)");
}
mysql_query("DELETE FROM reload");
mysql_query("INSERT INTO reload(date, ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("INSERT INTO counter(date , hits) VALUES('".$datumabfrage."',1)");
}
Ist dies nicht der Fall (die if-Abfrage war !=) haben wir einen neuen Tag. Dies bedeutet, dass die komplette Tabelle "reload" geleert wird. Außerdem wird ein neuer Eintrag hinzugefügt mit dem aktuellen Datum, und der IP des Besucher.
Was bedeutet das jetzt im Klartext?
Im "reload" sind alle IPs gespeichert die für einen bestimmten Tag (Spalte "date" im "reload") gesperrt sind. wenn das aktuelle Datum jetzt aber nicht mit diesem Datum übereinstimmt ist wohl ein neuer Tag angebrochen. Alle Einträge werden geleert, das heißt alle IPs sind wieder frei (denn die IP war ja für den letzten Tag gesperrt).
Die aktuelle User-IP wird mit dem aktuellen Datum in die Tabelle eingefügt und somit für diesen Tag gesperrt.
WICHTIG:
Code:
mysql_query("INSERT INTO counter(date , hits) VALUES('".$datumabfrage."',1)");
Gleichzeitig wird ein neuer Eintrag in die Tabelle "counter" eingefügt, mit dem neuen Datum und Hits = 1 gesetzt. Hits ist der eigentliche Zähler und da wir einen neuen Tag haben, ist der Besucher der Erste, deshalb Hits = 1.
Code:
else {
$result = mysql_query('SELECT ips FROM reload') OR die(mysql_error());
$a = 0;
while ($row = mysql_fetch_assoc($result))
{
if ($row['ips'] == $ipabfrage)
{
$a = 1;
}
}
if ($a == 0)
{
mysql_query("INSERT INTO reload(date , ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("UPDATE counter SET hits = hits + 1 WHERE date = '".$datumabfrage."'");
}
}
$result = mysql_query('SELECT ips FROM reload') OR die(mysql_error());
$a = 0;
while ($row = mysql_fetch_assoc($result))
{
if ($row['ips'] == $ipabfrage)
{
$a = 1;
}
}
if ($a == 0)
{
mysql_query("INSERT INTO reload(date , ips) VALUES('".$datumabfrage."','".$ipabfrage."')");
mysql_query("UPDATE counter SET hits = hits + 1 WHERE date = '".$datumabfrage."'");
}
}
Wenn das Datum allerdings mit dem Datum im "reload" übereinstimmt, wird getestet, ob die User-IP schon im "reload" vorhanden ist, sprich für diesen Tag gesperrt ist.
Trifft dies zu passiert nichts.
Trifft dies allerdings nicht zu und die IP wurde heute noch nicht gezählt, wird sie in die Tabelle "reload" mit aktuellem Datum eingefügt (also für diesen Tag gesperrt), gleichzeitig erhöhen wir die Hits in "counter" um 1.
Das war es schon mit dem eigentlichen Counter als Zählmaschine. Ich hoffe, dass bis hierhin alles verständlich war. Falls nicht, dann lest jetzt bitte nicht einfach weiter, sondern geht noch einmal die Schritte 1 und 2 durch, denn es ist leichter zu verstehen als es aussieht! Und dass ihr versteht, was ich hier schreibe ist ja das eigentliche Ziel!
Schritt 3:
Die Besucher sind jetzt in der Datenbank (in der Tabelle "counter") gespeichert.
Jetzt müssen wir die Zahlen nur noch irgendwo auf der Page ausgeben.
Code:
$result = mysql_query("SELECT hits FROM counter WHERE date = '".$datumabfrage."'") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$hits_today = $row['hits'];
echo $hits_today;
$row = mysql_fetch_assoc($result);
$hits_today = $row['hits'];
echo $hits_today;
Gibt die Besucherzahl des aktuellen Tages an.
Code:
$datumabfrage = date("d.m.Y");
$tstamp = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$datumabfrage_gestern = date("d.m.Y", $tstamp);
$result = mysql_query("SELECT hits FROM counter WHERE date = '".$datumabfrage_gestern."'") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$hits_yesterday = $row['hits'];
echo $hits_yesterday;
$tstamp = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$datumabfrage_gestern = date("d.m.Y", $tstamp);
$result = mysql_query("SELECT hits FROM counter WHERE date = '".$datumabfrage_gestern."'") OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$hits_yesterday = $row['hits'];
echo $hits_yesterday;
Gibt die Besucherzahl des gestrigen Tages an.
Code:
$result = mysql_query('SELECT hits FROM counter') OR die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
@$hits_total += $row['hits'];
}
echo $hits_total;
while($row = mysql_fetch_assoc($result))
{
@$hits_total += $row['hits'];
}
echo $hits_total;
Gibt die Gesamtbesucherzahl an.
Dies sind wohl die wichtigsten Ausgaben, die wir von einem Counter erwarten. Natürlich kann man dies noch auf den Durchschnitt, den Besucherrekord o.Ä. ausweiten.
Schluss:
Ich hoffe, dass alle User dem Tutorial folgen konnten und dass ich Einigen damit weiterhelfen konnte.
Wenn ich irgendwelche Fehler gemacht haben sollte - seien es Rechtschreibfehler oder Fehler im Script - bitte melden!
Danke.
MfG BapKe
>> Allgemeine Fragen oder Probleme mit dem Tutorial? Hier gehts zum Forum!