Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
topic вручную в phpBB2, зае...ся уже
 
phpBB2.
нужно вручную создавать тему (сред-ми PHP т.е. и sql запросами). Что-то подобное на seclabe. Когдапубликуется новость, автоматически создается тема в форуме "обсуждение новостей" и т.д.
Значит есть в phpBB 4 таблицы: _topics,  _posts_text, _posts, _forums. С которыми нужно манипулировать, чтоб создать тему в форуме. Код вылажу ниже. Проблема вот в чем: тема создается все хорошо все счастливы до тех пор, пока в этом форуме не удалишь одну тему - начинаются проблемы: тема создается, но когда в неё заходишь пишется что нет в теме сообщения. А всё почему? потому что значение столбеца  topic_first_post_id в таблице _topics не совпадает со значением столбца post_id в таблице post_id.

З.Ы. пока писал кажется понял в чем ошибка гыгы
 
Вот сопственно код, кот. создает тему в phpBB.
------------------------------
Код
//находим post_id, что бы было что воткнуть в _topics

$query = "select * from phpbb_posts";
  $result = mysql_query($query);
  $num_result = mysql_num_rows($result);  
for($i=0; $i <$num_result; $i++)
   { 
   $row = mysql_fetch_array($result);
   $last = $row['post_id'];
   }
   $post_id = $last;
   mysql_free_result($result);

$query = "INSERT INTO phpbb_topics VALUES('', '".$forum_id."', '".$post_subject."', '2', '".$timer."', '1', '1', '0', '0', '0', '".$post_id."', '".$post_id."', '0')";
mysql_query($query);


$query = "select * from phpbb_topics";
  $result = mysql_query($query);
  $num_result = mysql_num_rows($result);  
for($i=0; $i <$num_result; $i++)
   { 
   $row = mysql_fetch_array($result);
   $id_last = $row['topic_id'];
   }
   $topic_id = $id_last;
   mysql_free_result($result);


$query = "INSERT INTO phpbb_posts VALUES('', '".$topic_id."', '".$forum_id."', '2', '".$timer."', 'd5f23e2d', '', '1', '1', '1', '0', NULL, '0')";
 mysql_query($query);



  $query = "select * from phpbb_posts where forum_id = $forum_id";
  $result = mysql_query($query);
  $forum_posts = mysql_num_rows($result);  
   mysql_free_result($result);

   $query = "select * from phpbb_topics where forum_id = $forum_id";
  $result = mysql_query($query);
  $forum_topics = mysql_num_rows($result);  
   mysql_free_result($result);



  $query = "select * from phpbb_posts";
  $result = mysql_query($query);
  $num_result = mysql_num_rows($result);  
for($i=0; $i <$num_result; $i++)
   { 
   $row = mysql_fetch_array($result);
   $last = $row['post_id'];
   }
   $post_id = $last;
   mysql_free_result($result);



$query = "INSERT INTO phpbb_posts_text VALUES('".$post_id."', '79fd4d33fb', '".$post_subject."', '".$post_text."')";
mysql_query($query);



$query = "UPDATE phpbb_forums SET forum_posts = $forum_posts, forum_topics = $forum_topics, forum_last_post_id = $post_id where forum_id = $forum_id";
mysql_query($query);
mysql_close();

--------------------------
 
эта структура таблиц с которыми работаем их phpBB:
--------------
Код
CREATE TABLE [B]phpbb_posts[/B](
   post_id mediumint(8) unsigned NOT NULL auto_increment,
   topic_id mediumint(8) unsigned NOT NULL,
   forum_id smallint(5) unsigned NOT NULL,
   poster_id mediumint(8) NOT NULL,
   post_time int(11) NOT NULL,
   poster_ip varchar(8) NOT NULL,
   post_username varchar(25),
   enable_bbcode tinyint(1) DEFAULT '1' NOT NULL,
   enable_html tinyint(1) NOT NULL,
   enable_smilies tinyint(1) DEFAULT '1' NOT NULL,
   enable_sig tinyint(1) DEFAULT '1' NOT NULL,
   post_edit_time int(11),
   post_edit_count smallint(5) unsigned NOT NULL, 
   PRIMARY KEY (post_id), 
   KEY forum_id (forum_id), 
   KEY topic_id (topic_id), 
   KEY poster_id (poster_id), 
   KEY post_time (post_time)
);

CREATE TABLE [B]phpbb_posts_text[/B](
   post_id mediumint(8) unsigned NOT NULL,
   bbcode_uid varchar(10) NOT NULL,
   post_subject varchar(60),
   post_text text, 
   PRIMARY KEY (post_id)
);

CREATE TABLE [B]phpbb_topics[/B](
   topic_id mediumint(8) unsigned NOT NULL auto_increment,
   forum_id smallint(8) unsigned NOT NULL,
   topic_title char(60) NOT NULL,
   topic_poster mediumint(8) NOT NULL,
   topic_time int(11) NOT NULL,
   topic_views mediumint(8) unsigned NOT NULL,
   topic_replies mediumint(8) unsigned NOT NULL,
   topic_status tinyint(3) NOT NULL,
   topic_vote tinyint(1) NOT NULL,
   topic_type tinyint(3) NOT NULL,
   topic_first_post_id mediumint(8) unsigned NOT NULL,
   topic_last_post_id mediumint(8) unsigned NOT NULL,
   topic_moved_id mediumint(8) unsigned NOT NULL, 
   PRIMARY KEY (topic_id), 
   KEY forum_id (forum_id), 
   KEY topic_moved_id (topic_moved_id), 
   KEY topic_status (topic_status), 
   KEY topic_type (topic_type)
);
 
phpBB очень популярен - так что может кто делал подобные вещи с ним. Прошу код в студию. Заранее благодарю.
 
пока постил, понял свои ошибки  :D
может кому пригодится... скрипт создания топика в phpBB2 вручную (не через интерфейс форума, может помоч при разработки  CMS):
Код
   $query = "select * from phpbb_posts";
  $result = mysql_query($query);
  $num_result = mysql_num_rows($result);  
for($i=0; $i <$num_result; $i++)
   { 
   $row = mysql_fetch_array($result);
   $last[] = $row['post_id'];
   }
       $post_id = 0;
   for($u=0; $u < count($last); $u++)
     {
      if($post_id < $last[$u])
        { $post_id = $last[$u]; }
     }
     $post_id = $post_id+1;
   mysql_free_result($result);

$query = "INSERT INTO phpbb_topics VALUES('', '".$forum_id."', '".$post_subject."', '2', '".$timer."', '1', '1', '0', '0', '0', '".$post_id."', '".$post_id."', '0')";
mysql_query($query);


$query = "select * from phpbb_topics";
  $result = mysql_query($query);
  $num_result = mysql_num_rows($result);  
for($i=0; $i <$num_result; $i++)
   { 
   $row = mysql_fetch_array($result);
   $id_last[] = $row['topic_id'];
   }
     $topic_id = 0;
   for($u=0; $u < count($id_last); $u++)
     {
      if($topic_id < $id_last[$u])
        { $topic_id = $id_last[$u]; }
     }
  
   mysql_free_result($result);

$query = "INSERT INTO phpbb_posts VALUES('', '".$topic_id."', '".$forum_id."', '2', '".$timer."', 'd5f23e2d', '', '1', '1', '1', '0', NULL, '0')";
 mysql_query($query);


 $query = "select * from phpbb_posts where forum_id = $forum_id";
  $result = mysql_query($query);
  $forum_posts = mysql_num_rows($result);  
   mysql_free_result($result);

   $query = "select * from phpbb_topics where forum_id = $forum_id";
  $result = mysql_query($query);
  $forum_topics = mysql_num_rows($result);  
   mysql_free_result($result);

$query = "INSERT INTO phpbb_posts_text VALUES('".$post_id."', '79fd4d33fb', '".$post_subject."', '".$post_text."')";
mysql_query($query);

$query = "UPDATE phpbb_forums SET forum_posts = $forum_posts, forum_topics = $forum_topics, forum_last_post_id = $post_id where forum_id = $forum_id";
mysql_query($query);

$query = "UPDATE phpbb_topics SET topic_first_post_id = $post_id, topic_last_post_id = $topic_id where topic_id = $topic_id";
mysql_query($query);

mysql_close();


PS. откуда берутся переменные и для чего они нужны легко понять из структуры таблиц
 
тему можно закрывать. Последний код - рабочий.
 
:D
 
А куда этот скрипт вставлять?
 
В голову гробокопателя. Откопавшего тему 2005 года.  :sensored:
 
найди ка посвежей
 
Мне "посвежее" не надо. И в отличие от Вас - я представляю - куда и что надо прикручивать. Дан лишь фрагмент кода. Те, для вого он действительно нужен - разберутся, что там и куда прикручивать. Если лично Вы не знаете - куда, значит Вам это не нужно. Либо уровень Ваших знаний не позволяет понять - для чего это нужно. В таком случае надо учиться.
 
все разобрался
закрывай тему
Страницы: 1
Читают тему