Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Мануальное добавление топиков.

Форум для авторов модов для phpBB 2.0.x.
mckey

Сообщение mckey »

:D Спасиб.
mckey

Сообщение mckey »

Код: Выделить всё

// Вот вобщем то, что я наваял. Как я говорил на форуме - я начинающий в пхп,
// и поэтому, этот код наверняка не идельный.
// Так же, тут не реализовано ещё дофига всего (нет записи айпишника, нет 
// добавления в поисковую систему форума и пр.), но лично мне оно и не надо было,
// а дописать это наверняка не сильно сложно.

function add_topic($header, $body, $user_id, $forum_id)

//$header - Заголовок поста; 
//$body - непосредственно сам пост;
//$user_id - id юзера из таблицы users;
//$forum_id - id раздела форума в который добвляется топик.

{
if (!($conn = db_connect())) echo "Неполадки с базой<br>";

// db_connect - моя внутреннаяя функция подключеня к базе. Её надо заменить на свою.

mt_srand((double) microtime() * 1000000);
$cur_time=time("U");
$sql  = mysql_query("insert into phpbb_posts (poster_id, forum_id, post_time, enable_html) values ('$user_id','$forum_id','$cur_time','1')");
if (!$sql) echo "Query Error 1!";

// Создаём пост.

$sql = mysql_query ("select post_id from phpbb_posts order by post_id desc");
if (!$sql) echo "Query Error 2!";
$post_id = mysql_fetch_row($sql);

// Получаем id созданого поста.

$uid = md5(mt_rand());
$uid = substr($uid, 0, 9);
$sql  = mysql_query("insert into phpbb_posts_text (post_id,  bbcode_uid, post_subject, post_text) values ('$post_id[0]', '$uid','$header', '$body')");
if (!$sql) echo "Query Error 3!";

// Создаём для поста текст.

$sql  = mysql_query("insert into phpbb_topics (forum_id, topic_title, topic_poster,  topic_time, topic_first_post_id, topic_last_post_id) values ('$forum_id','$header','$user_id', '$cur_time','$post_id[0]', '$post_id[0]')");
if (!$sql) echo "Query Error 4!";

// Создаём топик.

$sql = mysql_query ("select topic_id from phpbb_topics order by topic_id desc");
if (!$sql) echo "Query Error 5!";
$topic_id = mysql_fetch_row($sql);

// Получаем id созданного топика.

$sql  = mysql_query("update phpbb_posts set topic_id = '$topic_id[0]' where post_id = '$post_id[0]' ");
if (!$sql) echo "Query Error 6!";

// Обновляем таблицу постов.

$sql = mysql_query ("select forum_posts, forum_topics from phpbb_forums where forum_id = '$forum_id'");
if (!$sql) echo "Query Error 7!";
$forum_int = mysql_fetch_row($sql);

// Получаем кол-во постов и топиков...

$forum_posts=$forum_int[0]+1;
$forum_topics =$forum_int[1]+1;

// ...увеличиваем на 1...

$sql  = mysql_query("update phpbb_forums set forum_posts = '$forum_posts', forum_topics ='$forum_topics', forum_last_post_id = '$post_id[0]'  where forum_id = '$forum_id' ");
if (!$sql) echo "Query Error 8!";

// ...и записываем новые значения.

$sql = mysql_query ("select user_posts from phpbb_users where user_id = '$user_id'");
if (!$sql) echo "Query Error 9!";
$up = mysql_fetch_row($sql);

// Получаем кол-во сообщений пользователя который от имени которого создаётся пост...

$user_posts = $up[0]+1;
$sql  = mysql_query("update phpbb_users set user_posts = '$user_posts' where user_id = '$user_id' ");
if (!$sql) echo "Query Error 10!";

// ...увеличиваем на 1  и записываем новое значение.

return $topic_id[0];

// Функция возвращает id топика. ./../viewtopic.php?t=$topic_id[0]
}


Добавлено спустя 2 минуты 47 секунд:

Вот, у меня иногда, выскакиевает "Query Error 3!", чего не так? Может какие-то ограничения на что-нибудь есть?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Код: Выделить всё

$sql  = mysql_query("insert into phpbb_posts (poster_id, forum_id, post_time, enable_html) values ('$user_id','$forum_id','$cur_time','1')"); 
if (!$sql) echo "Query Error 1!";
Я обычно пишу так:

Код: Выделить всё

$sql = "insert into phpbb_posts (poster_id, forum_id, post_time, enable_html) values ('$user_id','$forum_id','$cur_time','1')";
mysql_query($sql) or die('Query Error: '.mysql_error());
Тогда и сразу ясно, где же ошибка.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
mckey

Сообщение mckey »

О.к. Щас попробую...
mckey

Сообщение mckey »

Код: Выделить всё

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /.../db_fns.php on line 171
Query Error3: Duplicate entry '0' for key 1
Чего-то не пойму, в чём ошибка?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Сначала происходит ошибка здесь:

Код: Выделить всё

$sql = mysql_query ("select post_id from phpbb_posts order by post_id desc"); 
if (!$sql) echo "Query Error 2!"; 
$post_id = mysql_fetch_row($sql);
Как результат получаем некорректный post_id для вставляемого сообщения, который по всей видимости дублирует уже существующий:
Duplicate entry '0' for key 1
Попробуй тогда применить такой код для получения еще более подробного сообщения об ошибке:

Код: Выделить всё

$sql = "insert into phpbb_posts (poster_id, forum_id, post_time, enable_html) values ('$user_id','$forum_id','$cur_time','1')";
mysql_query($sql) or die('Query Error: '.mysql_error().'<br>SQL: '. "$sql");
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
mckey

Сообщение mckey »

Угу. Попробывал. Оказалось что post_id = "

И что не так?

Добавлено спустя 1 минуту 51 секунду:

Код: Выделить всё

Query Error: Duplicate entry '0' for key 1
SQL: insert into phpbb_posts_text (post_id, bbcode_uid, post_subject, post_text) values ('', .....
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Почитай: mysql_insert_id
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
mckey

Сообщение mckey »

Почитал. Можно его так использовать?

Код: Выделить всё

$post_id = mysql_insert_id();
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Думаю да. Попытка - не пытка. :)
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
mckey

Сообщение mckey »

Да, в этом моменте всё заработало. Зато теперь глюки в этих местах:

Код: Выделить всё

$forum_int = mysql_fetch_row($sql);

// Получаем кол-во постов и топиков...

$forum_posts=$forum_int[0]+1;
$forum_topics =$forum_int[1]+1;

// ...увеличиваем на 1...

$sql  = mysql_query("update phpbb_forums set forum_posts = '$forum_posts', forum_topics ='$forum_topics', forum_last_post_id = '$post_id[0]'  where forum_id = '$forum_id' "); 
Ну и в следующем где испоьзуется mysql_fetch_row($sql)....

Может есть какой-нить sql запрос который на 1 увеличивает? :D
----------------------------

Не понимаю почему перестало работать mysql_fetch_row($sql); Раньше всё было о.к.... :evil:
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Код: Выделить всё

$sql  = mysql_query("update phpbb_forums set forum_posts = forum_posts + 1, forum_topics = forum_topics + 1, forum_last_post_id = '$post_id[0]'  where forum_id = '$forum_id' ");
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
mckey

Сообщение mckey »

Ага. Вроде пока работает....

Но я всё равно не пойму, почему это

Код: Выделить всё

mysql_fetch_row($sql);
не работает. Ведь раньше работало!
mckey

Сообщение mckey »

Вот решил сделать так, чтобы ещё и картинка в тело сообщения добавлялась.

Код: Выделить всё

[img:uid]http://www.bla-bla.com/name.jpg[/img]
Вот только почему-то при просмотре сообщения вместо картинки отображается только код. Если нажать кнопку "редктировать сообщение", а потом, ничего не редактируя, нажать "ок", то всё становиться нормально, и картинка показывается...

Почему картинка сразу не отображается нормально???
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Вообще-то закрывающий тег тоже должен иметь в своем составе bbcode uid, т.е.:

Код: Выделить всё

[img:uid]http://www.bla-bla.com/name.jpg[/img:uid]
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений

Вернуться в «Для авторов (phpBB 2.0.x)»