Seite 1 von 1

Wer ist online auf einer beliebigen PHP-Seite ausgeben?

Verfasst: 16.03.2004 22:45
von larpo
Hallo!

Ich wollte gerne eine Anzeige haben, wer derzeit gerade alles online ist und zwar will ich diese Anzeige auch ausserhalb von dem phpBB haben.

Dazu habe ich folgendes Scipt gebastelt:

Code: Alles auswählen

//Get Who-is-online-Data:
$resultID = mysql_query("SELECT COUNT(s.session_user_id) FROM phpbb_users u, phpbb_sessions s WHERE s.session_user_id != -1 AND u.user_id = s.session_user_id AND s.session_time >= " . (time()-300) );
$row = mysql_fetch_row($resultID);
$howManyRegUser = $row[0];
//End count all registrated users
$resultID = mysql_query("SELECT COUNT(session_user_id) FROM phpbb_sessions WHERE session_user_id = -1 AND session_time >= " . (time()-300) );
$row = mysql_fetch_row($resultID);
$howManyGuests = $row[0];
//End count guests
$resultID = mysql_query("SELECT u.username FROM phpbb_users u, phpbb_sessions s WHERE s.session_user_id != -1 AND u.user_id = s.session_user_id AND s.session_time >= " . (time()-300) );
while ($row = mysql_fetch_array($resultID))
{
  $userlist = $userlist . ', ' . $row['username'];
}
$userlist = substr($userlist,2); //cut first , away
//End users who are online
Das war so dass, was ich mir so überlegt hatte, nachdem ich mir die Datenbank-Struktur von phpBB angeschaut habe.

Jetzt habe ich jedoch manchmal das Problem, dass einige Online-Benutzer mehrfach angezeigt werden. Wo liegt da mein Fehler?

Verfasst: 17.03.2004 15:14
von larpo
Hat niemand ne Idee oder selbst mal was gebastelt um die Online-User anzuzeigen?

Verfasst: 17.03.2004 17:30
von andreasbecker
Guck dir mal die viewonline.php aus dem root-Ordner an: Dort werden die User zunächst nach Username, Session-IP sortiert. Nun stehen sämtliche doppelten Einträge logischerweise untereinander.

Beim durchlaufen der Ergebnisse der SQL-Abfrage wird nun zunächst geprüft, ob sich die User-ID nicht bereits in einer Hilfsvariable (Startwert 0) befindet. Wenn nein, steht der User noch nicht in der Liste und wird hineingeschrieben und die Hilfsvariable auf die aktuelle ID gesetzt. Wenn ja, wird das alles übersprungen und mit der nächsten ID weitergemacht!

Ansonsten ist dein Skript IMHO fehlerfrei und sollte funktionieren!

Verfasst: 17.03.2004 20:15
von larpo
Danke für den Tipp. Ich habe nun daraus folgendes Script gebastelt, allerding gibt es mir keine Werte (Anzahl registrierter Benutzer ($howManyRegUsers), Gäste ($howManyGuests), Benutzernamen ($userlist)) wieder. Hat jemand eine Ahnung, wo der Fehler liegt?

Code: Alles auswählen

$howManyGuests = 0;
$howManyRegUsers = 0;
$hidden_users = 0;

$prev_user = 0;
$prev_ip = '';
// Get user list
//
$result = mysql_query("SELECT u.user_id, u.username, u.user_allow_viewonline, s.session_logged_in, s.session_time, s.session_ip
	FROM phpbb_users u, phpbb_sessions s
	WHERE u.user_id = s.session_user_id AND s.session_time >= ".( time() - 300 )." ORDER BY u.username ASC, s.session_ip ASC");

while ( $row = mysql_fetch_row($result) )
{
	if ( $row['session_logged_in'] )
	{
		$user_id = $row['user_id'];

		if ( $user_id != $prev_user )
		{
			$username = $row['username'];

   			if ( !$row['user_allow_viewonline'] )
			{
				$hidden_users++;
			}
			else
			{
				$howManyRegUsers++;
                $userlist = $userlist . ', ' . $username;
			}
			$prev_user = $user_id;
		}
	}
	else
	{
		if ( $row['session_ip'] != $prev_ip )
		{
			$howManyGuests++;
		}
	}
}
$userlist = substr($userlist,2); //cut first , away