Anzeige des letzten Besuchers auf der Website
PHP und MySQL ermöglichen es, mit wenig Aufwand Datum und Uhrzeit des letzten Besuchers auf der Homepage anzeigen zu lassen.
2006-06-23 11:51:25 2006-06-23 11:51:25 Lukas Beck
Man das Script auch mit Textfiles realisieren, jedoch ist es empfehlenswert, mit MySQL zu arbeiten, da man hier weitaus weniger Quelltext benötigt.
Wir benötigen eine MySQL Tabelle namens lastuser mit den folgenden Spalten:
ID (INT, auto_incement), Zeit (datetime), IP (varchar)
Achtung: Es ist kein Fehler, wenn beim ersten Ausführen des Scriptes die Datumsausgabe 0 erscheint. Beim 2. Aufruf, beziehungsweise beim zweiten Besucher wird das Datum des letzten Users korrekt angezeigt.
Im Script bauen wir zunächst einen Connect zur Datenbank auf:
<?php
$db=mysql_connect("localhost","Benutzer","Passwort");
mysql_select_db("datenbankname", $db);
?>
Nun erzeugen wir 2 Ergebnisse aus der Tabelle, einmal die Zeit aus Zeile 1 (ID=1) und aus Zeile 2 (ID=2), zudem noch jeweils die gespeicherte IP Adresse. Das Datum wird als Deutsches Format ausgegeben. Zusätzlich benötigen wir jedoch auch die Zeit im herkömmlichen Format, da MySQL nicht in der Lage ist, ein bereits formatiertes Datum in das für MySQL lesbare datetime Format zu kopieren bzw. zu updaten.
<?php
$ausgabe_1=mysql_fetch_object(mysql_query ("select DATE_FORMAT(zeit,'%d.%m.%Y um %H:%i Uhr') as zeit_format_1, zeit, id, ip from lastuser where id='1'",$db));
$zeit_formatiert_1=$ausgabe_1->zeit_format_1;
$zeit_unformatiert_1=$ausgabe_1->zeit;
$ip_1=$ausgabe_1->ip;
$ausgabe_2=mysql_fetch_object($result2 = mysql_query ("select DATE_FORMAT(zeit,'%d.%m.%Y um %H:%i Uhr') as zeit_format_2, zeit, id, ip from lastuser where id='2'",$db));
$zeit_formatiert_2=$ausgabe_2->zeit_format_2;
$zeit_unformatiert_2=$ausgabe_2->zeit;
$ip_2=$ausgabe_2->ip;
?>
Das Konzept besteht nun zunächst darin, den User zu bestimmen, damit er nicht seine eigene Besuchszeit angezeigt bekommt, sondern tatsächlich die des letzten Besuchers. Die einfachste Methode dies zu tun, ist seine IP Adresse per $REMOTE_ADDR zu bestimmen. Diese wird zunächst in Zeile 2 (ID=2) gespeichert, wenn der User die Seite noch nicht reloaded hat, beziehungsweise nicht selbst der letzte Besucher war. Gleichzeitig werden die Daten aus Zeile 1 (ID=1), also die Daten des letzten Besuchers in Zeile 2 (ID=2) kopiert. Ausgegeben wird zuvor Zeile 1, also die Zeit des letzten Besuchers. Beim Update wird die UPDATE Funktion von MySQL verwendet. Hierbei ist unbedingt darauf zu achten, dass die unformatierte Datumsausgabe kopiert wird, welche in der Form 0000-00-00 00:00:00 vorhanden ist. Andernfalls kann die Spalte nicht aktualisiert werden.
<?php
if(!ip_2 == $REMOTE_ADDR)
{
echo $zeit_formatiert_2;
mysql_query ("UPDATE lastuser SET zeit='$zeit_unformatiert_2', ip='$ip_2' WHERE id='1'", $db);
mysql_query ("UPDATE lastuser SET zeit=now(''), ip='$REMOTE_ADDR' WHERE id='2'", $db);
}
?>
Lädt der aktive Besucher die Seite nun noch einmal, wird seine aktuelle IP Adresse mit der gespeicherten IP in Zeile 2 verglichen. War also der aktive Besucher selbst der letzte auf der Seite, so wird ihm nun Zeile 2 ausgegeben. In Zeile 1 sind schon seine Daten gespeichert, die dem nächsten Besucher ausgegeben werden.
<?php
elseif ($ip_2 == $REMOTE_ADDR)
{
echo $zeit_formatiert_1;
}
?>
Hier noch einmal das vollständige Script:
<?php
$db=mysql_connect("localhost","Benutzer","Passwort");
mysql_select_db("datenbankname", $db);
$ausgabe_1=mysql_fetch_object(mysql_query ("select DATE_FORMAT(zeit,'%d.%m.%Y um %H:%i') as zeit_format_1, zeit, id, ip from lastuser where id='1'",$db));
$zeit_formatiert_1=$ausgabe_1->zeit_format_1;
$zeit_unformatiert_1=$ausgabe_1->zeit;
$ip_1=$ausgabe_1->ip;
$ausgabe_2=mysql_fetch_object($result2 = mysql_query ("select DATE_FORMAT(zeit,'%d.%m.%Y um %H:%i') as zeit_format_2, zeit, id, ip from lastuser where id='2'",$db));
$zeit_formatiert_2=$ausgabe_2->zeit_format_2;
$zeit_unformatiert_2=$ausgabe_2->zeit;
$ip_2=$ausgabe_2->ip;
if (!$ip_2 == $REMOTE_ADDR)
{
echo $zeit_formatiert_2;
mysql_query ("UPDATE lastuser SET zeit='$zeit_unformatiert_2', ip='$ip_2' WHERE id='1'", $db);
mysql_query ("UPDATE lastuser SET zeit=now(''), ip='$REMOTE_ADDR' WHERE id='2'", $db);
}
elseif ($ip_2 == $REMOTE_ADDR)
{
echo $zeit_formatiert_1;
}
?>
Zwar ist die Gefahr relativ gering, dennoch besteht das Risiko, dass 2 User beispielsweise über einen Proxy Server auf der Seite sind, ihre IP ist also die des Proxy Servers. Somit kann dies die Anzeige der Userzeit verfälschen.
Lukas Beck
Erfahrungen
Hier Kannst Du einen Kommentar verfassen
Verwandte Beiträge
ASCII Datenbanken
ASCII Datenbanken sind eigentlich nur Textdateien, in denen man Daten speichert, die durch ein Trennzeichen voneinander getrennt sind. Dieses Tutorial zeigt wie es geht. Mit Übung und Lösung ...
Autor :
deep_space_nine@
Kategorie:
PHP-Tutorials
Zugriff auf die Facebook Graph API mit PHP
In diesem Beispiel zeigt Joey Rivera wie man auf Facebook mit Hilfe von PHP und der Facebook Graph API zugreifen kann. ...
Autor :
admin
Kategorie:
PHP-Tutorials
PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen
cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...
Autor :
TheMax
Kategorie:
PHP-Tutorials
Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!
Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...
Autor :
ndo@
Kategorie:
PHP-Tutorials
HTML5-Formulare mit jQuery.html5form
Mit dem von Matias Mancini machen Sie aus Ihrem Browser einen HTML5-Kompatiblen Bowser. Mit Einschränkungen aber ... ...
Autor :
admin
Kategorie:
Sonstige Tutorials
Das 'Nested Sets' Modell - Bäume mit SQL
Dieses Tutorial beschreibt die 'Nested Sets'-Technik, mit der man solche Bäume mit SQL performant konstruieren kann. ...
Autor :
gorski@
Kategorie:
mySQL-Tutorials

