Visa registrerade användare online på annan sida

Frågor kring MODdar (modifikationer) för phpBB 2.0.x.

Moderatorer: Moderatorgrupp, Supportgrupp

Rehn
Medlem
Medlem
Inlägg: 18
Blev medlem: 2007-02-08 20:12
Svar: 0

Visa registrerade användare online på annan sida

Inlägg av Rehn »

Ah, länge sedan jag frågade något på det här forumet, men nu är det dags igen.

Jag vill att man på hemsidans indexsida ska kunna se vilka som är online på forumet, precis som man gör på forumindex.
Jag menar alltså på sidan index.php, inte forum/index.php, om ni fattar. Indexsidan har inte mycket med forumet att göra, förutom att den ser olika ut om man är inloggad eller inte.

Var plockar jag fram vem som är inloggad? Hittar jag det kanske i någon tabell i forumets databas?

Förklarar jag otydligt får ni berätta det.
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 10:38
Svar: 0

Inlägg av tumba25 »

Bl a det finns beskrivet väldigt bra på den här sidan
http://www.phpbbhacks.com/forums/dynami ... t4968.html

Han går iofs genom andra saker med, men det är ju bara att välja det man vill använda.

/J
Användarens profilbild
Kail
Administratör
Administratör
Inlägg: 2937
Blev medlem: 2003-06-03 14:53
Svar: 0

Inlägg av Kail »

Jag kan inte säga exakt hur du skall göra men informationen finns i tabellen phpbb_sessions, grejen är att hämta ut rader som är säg 300 sekunder (5 min) gamla.
Jakob Persson - Grundare av phpBB Sverige - IT-konsult - http://www.jakob-persson.com
The Complete phpBB Template Design Guide (phpBB 2.x): http://archive.jakob-persson.com/articl ... index.html
Rehn
Medlem
Medlem
Inlägg: 18
Blev medlem: 2007-02-08 20:12
Svar: 0

Inlägg av Rehn »

hm, jag fattar inte mycket av det där. Efter ett tappert försök där jag bara kopierat och klistrat in stöter jag på följande problem:

Kod: Markera allt

Fatal error: Call to a member function sql_query() on a non-object
...säger den och syftar på...

Kod: Markera allt

$result = $db->sql_query($sql); 
Vad är det nu jag inte har fattat? :?
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 10:38
Svar: 0

Inlägg av tumba25 »

har du

Kod: Markera allt

include($phpbb_root_path.'extension.inc');
include($phpbb_root_path.'common.php');
i ditt skript? Gärna i början om du ska använda flera saker från dom.

/J
Rehn
Medlem
Medlem
Inlägg: 18
Blev medlem: 2007-02-08 20:12
Svar: 0

Inlägg av Rehn »

Mhm, efter att ha testat med de raderna också ser jag inte längre något felmeddelande. Faktum är att jag inte ser något alls. Allt skrivs ut innan den passerar raden...

Kod: Markera allt

include($phpbb_root_path.'common.php');
...då den tvärtom verkar dö. Vad kan detta bero på då?

Jag tänkte att det kanske fanns något i common.php som sa åt den att dö, så jag tog mig en titt i filen.
Det fanns tre if-satser där den beordrades att dö, så jag testade att ta bort dessa från koden och se om det fungerade. Det gjorde ingen skillnad.

Så vad kan det vara för ondskefullt med common.php som gör att all aktivitet avstannar?
Jag har definerat $phpbb_root_path, bara så ni vet.
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 10:38
Svar: 0

Inlägg av tumba25 »

Om du inte definerat $phpbb_root_path så hade du fått samma felmeddelande som tidigare plus två påpekanden om att den inte var definerad.

Du har självklart inte missat

Kod: Markera allt

echo $onlinet;
?

Rekomenderar att du inte ändrar i common.php eller andra filer som hör till phpbb för att åstadkomma det här.

Här finns alla kodsnuttar samlade i en textfil.
http://www.phpbbhacks.com/tutorials/dynamicsites.txt

Edit: Vart visst fel url

Om du kopierar hela textfilen till en editor med radnummer så behöver du rad 1 - 184 och ett echo $onlinet; på lämpig plats.

/J
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 10:38
Svar: 0

Inlägg av tumba25 »

Annars är det ganska enkelt att göra den kollen utan all onödig kod.
Ändra $phpbb_root om det behövs. Sen innehåller

Kod: Markera allt

$hidden // Antal dolda
$guests // antal gäster
$regged // antal reg användare.
$reg_users[]  // är en array som innehåller namnen på användarna.

Kod: Markera allt

<?php
$phpbb_root = './forum/'; // Sökvägen till phpBB's root katalog.

include($phpbb_root . 'config.php');
$datan = mysql_connect($dbhost, $dbuser, $dbpasswd) or die('Error connecting to mysql');
mysql_select_db($dbname);
$reg_users = array();
$guests = '0';
$hidden = '0';
$regged = '0';
$now = time() - 500;
$query = "SELECT session_user_id, session_time
					FROM " . $table_prefix . "sessions
					WHERE session_time > " . $now;
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
	if($row['session_user_id'] > '0')
	{
		$query_2 = "SELECT user_id, username, user_allow_viewonline
								FROM " . $table_prefix . "users
								WHERE user_id = " . $row['session_user_id'];
		$result_2 = mysql_query($query_2);
		$row_2 = mysql_fetch_array($result_2, MYSQL_ASSOC);
		$regged++;
		if($row_2['user_allow_viewonline'] == 1)
		{
			array_push($reg_users, $row_2['username']);
		}
		else
		{
			$hidden++;
		}
		mysql_free_result($result_2);
	}
	else
	{
		$guests++;
	}
}
mysql_free_result($result);
mysql_close($datan);
?>
Sen kanske något liknande där du vill visa listan

Kod: Markera allt

<?php
echo 'Dolda: ' . $hidden . '<br />';
echo 'Gäster: ' . $guests . '<br />';
echo 'Registrerade: ' . $regged . '<br />';
for($i = 0; $i < $regged; $i++)
{
	echo 'Reggade: ' . $reg_users[$i] . ', ';
}
?>
Den är lite testad men har inte mycket fel kontroll.

/J
Senast redigerad av tumba25 den 2007-05-29 14:56, redigerad totalt 1 gång.
Användarens profilbild
Kail
Administratör
Administratör
Inlägg: 2937
Blev medlem: 2003-06-03 14:53
Svar: 0

Inlägg av Kail »

Kod: Markera allt

<?php
echo 'Dolda: ' . $hidden . '<br />';
echo 'Gäster: ' . $guests . '<br />';
echo 'Registrerade: ' . $regged . '<br />';
for($i = 0; $i < $regged; $i++)
{
   echo 'Reggade: ' . $reg_users[$i++] . ', ';
}
?> 
Det där är inte bra, den kommer lista varannan registrerad användare. Så här ska du göra:

Kod: Markera allt

for($i = 0; $i < $regged; $i++)
{
   echo 'Reggade: ' . $reg_users[$i] . ', ';
}
Jakob Persson - Grundare av phpBB Sverige - IT-konsult - http://www.jakob-persson.com
The Complete phpBB Template Design Guide (phpBB 2.x): http://archive.jakob-persson.com/articl ... index.html
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 10:38
Svar: 0

Inlägg av tumba25 »

Hoppsan, hade tänkt ha visningen på ett annat sätt först och glömde bort att radera ++ i $reg_users[$i++]. Bra att du såg det.

/J
fink
Ny medlem
Ny medlem
Inlägg: 9
Blev medlem: 2007-01-09 17:07
Svar: 0

Inlägg av fink »

Testade Tumba25s version, vilken var väldigt mycket enklare och mer designbar än den andra. Dock så får jag ett oresonligt stort antal "Gäster". När jag på forumets huvudsida har ca 7 gäster online, har jag enligt denna kod ett 30-tal gäster. Någon som vet vad detta beror på?
Skriv svar

Vilka är online

Användare som besöker denna kategori: 8 och 0 gäster