SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.04.2011 07:03:54

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Помогите!

Решил перенести свой сайт с 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)

Неактивен

 

#2 14.04.2011 08:23:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

FAQ #10.
Если не верите, то снова FAQ #10.
Если снова не верите, то

после строки

$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]');
"
;
 


добавьте строку
print $query."<br />";


Это для того, чтобы узнать имя таблицы.

Исходя из вывода скрипта нужно будет добавить недостающий столбец uid в нужную таблицу, должно помочь.


и пришлите сюда вывод.

Отредактированно deadka (14.04.2011 08:25:03)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 14.04.2011 14:18:58

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Re: Помогите!

Лог изменился:
Лог ковертирования
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)

Неактивен

 

#4 14.04.2011 16:25:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

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 и как с ней бороться. Если не получится, то попробуйте выполнить запрос

alter table `dle_forum_topics` add uid unsigned int;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 14.04.2011 16:53:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

В рамках Вашего хостинга скорее всего должен стоять phpMyAdmin или другой mysql-клиент  - спросите у техподдержки Вашего хостинга как можно работать с mysql. Ну или можно так попробовать - положите возле вашего php-скрипта вот такой скрипт, с именем, допустим, patch.php

<?php
include "config.php";
$result = mysql_query("SET CHARACTER SET cp1251");
if(!$result)
{
    echo "MySQL вернула ошибку ".mysql_error()."<br />";
    mysql_close();
    die;
}
$result = mysql_query("alter table `dle_forum_topics` add `uid` unsigned int");
if(!$result)
{
    echo "MySQL вернула ошибку ".mysql_error()."<br />";
    mysql_close();
    die;
}
else
{
    echo "Запрос успешно выполнен.<br />";
}
mysql_close();
?>


и запустите его.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 14.04.2011 17:10:11

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Re: Помогите!

Долго искал, как подать запрос, в конце концов нашёл 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)

Неактивен

 

#7 14.04.2011 17:14:44

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Re: Помогите!

Сделал запрос, как Вы посоветовали, через файлик 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)

Неактивен

 

#8 14.04.2011 17:30:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

Нда, сори, привычка писать на c/c++ подвела sad.

alter table `dle_forum_topics` add `uid` unsigned int
замените на
alter table `dle_forum_topics` add `uid` int unsigned

и выполните либо через мой скрипт либо через phpmyadmin, неважно.

Что такое ukoz я не знаю, честно говоря, но с DLE проблем просто немерено.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 14.04.2011 17:36:15

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Re: Помогите!

уверен, юкоз гораздо хуже...

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]');.....   


и так далее. Но осталась третья часть, можете и с ней помочь?

в первом  посте второй кусок кода, заранее благодарен

Неактивен

 

#10 14.04.2011 17:49:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

Такое ощущение навскидку, что спасёт такой же запрос, но на другую таблицу, на dle_forum_forums.

Попробуйте выполнить запрос

alter table `dle_forum_forums` add `uid` int unsigned

Отредактированно deadka (14.04.2011 17:49:29)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 14.04.2011 18:03:42

AlexUnder
Участник
Зарегистрирован: 14.04.2011
Сообщений: 6

Re: Помогите!

Спасибо вам огромное!!! Сам бы я убился с этим скриптом. Всё перекодировалось, но зайти на форум и проверить состояние статей я не могу, так как шаблон стандартный.. если что не так - напишу сюда. Кстати, у вас есть ICQ? хотелось бы иметь в запасе знающего человека, вдруг чего..

Неактивен

 

#12 14.04.2011 18:59:46

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

Пожалуйста smile.
icq, конечно, есть, но если что не так, лучше на форум пишите, другим тоже может быть интересно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 26.06.2011 19:45:43

Deagleby
Участник
Зарегистрирован: 26.06.2011
Сообщений: 3

Re: Помогите!

Уважаемый 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');

А в конце написано:
Конвертация категорий и форумов завершена!

Неактивен

 

#14 26.06.2011 19:49:17

Deagleby
Участник
Зарегистрирован: 26.06.2011
Сообщений: 3

Re: Помогите!

С первой частью что показывал AlexUnder у меня проблем не возникло, выполнил все по пунктикам. В итоге темы и сообщения созданы, а вот с разделами форума проблема, они не отображаются. sad

PS^ Вы единственный человек в рунете который почти решил проблему с конвертацией ucoz  в dle

Отредактированно Deagleby (26.06.2011 19:50:29)

Неактивен

 

#15 26.06.2011 21:56:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите!

Лог ковертирования
MySQL вернула ошибку
Table 'hoiru_Deagleb.dle_forum_category' doesn't exist

Отсутствует таблица dle_forum_category - надо ее создать. Как ее создать, честно говоря, не знаю, спросите на форуме DLE.

MySQL вернула ошибку
Unknown column 'main_id' in 'field list'

Попробуйте запрос

alter table `dle_forum_forums` add `main_id` int unsigned


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson