Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2008-08-24 22:34:01

vchesnokov
Гость

Программное добавление тем (forum_topics) и постов (forum_posts)

Приветствую.
Исходная задача такова. Форум развёрнут в одной MySql базе с "головной" базой. В базе есть таблица товаров. Я завёл отдельную категорию на форуме, и хочу на каждую единицу списка товаров добавить свою тему и пост вида "Здесь обсуждаем товар NN".

Почему-то не идёт добавление записей в таблицы forum_posts и forum_topics из PHP кода. Крутил по-разному, текущий вариант что-то вроде (показано ниже), так не работает же INSERT, записей нет sad

<?php
    $s_conn = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
    mysql_select_db('myDatabase', $s_conn) or die (mysql_error());

    $sql_text = "SELECT * FROM goods WHERE forum_url is NULL order by id";
    $res = mysql_query($sql_text, $s_conn);
    $goods_count = mysql_num_rows($res);
    
    if ($goods_count > 0)
    {
        echo "<h2>Выбрано товаров: $goods_count</h2>\n";
        $N = 0;
        $posted = 1219596114;
        
        while ($r = mysql_fetch_array($res))
        {
            $g_id = $r["id"];
            $g_code = $r["code"];
            $g_name = $r["name"];
            
            $N = $N + 1;
            $posted = $posted + 1;
            echo "<p>Товар N $N: $g_id $g_code $g_name</p>\n";

            $mess = "Обсуждение товара " . $g_code . " " . $g_name;

            // find forum_topics last ID
            $s_conn_2 = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
            mysql_select_db('myDatabase', $s_conn_2) or die (mysql_error());
              $sql_insert = "SELECT max(id) as id FROM forum_topics"; // where forum_id = 22";
            $res2 = mysql_query($sql_insert, $s_conn_2);
            $r2 = mysql_fetch_array($res2);
            $forum_topics_id = $r2["id"] + 1;
            echo "new forum_topics_id: " . $forum_topics_id . "\n";
            mysql_free_result($res2);
            mysql_close($s_conn_2);
            
            // find forum_posts last ID
            $s_conn_3 = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
            mysql_select_db('myDatabase', $s_conn_3) or die (mysql_error());
              $sql_insert = "SELECT max(id) as id FROM forum_posts"; // where topic_id = $forum_topics_id";
            $res3 = mysql_query($sql_insert, $s_conn_3);
            $r3 = mysql_fetch_array($res3);
            $forum_posts_id = $r3["id"] + 1;
            echo "new forum_posts_id: " . $forum_posts_id . "\n";
            mysql_free_result($res3);
            mysql_close($s_conn_3);

            // insert forum_topics
            $s_conn_4 = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
            $mess = "Обсуждение товара " . $g_code . " " . $g_name;
            mysql_select_db('myDatabase', $s_conn_4) or die (mysql_error());
//              $sql_insert = "INSERT INTO forum_topics ( id, poster, subject, posted, last_post, last_post_id, last_poster, num_views, num_replies, closed, stickly, moved_to, forum_id ) VALUES ( $forum_topics_id, 'administrator', $mess, 0, 0, $forum_posts_id, 'administrator', 0, 0, 0, 0, null, 22 )";
              $sql_insert = "INSERT INTO forum_topics ( id, poster, subject, posted, forum_id ) VALUES ( $forum_topics_id, 'administrator', $mess, getdate(), 22 )";
            $res_insert_2 = mysql_query($sql_insert, $s_conn_4);
            echo "Добавлено строк INSERT INTO forum_topics: " . mysql_num_rows($res_insert_2) . "\n";
            //mysql_free_result($res_insert_2);
            mysql_close($s_conn_4);
            
            // insert forum_posts
            $s_conn_5 = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
            $mess = "Обсуждение товара " . $g_code . " " . $g_name;
            mysql_select_db('myDatabase', $s_conn_5) or die (mysql_error());
              $sql_insert = "INSERT INTO forum_posts ( id, poster, poster_id, message, posted, topic_id ) VALUES ( $forum_posts_id, 'administrator', 2, $mess, getdate(), $forum_topics_id )";
            $res_5 = mysql_query($sql_insert, $s_conn_5);
            echo "Добавлено строк INSERT INTO forum_posts: " . mysql_num_rows($res_5) . "\n";
            //mysql_free_result($res_5);
            mysql_close($s_conn_5);

            // update forum_topics
              //$sql_insert = "UPDATE forum_topics set last_post_id = $forum_posts_id, last_poster = 'administrator', num_views = 1, WHERE id = $forum_topics_id";
            //mysql_select_db('myDatabase', $s_conn) or die (mysql_error());
            //$res2c = mysql_query($sql_insert, $s_conn);
            //mysql_free_result($res2c);

            // update goods
            $s_conn_6 = mysql_connect('localhost','myBase','myPass') or die (mysql_error());
            $forum_url = "http://forum.myBase.ru/viewtopicid" . $forum_topics_id . ".html";
            mysql_select_db('myDatabase', $s_conn_6) or die (mysql_error());
              $sql_insert = "UPDATE goods set forum_url = $forum_url WHERE id = $g_id";
            $res4 = mysql_query($sql_insert, $s_conn_6);
            //mysql_free_result($res4);
            mysql_close($s_conn_6);
        }
    }
    
    mysql_free_result($res);
    mysql_close($s_conn);
?>

#2 2008-08-30 18:30:03

pheny
Гость

Re: Программное добавление тем (forum_topics) и постов (forum_posts)

а другие запросы, СЕлект например, у вас отрабатывются? Имхо, нужно заставить работать кусок кода с простеньким запросом, а затем постепенно усложнять код.
В приведенном же вами коде куча запросов к базе и из вашего сообщения неясно работает ли хоть что-нибудь.   

И, кстати, зачем вы через каждые 3 строки открываете по-новой коннект к базе вида mysql_connect('localhost','myBase','myPass')?
Не проще ли всего один открыть и затем только с ним работать? Это к вопросу об оптимизации кода.

#3 2008-08-30 18:43:06

vchesnokov
Гость

Re: Программное добавление тем (forum_topics) и постов (forum_posts)

Удалось набить посты и сообщения встроенными функциями PunBB:

            // Create the topic
            $db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Unable to create topic', __FILE__, __LINE__, $db->error());
            $new_tid = $db->insert_id();

и пр. Connection я повторял из-за не выполнения того кода, изначально соединение было одно. Процедура была разовая, оптимизация там не нужна.

#4 2008-11-05 06:14:43

Dreamers
Гость

Re: Программное добавление тем (forum_topics) и постов (forum_posts)

Кстати раньше ставил себе подобную задачу, тогда так и не понял как реализовать. буду с Вашим примером ковыряться, если что отпишусь о результатах.

Подвал доски

Под управлением FluxBB. Хостинг Hostens