|
|
User gesamt
|
:
|
2452872
|
User online
|
:
|
5
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » PHP und MYSQL » User online Skript
Seite:
|
1
2
3
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
12.01.2007 17:39 Uhr
|
User online Skript
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Weiss nich ob du das in den Workshop getan hast oder nicht, habs jedenfalls nicht gesehen.
Ich bräuchte ein Skript, dass anzeigt, wieviele user online sind. so ähnlich wie du es bei deiner page oben hast. Weisst du wie das geht?
|
|
|
12.01.2007 18:17 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Weisst du wie das geht?
Bei allem, was du auf der Homepage findest, kannst du 100%ig davon ausgehen, dass ich weiß wie das geht 
Also, du erstellst dir zuerst eine MySQL Datenbank
Code:
Online
+---------------+--------------+------+-----+---------+---------------+
| NAME | TYP | NULL | KEY | DEFAULT | Extras |
+---------------+--------------+------+-----+---------+---------------+
| IP | VARCHAR(15) | X | | | |
| Datum | DATETIME | X | | | |
+---------------+--------------+------+-----+---------+---------------+
Entweder über PHPMyAdmin oder mit diesem Query
PHP:
<?php
$sql = 'CREATE TABLE `Online` ('
. ' `IP` VARCHAR(15) NULL, '
. ' `Datum` DATETIME NULL'
. ' )';
mysql_query($sql);
?>
Dann brauchst du noch folgendes Script, was auf jeder Seite aufgerufen werden muss
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);
}
// Alle IP, die nicht älter als 2 Minuten sind,
// werden aus der Datenbank ausgewählt..
$sql = "SELECT
COUNT(*)
FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 2 MINUTE) < Datum
";
$result = mysql_query($sql);
// $anzahl enthält nun alle User, die online sind
$anzahl = mysql_result($result, 0);
?>
Kann Syntaxfehler enthalten, ist 'auf die Schnelle' zusammengeschrieben bzw. aus meinen Skripten kopiert & kommentiert 
Grundsätzlich tut es folgendes:
Benutzer kommt auf die Seite.
Dieser Benutzer hat eine IP, gespeichert in $_SERVER['REMOTE_ADDR'].
Die Datenbank Online, die zuvor angelegt wurde, wird nach dieser IP dursucht.
Wird sie nicht gefunden, wird ein neuer Datensatz mit dieser IP und der aktuellen Uhrzeit (wichtig!) erstellt.
Wird ein Datensatz gefunden, wird dieser mit der aktuellen Uhrzeit aktualisiert.
Im letzten Schritt werden alle IPs gezählt, die in der Datenbank gespeichert sind und nicht älter als 2 Minuten sind. Die 2 Minuten sind von mir so festgelegt, daraus kannst du auch 5 oder 10 machen. Alle IPs, die während dieser Zeit (den letzten 2 Minuten) eingetragen/aktualisiert wurden, werden dann als 'online' angesehen.
Damit die Datenbank nicht unnötig überfüllt wird, werden außerdem alle IPs, die älter als einen Tag sind, gelöscht.
|
|
|
12.01.2007 18:18 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Zitat: so ähnlich wie du es bei deiner page oben hast. Weisst du wie das geht?
Wird er wohl wissen! 
Ich weis nun nicht wie das im Workshop aussieht, aber wenn du über die gespeicherte SessionID überprüfst das ein Benutzer angemeldet ist, dann kannst du einfach eine Abfrage machen welcher Benutzer eine gültige SessionID in der Datenbank hat.
Gruß Negura
|
|
|
12.01.2007 18:23 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
huch, jetzt von Negura es sagt.. ^^
Also, dass, was ich gerade beschrieben habe, bezieht auf die Anzeige, die du wirklich oben auf der Homepage findest, diese zählt alle Besucher (soltle ich vielleicht mal umbenennen ^^).
Wenn du nur schaun willst, welche angemeldeten User online sind, wie es auf der Forenhauptseite unten der Fall ist, kannst du das tatsächlich über die SessionID machen:
PHP:
<?php
$sql = "SELECT
COUNT(SessionID)
FROM
User
";
$result = mysql_query($sql);
$anzahl = mysql_result($result,0);
?>
Naja.. such dir aus, was du wolltest ^^
|
|
|
12.01.2007 18:27 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Nene habs schon so gemeint, dass es die anzahl anzeigt, der leute die grade auf der page sind. Habs jetzt mal ausprobiert, aber irgendwie wird nichts ausgegeben. Aber in die datenbank sind die daten eingetragen, also an dem liegts nicht
|
|
|
Seite:
|
1
2
3
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|