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

IPB 2.0.3 + PHP.SPB.CHAT


Zlo

Вопрос

Прекрасный форум IPB и прекрасный чат который поддерживает функцию экспорта данных из mysql таблиц, чат без проблем объединяется phpBB любой версии я думаю не сложно его объединить и с IPB. Есть только одна проблемка чат берет данные из одной таблицы а данные в IPB о пользователе разбросаны по трем таблицам причем пароль в одной логин в другой мыло в третей , а в phpBB все в одной что облегчает объединениe.

Так вот есть тут кто разбирается в mysql и помог бы сделать так чтобы решить эту проблему я вижу честно говоря два способа ее решения но так как слаб в php сам это сделать не могу:

 

1. Создать еще одну таблицу в базе форума и назвать ее типа chat и пусть она выбирает с заносит себе в ячейки данных из определенных столбцов другой таблицы и на эту таблицу натравить чат тогда будет все ОК

 

2. Нужно внести изменения в php чтобы при регистрации нового юзера он вносил данные не только в таблицу ibf_members но и в таблицу chat названия столбцов сделать одинаковыми чтобы не путались и опять все должно быть ОК

 

Теперь нужно сделать все это на практитке

Ну или хотябы объесните где лежать файлы php когда при регистрации добавляются данные в таблицу.

Все думаю может ктонть разделит со мной мою проблему и поможет ее решить глядишь и другим пригодится

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

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

  • 0
Нужно внести изменения в php чтобы при регистрации нового юзера он вносил данные не только в таблицу ibf_members но и в таблицу chat названия столбцов сделать одинаковыми чтобы не путались и опять все должно быть ОК

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

 

Стоит попробовать переделать запрос в чате, чтобы данные брались сразу из двух таблиц джойном... Накладно конечно... Но проще имхо :D

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

  • 0

   // Данные для соединения
  $export_dbhost="localhost";  // хост mysql сервера
  $export_dbuser="root"; // имя юзера
  $export_dbpass=""; // пароль
  $export_dbbase="nuke2"; // имя базы
  $export_dbtable="nuke_users"; // имя таблицы юзеров в базе


  // Как импортировать данные из таблицы - описание структуры(полей) таблицы.
  // Слева напишите названия полей в mysql базе, справа - переменные этого 
  // чата. Список обязательных переменных; nick и pass (логин и пароль).
     // Важно: проверьте точное наличие перечисленных названий полей (левая 
  // колонка) с помощью менеджера mysql-базы.
  // По-умолчанию даны настройки для phpNuke.org:
  $export_field=array(
  // SQL таблица   Этот чат
     "uname"    => "nick"    , // логин
     "pass"     => "pass"    , // пароль
     "name"     => "name"    , // реальное имя и фамилия
     "url"      => "url"     , // URL
     "user_icq" => "icq"     , // ICQ
     "email"    => "mail"    , // скрытый email
     "femail"   => "pubmail" , // открытый email
     "user_from"=> "location", // город/страна
     "user_sig" => "about"   , // инфо о себе
  );

 

Вот так выглядит файл экспорта чата че нужно менять?? :D

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

  • 0
Конечно, просто LEFT JOIN по нужным таблицам...

 

А примерно как это должно выглядеть?

 

Я помоему нашел файл который именно вытаскивает данные из таблиц

 

// загрузка регистрационных данных из mysql-базы
function dbload_ext($nick,&$info) {
  $info=array();
  if ($GLOBALS['export_dbhost']=="" || $GLOBALS['export_dbuser']=="" ||
      $GLOBALS['export_dbbase']=="" || $GLOBALS['export_dbtable']=="" ||
      count($GLOBALS['export_field'])<2) 
  {
    err("errOT1360: Не настроены переменные \$export_****",__FILE__,__LINE__);
  }
  $fldnick=array_search("nick",$GLOBALS['export_field']);
  if ($fldnick==false) 
     err("В \$export_field не найдено поля, которое является ником/логином
          во внешней базе данных.",__FILE__,__LINE__);

  include_once("src/sql.php");

  $res=sql("SELECT * FROM `$GLOBALS[export_dbtable]` WHERE `$fldnick`='".addslashes($nick)."'",
     "Функция dbload_ext('$nick',*)");
  if (sqlrows($res)==0) return false;
  if (sqlrows($res)>1) 
     err("Очень подозрительно, что для ника <b>$nick</b> в mysql-таблице
          найдено более 1 строки с данными. Верноятно, нарушена целостность
          внешней базы логинов/паролей.",__FILE__,__LINE__);
  $r=sqlget($res);
  //pr($r);
  sqlfree($res);

  global $export_info11;
  if (!isset($r[$export_info11]))
     err("В таблице пользователей не найдена колонка '$export_info11'.
     Имя этой колонки задается в переменной \$export_info11 файла __dima.php.
     Вы должны добавить в таблицу новое поле(колонку) с любым именем,
     записать его имя в \$export_info11. Пример:
     <tt><nobr><b>ALTER TABLE `nuke_users` ADD `info11` BLOB NOT NULL;</b></nobr></tt>");

  if ($r[$export_info11]=="") $info[11]=array();
  else $info[11]=unserialize($r[$export_info11]);

  foreach ($GLOBALS['export_field'] as $k=>$v) {
     if (!(isset($r[$k]) || is_null($r[$k]))) 
        err("Параметр \$export_filerd настроен криво: поля <b>$k</b> 
             в MySQL таблице не обнаружено",__FILE__,__LINE__);
     if (is_null($r[$k]) || $r[$k]=="") continue;
     $info[$v]=$r[$k];
  }
  return true;
}

 

function myconnect() {
  global $sqlconnect;
  $sock=@mysql_connect($GLOBALS['export_dbhost'],$GLOBALS['export_dbuser'],$GLOBALS['export_dbpass']);
  if ($sock==false) 
     err("Извините, сервер временно не работает. Не могу соединиться с MySQL базой.
          Проверьте переменные \$export_dbhost, \$export_dbuser и \$export_dbpass");
  if (@mysql_select_db($GLOBALS['export_dbbase'],$sock)==false) 
     err("Не веpное имя MYSQL-базы данных, проверьте переменную \$export_dbbase");
}

 

Я попробовал править запрос в ячейке name таблицы chat такого вида

 

SELECT * FROM `ibf_members` LEFT JOIN `chat` ON ibf_members.name = chat.name

 

У меня все собирается в кучу но не запоминается

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

  • 0
А в какой таблице в  IPB пароли хранит??

Что-то в упор не могу понять..

 

Посмотри там есть три таблице начинаются на ibf_users_***** в одной из них точно.

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

  • 0

Есть три таблицы:

IPB_members_extra - там храниться личная инфа, аськи-шмаськи, аватар и т.д.

IPB_members - логин и различная служебная инфа.

IPB_members_converge вот есть подозрение, что пароль храниться именно в этой таблице в поле converge_pass_hash - но он не совпадает с md5 хэшем пароля..

Может, тогда подскажете, как этот хэш формируется??

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

  • 0
converge_pass_hash

Да, converge_pass_hash - это md5(md5(converge_pass_salt).md5(plain_text_password));

Причём converge_pass_salt - случайно генерируемая пятисимвольная строка.

 

СТАТЬЯ В ТЕМУ

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

  • 0

SphinX, большое спасибо! Это то, что мне надо было.

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

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

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

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

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

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

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

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

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

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

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

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

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