Перейти к контенту
  • 0

1 база пользователей на 2 форума.


kirillrs

Вопрос

Есть 2 форума IPB 2.1.7 ( которые используют одну базу с разными префиксами). Как можно сделать что-бы форумы использовали одну базу пользователей (или при регистрации пользователя в 1ом форуме он автоматом регился во 2ом и наоборот).

Зараннее спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Можно найти в register.php запрос, который добавляет добавляет в базу данных нового пользователя, и дописать рядом еще один, который пропишет в таблице другого форума ту же самую информацию.

 

Сделать так, чтобы оба форума использовали одну таблицу пользователей теоретически можно, но на практике придется искать и редактировать все-все запросы, которые обращаются к таблице пользователей. А таких запросов, пожалуй, больше всего.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

проще засунуть все таблицы в одну базу, но с разными префиксами...и потом подставлять

но это придется много кода перерыть !

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Можно так например 1ый Форум с префиксом (_mmo) 2ой с (_ani). Надо просто 2ой форум заставить работать не с _ani_members, а с _mmo_members . Только как это реализовать :D
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Как это реализовать написал WildRAID.

 

форум заставить

форум не поддерживает такой фичи как "заставить"... :D

Это человека можно заставить, а не набор функций...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Можете попробовать примерно так...

 

Обязательно делайте бекапы всех файлов перед редактированием!!

 

Заходим в папку первого форума, ищем файл /ips_kernel/class_db_mysql.php.

 

Найти:

	function do_insert( $tbl, $arr, $shutdown=FALSE )
{
	//-----------------------------------------
	// Form query
	//-----------------------------------------

	$dba   = $this->compile_db_insert_string( $arr );
	$query = "INSERT INTO ".$this->obj['sql_tbl_prefix']."$tbl ({$dba['FIELD_NAMES']}) VALUES({$dba['FIELD_VALUES']})";

	//-----------------------------------------
	// Shut down query?
	//-----------------------------------------

	if ( $shutdown )
	{
		if ( ! $this->obj['use_shutdown'] )
		{
			$this->is_shutdown = 1;
			return $this->query( $query );
		}
		else
		{
			$this->obj['shutdown_queries'][] = $query;
			$this->cur_query = "";
		}
	}
	else
	{
		return $this->query( $query );
	}
}

 

Добавить после, заменив выделенное слово ПРЕФИКС на префикс второго форума:

	function do_insert_ex( $tbl, $arr, $shutdown=FALSE )
{
	//-----------------------------------------
	// Form query
	//-----------------------------------------

	$dba   = $this->compile_db_insert_string( $arr );
	$query = "INSERT INTO ПРЕФИКС$tbl ({$dba['FIELD_NAMES']}) VALUES({$dba['FIELD_VALUES']})";

	//-----------------------------------------
	// Shut down query?
	//-----------------------------------------

	if ( $shutdown )
	{
		if ( ! $this->obj['use_shutdown'] )
		{
			$this->is_shutdown = 1;
			return $this->query( $query );
		}
		else
		{
			$this->obj['shutdown_queries'][] = $query;
			$this->cur_query = "";
		}
	}
	else
	{
		return $this->query( $query );
	}
}

 

Обратите внимание на то, что после INSERT INTO перед префиксом должен остаться пробел, но между префиксом и $tbl пробела быть не должно!

 

Сохраняем.

 

Открываем /sources/action_public/register.php

 

Найти:

$this->ipsclass->DB->do_insert( 'members_converge', $converge );

 

Добавить после:

$this->ipsclass->DB->do_insert_ex( 'members_converge', $converge );

 

____________

 

Найти:

$this->ipsclass->DB->do_insert( 'members', $member );

 

Добавить после:

$this->ipsclass->DB->do_insert_ex( 'members', $member );

 

____________

 

Найти:

$this->ipsclass->DB->do_insert( 'member_extra', array( 'id' => $member_id, 'vdirs' => 'in:Входящие|sent:Отправленные' ) );

 

Добавить после:

$this->ipsclass->DB->do_insert_ex( 'member_extra', array( 'id' => $member_id, 'vdirs' => 'in:Входящие|sent:Отправленные' ) );

 

____________

 

Найти:

$this->ipsclass->DB->do_insert( 'pfields_content', $fields->out_fields );

 

Добавить после:

$this->ipsclass->DB->do_insert_ex( 'pfields_content', $fields->out_fields );

 

Те же самые действия проделайте на втором форуме, но ПРЕФИКС подставьте от первого форума.

 

Также обратите внимание на то, что валидация по e-mail должна быть отключена. И вообще не должно быть никаких сложностей с регистрацией.

 

Теперь, когда пользователь регистрируется на одном форуме, он автоматически оказывается зарегистрирован на другом.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Регистрацию можно сделать и проще, например с использованием внешней авторизации.

 

А такой код лучше не городить, ибо есть ещё другие таблицы с данными о пользователе. Смысл делать двойную регистрацию, но разные личные данные? Немного соображаловки... Лучше так(приблизительно):

Найти

function query($the_query, $bypass=0)
{

Добавить после:

$the_query = preg_replace("/\sibf2_(members|members_converge|members_extra|members_partial|pfields_content)([\s\.,]|$)/", " ibf1_\\1\\2", $the_query);

В скобках можно указать ещё таблицы, например чтобы объединить ПМ или скажем ещё что.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

А куда уж подробнее? Найти - вставить, только префиксы на свои изменить. Сделать так для того форума который не должен иметь своих этих таблиц.

 

А если вы про автаризацию, то это лучше в поиск, я этим не занимался.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

А куда уж подробнее? Найти - вставить, только префиксы на свои изменить. Сделать так для того форума который не должен иметь своих этих таблиц.

изменил, но толку 0. никаких реакций

Ссылка на комментарий
Поделиться на других сайтах

  • 0
А такой код лучше не городить, ибо есть ещё другие таблицы с данными о пользователе. Смысл делать двойную регистрацию, но разные личные данные?

 

Думал об этом. Но тогда возникнет масса проблем с группами, количеством сообщений и т.д. и т.д.

 

Ведь если таблица одна, то изменение id группы на одном форуме повлечет изменение и на другом. А там такой группы может не быть, или она может по-другому называться. Мне кажется, что полная синхронизация - непростая задача.

 

WildRAID спасибо, идея ясна только что-то нехочет работать..

 

Какие ошибки пишет?

 

Проверять лучше по списку пользователей или по попытке залогиниться. Последний зарегившийся пользователь не обязательно отражает последнего пользователя, добавленного в базу. А может и отражает ... не смотрел, не знаю. :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Ведь если таблица одна, то изменение id группы на одном форуме повлечет изменение и на другом. А там такой группы может не быть, или она может по-другому называться. Мне кажется, что полная синхронизация - непростая задача.

Тогда не стоит изголяться и можно сделать авторицацию по-другому, но стандартными средствами.

 

./sources/loginauth/ + Админцентр - НАСТРОЙКИ - Методы авторизации - Создать новый метод или изменить.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Угу, так лучше всего.

 

kirillrs, не забудьте сделать бекапы всего, чего только можно, и прочитать инструкцию перед тем, как крутить методы авторизации. Сам не сталкивался, но где-то у GiV'а читал, что из-за некорректных действий может так случиться, что в админку вы не зайдете.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Какие ошибки пишет?

 

Проверять лучше по списку пользователей или по попытке залогиниться. Последний зарегившийся пользователь не обязательно отражает последнего пользователя, добавленного в базу. А может и отражает ... не смотрел, не знаю. :D

 

1-ый Форум при регистрации пользователя выводит ошибку базы данных (дома буду отпишу точно в чём ошибка), что-то вроде не может записать в таюлицу данные (хотя префиксы правельно все прописаны).

2-ой форум регестрирация пользователя проходит норм, но в таблицу 1ого форума ничего не сохраняет.

В 2 ух форумах прописал всё правельно как Вы посоветовали, ну естественно ток префиксы поменял.

 

Тогда не стоит изголяться и можно сделать авторицацию по-другому, но стандартными средствами.

 

./sources/loginauth/ + Админцентр - НАСТРОЙКИ - Методы авторизации - Создать новый метод или изменить.

Тоесть в этом случае придётся только изменить файл ./sources/loginauth/auth.php ?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Забавно. :D

 

Исходя из этой постановки задачи:

 

Есть 2 форума IPB 2.1.7 ( которые используют одну базу с разными префиксами).

 

Если мы имеем два форума и на обоих проводим одинаковые изменения в коде, то и ошибка должна быть одна и та же.

 

Тоесть в этом случае придётся только изменить файл ./sources/loginauth/auth.php ?

 

Все сложнее. Намного. Поищите по форуму ... я где-то видел материалы по корректной организации других методов авторизации.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Подошёл бы вот этот метод когда 2 форума испльзуют одну таблицу пользователей :

$the_query = preg_replace("/\sibf2_(members|members_converge|members_extra|members_partial|pfields_content)([\s\.,]|$)/", " ibf1_\\1\\2", $the_query);

Но почему-то он не работает вобще как коментарии прям=)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Какие ошибки пишет?

 

Проверять лучше по списку пользователей или по попытке залогиниться. Последний зарегившийся пользователь не обязательно отражает последнего пользователя, добавленного в базу. А может и отражает ... не смотрел, не знаю. :D

Ошибка такая :

 

mySQL query error: INSERT INTO mmo_members (name,members_display_name,member_login_key,email,mgroup,posts,joined,ip_addr
ess,time_offset,view_sigs,email_pm,view_img,view_avs,restrict_post,view_pop,msg_
t
otal,new_msg,coppa_user,language,members_auto_dst,allow_admin_mails,hide_email,s
u
bs_pkg_chosen,id) VALUES('forum2','forum2','f5592c00a65c8f1d929fbf91d1108463','forum2@er.ru',3,0,1187101002,'86.110.12.12',0,1,1,1,1,0,1,0,0,0,'ru',1,1,1,0,22)

SQL error: Duplicate entry '22' for key 1
SQL error code: 
Date: 14.8.2007, 18:16

Ссылка на комментарий
Поделиться на других сайтах

  • 0

А, ну понятно ... пользователь №22 уже есть на том форуме.

 

Странно. Мне казалось, что там просто auto_increcement ... там даже есть функция, которая получает id только что добавленного юзера.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Регистрацию можно сделать и проще, например с использованием внешней авторизации.

 

А такой код лучше не городить, ибо есть ещё другие таблицы с данными о пользователе. Смысл делать двойную регистрацию, но разные личные данные? Немного соображаловки... Лучше так(приблизительно):

Найти

function query($the_query, $bypass=0)
{

Добавить после:

$the_query = preg_replace("/\sibf2_(members|members_converge|members_extra|members_partial|pfields_content)([\s\.,]|$)/", " ibf1_\\1\\2", $the_query);

В скобках можно указать ещё таблицы, например чтобы объединить ПМ или скажем ещё что.

 

Почему могут не работать эть изменения? Просто добавляю этот код а реакции 0. хотя префиксы нори прописаны

Ссылка на комментарий
Поделиться на других сайтах

  • 0
А такой код лучше не городить, ибо есть ещё другие таблицы с данными о пользователе. Смысл делать двойную регистрацию, но разные личные данные? Немного соображаловки... Лучше так(приблизительно):

Найти

function query($the_query, $bypass=0)
{

Добавить после:

$the_query = preg_replace("/\sibf2_(members|members_converge|members_extra|members_partial|pfields_content)([\s\.,]|$)/", " ibf1_\\1\\2", $the_query);

В скобках можно указать ещё таблицы, например чтобы объединить ПМ или скажем ещё что.

Кажется понял почему этот код не хочет работать, просто IPB в этом коде не хочет воспринимать таблицу с другими префиксами..

И ещё этот код по идее будет только сохранять в другую таблицу данные а загружать он всё равно будет же из своей.

А как можно нормально это реализовать чтобы зарегившийся пользователь на 1 форуме сразу автоматом регился на 2 форуме?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.