Wer ist online auf einer beliebigen PHP-Seite ausgeben?

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt um einen neuen Mod zu entwicklen, geht's in phpBB 2.0: Mods in Entwicklung weiter.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
larpo
Mitglied
Beiträge: 142
Registriert: 22.05.2003 16:10
Wohnort: Rheine

Wer ist online auf einer beliebigen PHP-Seite ausgeben?

Beitrag 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?
Benutzeravatar
larpo
Mitglied
Beiträge: 142
Registriert: 22.05.2003 16:10
Wohnort: Rheine

Beitrag von larpo »

Hat niemand ne Idee oder selbst mal was gebastelt um die Online-User anzuzeigen?
andreasbecker
Mitglied
Beiträge: 16
Registriert: 10.03.2004 17:33
Wohnort: Essen

Beitrag 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!
Benutzeravatar
larpo
Mitglied
Beiträge: 142
Registriert: 22.05.2003 16:10
Wohnort: Rheine

Beitrag 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
Antworten

Zurück zu „phpBB 2.0: Mod Suche/Anfragen“