Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Приветствую.
Исходная задача такова. Форум развёрнут в одной MySql базе с "головной" базой. В базе есть таблица товаров. Я завёл отдельную категорию на форуме, и хочу на каждую единицу списка товаров добавить свою тему и пост вида "Здесь обсуждаем товар NN".
Почему-то не идёт добавление записей в таблицы forum_posts и forum_topics из PHP кода. Крутил по-разному, текущий вариант что-то вроде (показано ниже), так не работает же INSERT, записей нет
<?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);
?>
а другие запросы, СЕлект например, у вас отрабатывются? Имхо, нужно заставить работать кусок кода с простеньким запросом, а затем постепенно усложнять код.
В приведенном же вами коде куча запросов к базе и из вашего сообщения неясно работает ли хоть что-нибудь.
И, кстати, зачем вы через каждые 3 строки открываете по-новой коннект к базе вида mysql_connect('localhost','myBase','myPass')?
Не проще ли всего один открыть и затем только с ним работать? Это к вопросу об оптимизации кода.
Удалось набить посты и сообщения встроенными функциями 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 я повторял из-за не выполнения того кода, изначально соединение было одно. Процедура была разовая, оптимизация там не нужна.
Кстати раньше ставил себе подобную задачу, тогда так и не понял как реализовать. буду с Вашим примером ковыряться, если что отпишусь о результатах.
Страницы 1
Тема закрыта