Задавайте вопросы, мы ответим
Вы не зашли.
Решил перенести свой сайт с ucoz на DLE, скачал скрипт. Конвертируется всё кроме форума, хотя модуль DLE Forum установлен и работает. Конвертирование форума проходит в 3 этапа. Один конвертируется успешно, второй (о нём в начале сообщения) и третий (в конце поста) тоже не работают. А дело вот в чём: при попытке конвертирования (запускаю через ссылку php файл) выдаёт отчёт об конвертировании, в котором Unknown column 'uid' in 'field list'.
Я в прогаммировании ничего не понимаю, но слово uid встречается в строках
$info = "SELECT * FROM {$prefix}_forum_forums WHERE uid = $arr[1]";
и
$query = "INSERT IGNORE INTO {$prefix}_forum_topics (`tid`, `forum_id`, `title`, `topic_descr`, `post`, `author_topic`, `start_date`, `topic_status`, `uid`, `last_date`, `last_poster_name`) VALUES
причём лог конверта ругается именно на вторую строку. Можно ли это как то исправить?
полный текст скрипта(извините, тег спойлер не сработал)
<?php
include "config.php";
$filename = "../ucoz/_s1/forum.txt";
$fd = fopen($filename, "r");
$i = 0;
mysql_query("SET CHARACTER SET cp1251");
echo "Лог ковертирования<br>";
while (!feof ($fd))
{
$bufer[$i] = fgets($fd, 4096);
$bufer[$i] = iconv("UTF-8", "Windows-1251", "$bufer[$i]");
$arr = explode("|", $bufer[$i]);
$i++;
$info = "SELECT * FROM {$prefix}_forum_forums WHERE uid = $arr[1]";
$a = mysql_query($info);
$dat_e = date('Y-m-d G:i:s' ,$arr[4]);
if($arr[6] != ""){
while($id = mysql_fetch_array($a)){
$forumid = $id[id];
}
$query = "INSERT IGNORE INTO {$prefix}_forum_topics (`tid`, `forum_id`, `title`, `topic_descr`, `post`, `author_topic`, `start_date`, `topic_status`, `uid`, `last_date`, `last_poster_name`) VALUES
(0, '$forumid', '$arr[8]', '$arr[9]', '$arr[6]', '$arr[10]', '$dat_e', '$arr[5]', '$arr[0]', '$dat_e', '$arr[12]');
";
$result = mysql_query($query);
if(!$result) { echo ("<font color=red>MySQL вернула ошибку <br><textarea style='width: 300px; height: 200px'>".mysql_error()."</textarea><br> в коде <br><textarea style='width: 300px; height: 200px'>{$query}</textarea><br><br></font>");} else echo "Тема «$arr[8]» успешно сконвертирована<br>";
}
}
fclose($fd);
echo "Конвертация тем завершена!<br>";
?>
Третий этап проходит наполовину, то есть он делает названия форумов, но после каждого сконвертированного названия вылетает ошибка, аналогичная первой!
Лог ковертирования
Категория «Лучшие статьи» успешно сконвертирована
MySQL вернула ошибку
Unknown column 'uid' in 'field list'
Приведу полный текст скрипта
<?php
include "config.php";
$filename = "../ucoz/_s1/fr_fr.txt";
$fd = fopen($filename, "r");
$i = 0;
$e = 0;
mysql_query("SET CHARACTER SET cp1251");
echo "Лог ковертирования<br>";
while (!feof ($fd))
{
$bufer[$i] = fgets($fd, 4096);
$bufer[$i] = iconv("UTF-8", "Windows-1251", "$bufer[$i]");
$arr = explode("|", $bufer[$i]);
$i++;
if($arr[2] == 1)
{
if($arr[5] != ""){
$query = "INSERT IGNORE INTO {$prefix}_forum_category (`sid`, `cat_name`, `posi`) VALUES
(0, '$arr[5]', 1);
";
$result = mysql_query($query);
if(!$result) { echo ("<font color=red>MySQL вернула ошибку <br><textarea style='width: 300px; height: 200px'>".mysql_error()."</textarea><br> в коде <br><textarea style='width: 300px; height: 200px'>{$query}</textarea><br><br></font>");} else echo "Категория «$arr[5]» успешно сконвертирована<br>";
}
$e++;
$arr[2] = 1;
}
else{
if($arr[5] != ""){
$arr[11] = date('Y-m-d G:i:s' ,$arr[11]);
$query = "INSERT IGNORE INTO {$prefix}_forum_forums (`id`, `main_id`, `name`, `description`, `access_read`, `uid`, `f_last_title`, `f_last_poster_name`, `f_last_tid`, `topics`, `posts` , `f_last_date`) VALUES
(0, '$e', '$arr[5]', '$arr[6]', '1:2:3:4:5', '$arr[0]', '$arr[17]', '$arr[15]', '$i', '$arr[16]', '$arr[10]', '$arr[11]');
";
$result = mysql_query($query);
if(!$result) { echo ("<font color=red>MySQL вернула ошибку <br><textarea style='width: 300px; height: 200px'>".mysql_error()."</textarea><br> в коде <br><textarea style='width: 300px; height: 200px'>$query
</textarea><br><br></font>");} else echo "Форум «$arr[5]» успешно сконвертирован<br>";
}
}
}
fclose($fd);
echo "Конвертация категорий и форумов завершена!<br>";
?>
Надеюсь, мне помогут!!!
Отредактированно AlexUnder (14.04.2011 07:18:46)
Неактивен
FAQ #10.
Если не верите, то снова FAQ #10.
Если снова не верите, то
после строки
Отредактированно deadka (14.04.2011 08:25:03)
Неактивен
Лог изменился:
Лог ковертирования
INSERT IGNORE INTO dle_forum_topics (`tid`, `forum_id`, `title`, `topic_descr`, `post`, `author_topic`, `start_date`, `topic_status`, `uid`, `last_date`, `last_poster_name`) VALUES (0, '', 'Как сделать селитру(калиевую и натриевую)', 'важнейшие элементы пиротехника,без них никуда...', '28', 'samodelka', '2011-04-04 12:49:38', '0', '2', '2011-04-04 12:49:38', 'Фосфор');
MySQL вернула ошибку
Unknown column 'uid' in 'field list'
Во второй неработающий скрипт тоже добавить?
P.S. В факе 10 не нашёл ничего похожего на свой случай...
Отредактированно AlexUnder (14.04.2011 14:19:59)
Неактивен
AlexUnder написал:
P.S. В факе 10 не нашёл ничего похожего на свой случай...
Не, это как раз Ваш случай - Вы используете DLE.
Цитирую:
В DLE не работает то-то и то-то.
Серьезно задумайтесь о том, чтобы выбрать другую CMS. DLE подвержен атакам
типа SQL injection, у него чрезвычайно нестабильный код, и он полон запросов,
которые не работают. Работающие CMS, например, — WordPress, Drupal или Joomla.
По технической части:
Во, уже лучше, теперь мы знаем, что {$prefix}_forum_topics - это dle_forum_topics.
Ошибка Unknown column 'uid' in 'field list'.
Теперь все же проникнитесь содержимым MySQL error number 1054 и как с ней бороться. Если не получится, то попробуйте выполнить запрос
Неактивен
В рамках Вашего хостинга скорее всего должен стоять phpMyAdmin или другой mysql-клиент - спросите у техподдержки Вашего хостинга как можно работать с mysql. Ну или можно так попробовать - положите возле вашего php-скрипта вот такой скрипт, с именем, допустим, patch.php
Неактивен
Долго искал, как подать запрос, в конце концов нашёл PHPMyAdmin, там нашёл выполнятель (Выполнить SQL-запрос(ы) к базе данных) выполнил alter table `dle_forum_topics` add uid unsigned int;
Ответ MySQL:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned int' at line 1
P.S. Но ведь DLE лучше чем UCOZ?
Отредактированно AlexUnder (14.04.2011 17:12:25)
Неактивен
Сделал запрос, как Вы посоветовали, через файлик php. Ответ вроде аналогичный:
MySQL вернула ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned int' at line 1
Перевёл гуглом: У вас ошибка в запросе, проверьте руководство, которое соответствует вашему MySQL сервера версия для синтаксиса право использовать рядом с "неподписанным Int 'в строке 1
Отредактированно AlexUnder (14.04.2011 17:19:17)
Неактивен
Нда, сори, привычка писать на c/c++ подвела .
alter table `dle_forum_topics` add `uid` unsigned int
замените на
alter table `dle_forum_topics` add `uid` int unsigned
и выполните либо через мой скрипт либо через phpmyadmin, неважно.
Что такое ukoz я не знаю, честно говоря, но с DLE проблем просто немерено.
Неактивен
уверен, юкоз гораздо хуже...
SQL-запрос был успешно выполнен (запрос занял 0.0333 сек.)
SQL-запрос:
ALTER TABLE `dle_forum_topics` ADD `uid` int unsigned
Запустил свой скрипт, ВСЁ РАБОТАЕТ!!!
Лог ковертирования
INSERT IGNORE INTO dle_forum_topics (`tid`, `forum_id`, `title`, `topic_descr`, `post`, `author_topic`, `start_date`, `topic_status`, `uid`, `last_date`, `last_poster_name`) VALUES (0, '', 'Как сделать селитру(калиевую и натриевую)', 'важнейшие элементы пиротехника,без них никуда...', '28', 'samodelka', '2011-04-04 12:49:38', '0', '2', '2011-04-04 12:49:38', 'Фосфор');
Тема «Как сделать селитру(калиевую и натриевую)» успешно сконвертирована
INSERT IGNORE INTO dle_forum_topics (`tid`, `forum_id`, `title`, `topic_descr`, `post`, `author_topic`, `start_date`, `topic_status`, `uid`, `last_date`, `last_poster_name`) VALUES (0, '', 'Сорбитовая\сахарная карамель(ракетное топливо)', 'одно из самых популярных', '5', 'samodelka', '2011-02-26 16:21:44', '0', '3', '2011-02-26 16:21:44', '[Unstopable]');.....
и так далее. Но осталась третья часть, можете и с ней помочь?
в первом посте второй кусок кода, заранее благодарен
Неактивен
Такое ощущение навскидку, что спасёт такой же запрос, но на другую таблицу, на dle_forum_forums.
Попробуйте выполнить запрос
Отредактированно deadka (14.04.2011 17:49:29)
Неактивен
Спасибо вам огромное!!! Сам бы я убился с этим скриптом. Всё перекодировалось, но зайти на форум и проверить состояние статей я не могу, так как шаблон стандартный.. если что не так - напишу сюда. Кстати, у вас есть ICQ? хотелось бы иметь в запасе знающего человека, вдруг чего..
Неактивен
Пожалуйста .
icq, конечно, есть, но если что не так, лучше на форум пишите, другим тоже может быть интересно.
Неактивен
Уважаемый deadka у меня тоже схожая с AlexUnder ситуция, я выполнил все пункты, но с последним оказалось нечто не понятное... пожалуйста помогите.
Вот строки:
----------------------------------
<?php
include "config.php";
$filename = "../ucoz/_s1/fr_fr.txt";
$fd = fopen($filename, "r");
$i = 0;
$e = 0;
mysql_query("SET CHARACTER SET cp1251");
echo "Лог ковертирования<br>";
while (!feof ($fd))
{
$bufer[$i] = fgets($fd, 4096);
$bufer[$i] = iconv("UTF-8", "Windows-1251", "$bufer[$i]");
$arr = explode("|", $bufer[$i]);
$i++;
if($arr[2] == 1)
{
if($arr[5] != ""){
$query = "INSERT IGNORE INTO {$prefix}_forum_category (`sid`, `cat_name`, `posi`) VALUES
(0, '$arr[5]', 1);
";
$result = mysql_query($query);
if(!$result) { echo ("<font color=red>MySQL вернула ошибку <br><textarea style='width: 300px; height: 200px'>".mysql_error()."</textarea><br> в коде <br><textarea style='width: 300px; height: 200px'>{$query}</textarea><br><br></font>");} else echo "Категория «$arr[5]» успешно сконвертирована<br>";
}
$e++;
$arr[2] = 1;
}
else{
if($arr[5] != ""){
$arr[11] = date('Y-m-d G:i:s' ,$arr[11]);
$query = "INSERT IGNORE INTO {$prefix}_forum_forums (`id`, `main_id`, `name`, `description`, `access_read`, `uid`, `f_last_title`, `f_last_poster_name`, `f_last_tid`, `topics`, `posts` , `f_last_date`) VALUES
(0, '$e', '$arr[5]', '$arr[6]', '1:2:3:4:5', '$arr[0]', '$arr[17]', '$arr[15]', '$i', '$arr[16]', '$arr[10]', '$arr[11]');
";
$result = mysql_query($query);
if(!$result) { echo ("<font color=red>MySQL вернула ошибку <br><textarea style='width: 300px; height: 200px'>".mysql_error()."</textarea><br> в коде <br><textarea style='width: 300px; height: 200px'>$query
</textarea><br><br></font>");} else echo "Форум «$arr[5]» успешно сконвертирован<br>";
}
}
}
fclose($fd);
echo "Конвертация категорий и форумов завершена!<br>";
?>
----------------------------------
Я прописал как вы велели в phpMyAdmin
alter table `dle_forum_forums` add `uid` int unsigned
В итоге получилось:
SQL-запрос был успешно выполнен ( запрос занял 0.0036 сек. )
Но когда включаю сам скрипт:
/convert/convert_forumc.php
Лог ковертирования
MySQL вернула ошибку
Table 'hoiru_Deagleb.dle_forum_category' doesn't exist
в коде
INSERT IGNORE INTO dle_forum_category (`sid`, `cat_name`, `posi`) VALUES
(0, 'General', 1);
MySQL вернула ошибку
Unknown column 'main_id' in 'field list'
в коде
INSERT IGNORE INTO dle_forum_forums (`id`, `main_id`, `name`, `description`, `access_read`, `uid`, `f_last_title`, `f_last_poster_name`, `f_last_tid`, `topics`, `posts` , `f_last_date`) VALUES
(0, '1', 'Главный', 'Все вопросы и предложения к руководству hoi2.ru', '1:2:3:4:5', '38', 'Создаю новый проект!', 'Deagleby', '2', '2807', '828', '2011-02-20 15:39:50');
MySQL вернула ошибку
Unknown column 'main_id' in 'field list'
в коде
INSERT IGNORE INTO dle_forum_forums (`id`, `main_id`, `name`, `description`, `access_read`, `uid`, `f_last_title`, `f_last_poster_name`, `f_last_tid`, `topics`, `posts` , `f_last_date`) VALUES
(0, '1', 'Политический форум', 'Обсуждение политических событий в России и в мире.', '1:2:3:4:5', '39', 'В Марокко прошла многотысячн...', 'Deagleby', '3', '2819', '8002', '2011-02-20 16:53:28');
А в конце написано:
Конвертация категорий и форумов завершена!
Неактивен
С первой частью что показывал AlexUnder у меня проблем не возникло, выполнил все по пунктикам. В итоге темы и сообщения созданы, а вот с разделами форума проблема, они не отображаются.
PS^ Вы единственный человек в рунете который почти решил проблему с конвертацией ucoz в dle
Отредактированно Deagleby (26.06.2011 19:50:29)
Неактивен
Лог ковертирования
MySQL вернула ошибку
Table 'hoiru_Deagleb.dle_forum_category' doesn't exist
Отсутствует таблица dle_forum_category - надо ее создать. Как ее создать, честно говоря, не знаю, спросите на форуме DLE.
MySQL вернула ошибку
Unknown column 'main_id' in 'field list'
Попробуйте запрос
Неактивен