I have setup my site, to use the login/user management system of phpBB to have a user area on my site, seperate from the forums.

What I need to figure out how to do is to get and update a table with the 'user_id' field in the session.

So I can do:

INSERT INTO table(user_id, newsID, date) VALUES(SESSION_user_id, ''" . $_GET['newsID'] . "', NOW())

Any help would be greatly appreciated.

    You mean just simply pulling an item from the session?

    $query = "INSERT INTO table(user_id, newsID, date) VALUES(" . $_SESSION['user_id'] . ", ''" . $_GET['newsID'] . "', NOW())";

    Note that numeric types in MySQL should NOT be enclosed in quotes, so if newsID is a numeric type you should remove the quotes around the value. Likewise for user_id.

      Thanks. It did not insert the user_id, I'm assuming I have to declare it somewhere. Here is the script phpBB says to use for the sessions:

      <?
      
      define('IN_PHPBB', true); 
      $phpbb_root_path = 'forums/'; 
      include($phpbb_root_path . 'extension.inc'); 
      include($phpbb_root_path . 'common.'.$phpEx); 
      
      // 
      // Start session management 
      // 
      $userdata = session_pagestart($user_ip, PAGE_INDEX); 
      init_userprefs($userdata); 
      // 
      // End session management 
      //
      if( $userdata['session_logged_in'] ) 
         { 
      ?>

      I'm assuming I have to declare it here, just not sure how/where.

        You would have to access the phpbb_users table to get the user_id

          Houdini wrote:

          You would have to access the phpbb_users table to get the user_id

          I do. I just don't know where to declare what I need.

            Well run two queries, one that gets the user_id from the phpbb_users table and make it a short variable like $uid then run you other query like this

            INSERT INTO table(user_id, newsID, date) VALUES('$uid', ''" . $_GET['newsID'] . "', NOW())
              Houdini wrote:

              Well run two queries, one that gets the user_id from the phpbb_users table and make it a short variable like $uid then run you other query like this

              INSERT INTO table(user_id, newsID, date) VALUES('$uid', ''" . $_GET['newsID'] . "', NOW())

              I understand that.

              My problem/issue is how do I declare the user_id variable? The login.php funtion of PHP already gets the user_id field from the query.

                Then show the login,php so maybe we can see how you are getting the user_id, then maybe you will get an response that makes sense, or that will work.

                  rather long, but here it goes:

                  <?php
                  /***************************************************************************
                   *                                login.php
                   *                            -------------------
                   *   begin                : Saturday, Feb 13, 2001
                   *   copyright            : (C) 2001 The phpBB Group
                   *   email                : support@phpbb.com
                   *
                   *   $Id: login.php,v 1.47.2.23 2006/01/13 20:10:02 grahamje Exp $
                   *
                   *
                   ***************************************************************************/
                  
                  /***************************************************************************
                   *
                   *   This program is free software; you can redistribute it and/or modify
                   *   it under the terms of the GNU General Public License as published by
                   *   the Free Software Foundation; either version 2 of the License, or
                   *   (at your option) any later version.
                   *
                   ***************************************************************************/
                  
                  //
                  // Allow people to reach login page if
                  // board is shut down
                  //
                  define("IN_LOGIN", true);
                  
                  define('IN_PHPBB', true);
                  $phpbb_root_path = 'forums/';
                  include($phpbb_root_path . 'extension.inc');
                  include($phpbb_root_path . 'common.'.$phpEx);
                  
                  //
                  // Set page ID for session management
                  //
                  $userdata = session_pagestart($user_ip, PAGE_LOGIN);
                  init_userprefs($userdata);
                  //
                  // End session management
                  //
                  
                  // session id check
                  if (!empty($HTTP_POST_VARS['sid']) || !empty($HTTP_GET_VARS['sid']))
                  {
                  	$sid = (!empty($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : $HTTP_GET_VARS['sid'];
                  }
                  else
                  {
                  	$sid = '';
                  }
                  
                  if( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) || isset($HTTP_POST_VARS['logout']) || isset($HTTP_GET_VARS['logout']) )
                  {
                  	if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && (!$userdata['session_logged_in'] || isset($HTTP_POST_VARS['admin'])) )
                  	{
                  		$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
                  		$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
                  
                  	$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
                  		FROM " . USERS_TABLE . "
                  		WHERE username = '" . str_replace("\\'", "''", $username) . "'";
                  	if ( !($result = $db->sql_query($sql)) )
                  	{
                  		message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql);
                  	}
                  
                  	if( $row = $db->sql_fetchrow($result) )
                  	{
                  		if( $row['user_level'] != ADMIN && $board_config['board_disable'] )
                  		{
                  			redirect(append_sid("../index.$phpEx", true));
                  		}
                  		else
                  		{
                  			// If the last login is more than x minutes ago, then reset the login tries/time
                  			if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $row['user_last_login_try'] < (time() - ($board_config['login_reset_time'] * 60)))
                  			{
                  				$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);
                  				$row['user_last_login_try'] = $row['user_login_tries'] = 0;
                  			}
                  
                  			// Check to see if user is allowed to login again... if his tries are exceeded
                  			if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $board_config['max_login_attempts'] && 
                  				$row['user_last_login_try'] >= (time() - ($board_config['login_reset_time'] * 60)) && $row['user_login_tries'] >= $board_config['max_login_attempts'] && $userdata['user_level'] != ADMIN)
                  			{
                  				message_die(GENERAL_MESSAGE, sprintf($lang['Login_attempts_exceeded'], $board_config['max_login_attempts'], $board_config['login_reset_time']));
                  			}
                  
                  			if( md5($password) == $row['user_password'] && $row['user_active'] )
                  			{
                  				$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;
                  
                  				$admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
                  				$session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin);
                  
                  				// Reset login tries
                  				$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);
                  
                  				if( $session_id )
                  				{
                  					$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "../index.$phpEx";
                  					redirect(append_sid($url, true));
                  				}
                  				else
                  				{
                  					message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__);
                  				}
                  			}
                  			// Only store a failed login attempt for an active user - inactive users can't login even with a correct password
                  			elseif( $row['user_active'] )
                  			{
                  				// Save login tries and last login
                  				if ($row['user_id'] != ANONYMOUS)
                  				{
                  					$sql = 'UPDATE ' . USERS_TABLE . '
                  						SET user_login_tries = user_login_tries + 1, user_last_login_try = ' . time() . '
                  						WHERE user_id = ' . $row['user_id'];
                  					$db->sql_query($sql);
                  				}
                  
                  				$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : '';
                  				$redirect = str_replace('?', '&', $redirect);
                  
                  				if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
                  				{
                  					message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
                  				}
                  
                  				$template->assign_vars(array(
                  					'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
                  				);
                  
                  				$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("../index.$phpEx") . '">', '</a>');
                  
                  				message_die(GENERAL_MESSAGE, $message);
                  			}
                  		}
                  	}
                  	else
                  	{
                  		$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "";
                  		$redirect = str_replace("?", "&", $redirect);
                  
                  		if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
                  		{
                  			message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
                  		}
                  
                  		$template->assign_vars(array(
                  			'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
                  		);
                  
                  		$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("../index.$phpEx") . '">', '</a>');
                  
                  		message_die(GENERAL_MESSAGE, $message);
                  	}
                  }
                  else if( ( isset($HTTP_GET_VARS['logout']) || isset($HTTP_POST_VARS['logout']) ) && $userdata['session_logged_in'] )
                  {
                  	// session id check
                  	if ($sid == '' || $sid != $userdata['session_id'])
                  	{
                  		message_die(GENERAL_ERROR, 'Invalid_session');
                  	}
                  
                  	if( $userdata['session_logged_in'] )
                  	{
                  		session_end($userdata['session_id'], $userdata['user_id']);
                  	}
                  
                  	if (!empty($HTTP_POST_VARS['redirect']) || !empty($HTTP_GET_VARS['redirect']))
                  	{
                  		$url = (!empty($HTTP_POST_VARS['redirect'])) ? htmlspecialchars($HTTP_POST_VARS['redirect']) : htmlspecialchars($HTTP_GET_VARS['redirect']);
                  		$url = str_replace('&amp;', '&', $url);
                  		redirect(append_sid($url, true));
                  	}
                  	else
                  	{
                  		redirect(append_sid("../index.$phpEx", true));
                  	}
                  }
                  else
                  {
                  	$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "../index.$phpEx";
                  	redirect(append_sid($url, true));
                  }
                  }
                  else
                  {
                  	//
                  	// Do a full login page dohickey if
                  	// user not already logged in
                  	//
                  	if( !$userdata['session_logged_in'] || (isset($HTTP_GET_VARS['admin']) && $userdata['session_logged_in'] && $userdata['user_level'] == ADMIN))
                  	{
                  		$page_title = $lang['Login'];
                  		include($phpbb_root_path . 'includes/page_header.'.$phpEx);
                  
                  	$template->set_filenames(array(
                  		'body' => 'login_body.tpl')
                  	);
                  
                  	$forward_page = '';
                  
                  	if( isset($HTTP_POST_VARS['redirect']) || isset($HTTP_GET_VARS['redirect']) )
                  	{
                  		$forward_to = $HTTP_SERVER_VARS['QUERY_STRING'];
                  
                  		if( preg_match("/^redirect=([a-z0-9\.#\/\?&=\+\-_]+)/si", $forward_to, $forward_matches) )
                  		{
                  			$forward_to = ( !empty($forward_matches[3]) ) ? $forward_matches[3] : $forward_matches[1];
                  			$forward_match = explode('&', $forward_to);
                  
                  			if(count($forward_match) > 1)
                  			{
                  				for($i = 1; $i < count($forward_match); $i++)
                  				{
                  					if( !ereg("sid=", $forward_match[$i]) )
                  					{
                  						if( $forward_page != '' )
                  						{
                  							$forward_page .= '&';
                  						}
                  						$forward_page .= $forward_match[$i];
                  					}
                  				}
                  				$forward_page = $forward_match[0] . '?' . $forward_page;
                  			}
                  			else
                  			{
                  				$forward_page = $forward_match[0];
                  			}
                  		}
                  	}
                  
                  	$username = ( $userdata['user_id'] != ANONYMOUS ) ? $userdata['username'] : '';
                  
                  	$s_hidden_fields = '<input type="hidden" name="redirect" value="' . $forward_page . '" />';
                  	$s_hidden_fields .= (isset($HTTP_GET_VARS['admin'])) ? '<input type="hidden" name="admin" value="1" />' : '';
                  
                  	make_jumpbox('viewforum.'.$phpEx);
                  	$template->assign_vars(array(
                  		'USERNAME' => $username,
                  
                  		'L_ENTER_PASSWORD' => (isset($HTTP_GET_VARS['admin'])) ? $lang['Admin_reauthenticate'] : $lang['Enter_password'],
                  		'L_SEND_PASSWORD' => $lang['Forgotten_password'],
                  
                  		'U_SEND_PASSWORD' => append_sid("profile.$phpEx?mode=sendpassword"),
                  
                  		'S_HIDDEN_FIELDS' => $s_hidden_fields)
                  	);
                  
                  	$template->pparse('body');
                  
                  	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
                  }
                  else
                  {
                  	redirect(append_sid("../index.$phpEx", true));
                  }
                  
                  }
                  
                  ?>

                    I'm not really familiar with the code here, but I believe after this line:

                                        $session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin); 
                    

                    you can add this?

                    $_SESSION['user_id'] = $row['user_id'];

                    Except, perhaps you should do something like this:

                    print_r($_SESSION);

                    to see what all is stored in the session by phpBB before you go adding stuff to it. Perhaps it's already in there?

                      bradgrafelman wrote:

                      I'm not really familiar with the code here, but I believe after this line:

                                          $session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin); 
                      

                      you can add this?

                      $_SESSION['user_id'] = $row['user_id'];

                      Except, perhaps you should do something like this:

                      print_r($_SESSION);

                      to see what all is stored in the session by phpBB before you go adding stuff to it. Perhaps it's already in there?

                      hm. i tried this, but again it didn't work. i tried to print the results and nothing showed up...

                      any other ideas.

                        2 months later

                        Hi,

                        With this at the top of your page you can set a $userid variable as so:

                        define('IN_PHPBB', true); 
                        $phpbb_root_path = 'forum/'; 
                        include($phpbb_root_path . 'extension.inc'); 
                        include($phpbb_root_path . 'common.'.$phpEx); 
                        $userdata = session_pagestart($user_ip, PAGE_INDEX); 
                        init_userprefs($userdata); 
                        $userid=$userdata['user_id'];
                        
                        THEN
                        
                        INSERT INTO blah SET userid='$userid'...
                        

                        That should do it.

                        ..you may need to change the phpbb_root_path depending on where you're located on the site. The above is set to being in the root directory with phpbb installed in a subdir called forum.

                          Write a Reply...