Перейти к контенту
  • 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 минут проверяет наличие новых юзверей и при необходимости ложит новые данные в таблицу для чата.

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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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

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