Sida 1 av 1

[löst] Extrahera användarnamn med hjälp av PHP

Postat: 2005-07-21 20:06
av Rixn
Jag är nybörjare i PHP och jag klarar av att hantera enkla MySQL-satser som tex:

Kod: Markera allt

mysql_query("SELECT * FROM Xxxx ORDER BY Zzzz DESC LIMIT 0, 100")
där jag sedan lätt kan hämta uppgifter om användarnamn etc.

Nu vill jag hämta det inloggade användarnamnet från databasen i phpBB och skriva ut det på en sida, men det är lättare sagt än gjort. Det är inte lätt att se uppbyggnaden av phpBBs kod, men jag hoppas att jag ska kunna lära mig. Är det här något jag överhuvudtaget ska försöka mig på?

Vad är det minsta koden jag behöver?

Vilka delar måste vara med - connect to DB förstås och sessioner på något sätt men vad mer?

Postat: 2005-07-21 21:46
av PazZze
om du tittar i viewonline så hittar du all databaskod till det som gör den lilla rutan längst ner på första sidan med namnet "Vem är Online"

jag försökte hitta de delar som du behöver

denna del letar efter vilka som är online "just nu" (de senaste 5 min) av alla användare:

Kod: Markera allt

//
// Get user list
//
$sql = "SELECT u.user_id, u.username, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_time, s.session_page, s.session_ip
	FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
	WHERE u.user_id = s.session_user_id
		AND s.session_time >= ".( time() - 300 ) . "
	ORDER BY u.username ASC, s.session_ip ASC";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not obtain regd user/online information', '', __LINE__, __FILE__, $sql);
}
mer än så lyckades jag inte lista ut för tillfället...

men kan nog rekomendera dig att leta lite i följande filer (fast jag vet inte vilka som används riktigt :P):

/viewonline.php
/templates/*/index_body.tpl

ÄNDRING:

mer letande gav följande...

tror jag hittade något som jag tror skriver ut detta, men är dock mycket osäker på det... (kommer från phpbb_root/viewonline.php)

Kod: Markera allt

while ( $row = $db->sql_fetchrow($result) )
{
	$view_online = false;

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

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

			$style_color = '';
			if ( $row['user_level'] == ADMIN )
			{
				$username = '<b style="color:#' . $theme['fontcolor3'] . '">' . $username . '</b>';
			}
			else if ( $row['user_level'] == MOD )
			{
				$username = '<b style="color:#' . $theme['fontcolor2'] . '">' . $username . '</b>';
			}

			if ( !$row['user_allow_viewonline'] )
			{
				$view_online = ( $userdata['user_level'] == ADMIN ) ? true : false;
				$hidden_users++;

				$username = '<i>' . $username . '</i>';
			}
			else
			{
				$view_online = true;
			}

			$which_counter = 'reg_counter';
			$which_row = 'reg_user_row';
			$prev_user = $user_id;
		}
	}
	else
	{
		if ( $row['session_ip'] != $prev_ip )
		{
			$username = $lang['Guest'];
			$view_online = true;
	
			$which_counter = 'guest_counter';
			$which_row = 'guest_user_row';
		}
	}

	$prev_ip = $row['session_ip'];
hinner inte leta mera måste stänga av, det åskar här :cry:

Postat: 2005-07-22 13:49
av Holger
Jag använder mig av AJ Quicks tutorial för att visa användarnamnet eller Gäst på portalsidan:
http://www.gremminger.se/service

Postat: 2005-07-24 11:47
av Rixn
Typiskt. Jag hade stött på den sidan tidigare och lagt ett bokmärke för att jag skulle ha den nu, men glömde bort att det var nu jag skulle använda den sidan. Tack för påminnelsen.

Tyvärr så lyckas jag inte få till det ändå. Det strular till sig redan under Userdata Accessing. Jag får följande svar:
Hacking attempt
Fatal error: Call to undefined function: session_pagestart() in h:\home\users\FA03-06-02-06_68qd7vp9mxtkzrguju4x\mypage.com\public_html\forum\_media\header_define.php on line 9
där header_define innehåller det här (endast det, då jag inkluderar den i en annan fil sen):

Kod: Markera allt

<?php
  define('IN_PHPBB', true);

  $site_root_path = 'http://www.mypage.com/';
  $phpbb_root_path2 = '/forum/';
  $phpbb_root_path = $site_root_path . $phpbb_root_path2;
  include($phpbb_root_path . 'extension.inc');
  include($phpbb_root_path . 'common.php');

  $userdata = session_pagestart($user_ip, PAGE_INDEX);
  init_userprefs($userdata);
?>
Det är alltså session_pagestart som strular på något sätt. Vad är det jag missat? Är det något som AJ Quick förutsätter att man ska ha koll på - något självklart som jag missat? Vad kan gå fel egentligen? Jag har ju bara klippt & klistrat samt satt in mina "paths". De är väl korrekt skrivna - annars skulle jag väl inte få det svar jag får?

Hur gjorde du Holger?
Snälla hjälp mig om du kan!

/Rixn

Postat: 2005-07-24 20:25
av Kail
Du har uppenbarligen ändrat ngt du inte borde ändrat. Gör om från början och se om det hjälper.
Att göra det du vill är mkt enkelt men jag är inte hemma nu så jag kan inte ge dig ett svar med kodändringar/tillägg.

Postat: 2005-07-24 23:11
av Rixn
Fick ett tips på IntegraMOD-forumet som löste problemet (men som skapade ett annat).

Jag ändrade i sökvägen till "$phpbb_root_path = '../';" så här:

Kod: Markera allt

<?php
  define('IN_PHPBB', true);

  $phpbb_root_path = '../';
  include($phpbb_root_path . 'extension.inc');
  include($phpbb_root_path . 'common.php');

  $userdata = session_pagestart($user_ip, PAGE_INDEX);
  init_userprefs($userdata);
?>
Då fungerade det med att visa username som var meningen fast när jag loggade ut så fick jag ett "headers already sent"-problem:
Warning: Cannot modify header information - headers already sent by (output started at h:\home\users\FA03-06-02-06_68qd7vp9mxtkzrguju4x\dagame-web.com\public_html\forum\_media\Test01_HelloWorld.php:8 ) in h:\home\users\FA03-06-02-06_68qd7vp9mxtkzrguju4x\dagame-web.com\public_html\forum\includes\functions.php on line 184
Överst i Test01_HelloWorld.php har jag:

Kod: Markera allt

<?php include 'DGW_define.php'; ?>
och den filen innehåller koden enligt ovan.

Då körs väl sessionen först av allt eller störs det hela av att jag IFRAMEar Test01_HelloWorld.php in på en annan sida?

Kod: Markera allt

<IFRAME NAME="TestIframe04" SRC="http://www.mysite.com/forum/_media/Test01_HelloWorld.php" WIDTH="644" HEIGHT="480" TITLE="TestIframe04" BORDER="0" FRAMEBORDER="no">Upgrade your web browser!</IFRAME>