Требуется помощь для подключения PHP к Joomla - PullRequest
0 голосов
/ 17 июня 2011

Я создал собственный скрипт PHP, который загружает информацию, отправленную формой, в базу данных MySQL. Я хотел бы вставить идентификатор пользователя из Joomla пользователя, который представил данные MySQL.

Для этого я прочитал, что Joomla генерирует сессионный cookie, когда пользователь входит в joomla. Я надеюсь, что смогу найти подходящие файлы cookie, а затем скопировать идентификатор пользователя joomla и обновить значение в пользовательской базе данных mysql.

Вот то, что я имею до сих пор. Он не работает должным образом, но он должен дать вам представление о подходе к моей проблеме.

<?php
session_start();

//makes connection to databases
include_once "mysql-connect.php";       
if (isset($_SESSION['id'])) {
$id = $_SESSION['id'];   //I save the id in a session variable   
saveUserData($id);
// activeProfile is the name of the cookie used by Joomla/Jomsocial
} elseif (isset($_COOKIE['activeProfile'])) { 
$id = $_COOKIE['activeProfile'];
saveUserData($id);
} else {
$return_msg = "not_logged_in";
}

function saveUserData($id) {
// this is where I save the id in a session variable
$_SESSION['id'] = $id;   

$myConnJ = mysqli_connect("hostname","username","password","databasename") 
or die ("could not connect to joomla");
//query login info from Joomla
$sql = "SELECT * FROM jos_session WHERE id='".$id."'"; 
$result = mysqli_query($myConnJ, $sql) 
or die('ERROR: jos_user query failed for id = $id');
$row = mysqli_fetch_array($result);

echo $row;
// user data I need for charts is saved in session vars
$jom_id = $row['id'];           
$_SESSION['jom_id'] = $jom_id;

}
?>

Я пробовал разные эхо, чтобы отобразить данные, но ничего не работает. В идеале $ jom_id будет идентификатором пользователя из данных сеанса, которые я могу вставить в пользовательскую базу данных. Я думаю, что это требует некоторого развития метода проверки соответствия куки.

Еще одна вещь, я читал о похожих проблемах, и было предложено использовать встроенные команды Joomla для доступа к данным сеанса Joomla. Если у вас есть понимание того, как я могу использовать эти команды, пожалуйста, дайте мне знать. Вот несколько примеров кода:

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(dirname(__FILE__)));
define( 'DS', DIRECTORY_SEPARATOR );

require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');

$mainframe = JFactory::getApplication('site');

Как всегда, спасибо за любое направление, которое вы можете предоставить. Это очень ценится.

1 Ответ

0 голосов
/ 17 июня 2011

Может быть, я неправильно понимаю, что вы спрашиваете, поскольку поиск идентификатора пользователя довольно прост в Joomla. Чтобы получить информацию от текущего зарегистрированного пользователя, вы просто используете метод JFactory::getUser(). Не нужно беспокоиться о сессиях:

$user = &JFactory::getUser();

Теперь у вас есть объект, содержащий всю необходимую информацию:

  1. id - уникальный числовой идентификатор пользователя. Используйте это при ссылке на запись пользователя в других таблицах базы данных.
  2. name - Имя пользователя.
  3. username - имя пользователя / имя пользователя.
  4. email - адрес электронной почты пользователя.
  5. пароль - зашифрованная версия пароля пользователя
  6. password_clear - Устанавливать пароль пользователя только при его изменении. В противном случае остается пустым.
  7. usertype - Роль пользователя в Joomla!.
  8. gid - установить идентификатор группы пользователя, соответствующий типу пользователя.
  9. block - Установите в «1», когда в Joomla для пользователя установлено «заблокировано».
  10. registerDate - Устанавливает дату, когда пользователь был впервые зарегистрирован.
  11. lastvisitDate - Устанавливает дату последнего посещения сайта пользователем.
  12. guest - если пользователь не вошел в систему, эта переменная будет установлена ​​в «1». Остальные переменные будут не установлены или имеют значения по умолчанию.

Вы можете получить идентификатор как $id = $user->id;

Я взял вышеупомянутую информацию в Joomla! wiki: Доступ к текущему объекту пользователя
API-документация класса JUser: JUser .

...