Sida 1 av 1

Visa registrerade användare online på annan sida

Postat: 2007-05-27 22:27
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.

Postat: 2007-05-27 23:08
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

Postat: 2007-05-27 23:10
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.

Postat: 2007-05-28 15:46
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? :?

Postat: 2007-05-28 17:00
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

Postat: 2007-05-28 18:51
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.

Postat: 2007-05-28 20:06
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

Postat: 2007-05-28 21:49
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

Postat: 2007-05-28 22:32
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] . ', ';
}

Postat: 2007-05-28 22:47
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

Postat: 2007-08-22 23:26
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å?