Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Была рабочая установка с 1.1.3
Ее неправильно обновил до 1.2.13 и она полетела.
Ставлю с бекап скрипта и базы, не может создавать топики, хотя сообщения могу оставлять...
Тот же бекап на виртуальном хосте, все работает!
Ставлю нулевую на локалхосте, все работает, как только Easy Poll ставлю, перестает темы создавать.
Пишет:
Error: Unable to create topic.
Может права где косячатся...
Unable to create topic - где-то запрос к БД неверный. Включи отладку - будет яснее.
Unable to create topic - где-то запрос к БД неверный. Включи отладку - будет яснее.
Извините, я только начал изучать работу с локальным сервером.
Мне нужно запустить в режиме отладки обработчик php или MySQL?
Форум. include/common.php расскоментируй строки:
//define('PUN_DEBUG', 1);
и
//define('PUN_SHOW_QUERIES', 1);
они в самом начале после GNUGPL
An error was encountered
File: C:\data\forum\post.php
Line: 288
PunBB reported: Unable to create topic
Database reported: Field 'question' doesn't have a default value (Errno: 1364)
Failed query: INSERT INTO topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES('Xenon', 'Ntvf', 1160036968, 1160036968, 'Xenon', 4)
попробуй сделать ALTER TABLE `forum_topics` CHANGE `question` `question` VARCHAR(255) NULL DEFAULT '0'
ALTER TABLE `forum_topics` CHANGE `yes` `yes` VARCHAR(30) NULL DEFAULT '0'
ALTER TABLE `forum_topics` CHANGE `no` `no` VARCHAR(30) NULL DEFAULT '0'
найти подобный строки заменить на
// Create the topic
$new_tid = $db->insert_id();
$db->query('INSERT INTO ' . $db->prefix . 'polls (voters, pollid, options, ptype) VALUES("0", '.$new_tid.', \'' . $db->escape(serialize($option)) . '\', ' . $ptype . ')') or error('Unable to create poll', __FILE__, __LINE__, $db->error());
Привет всем (первый раз сюда пишу, хоть читаю уже с пол года).
Как раз в середине лета поднял форум на punbb, черт меня дернул
-
А форум - выжил... и даже развился. Теперь отступать поздно. Проблем было много, но решаемые. Программист я почти никакой, но внимательности для интегрирования модулей хватает.
-
И конечно самые важные модули - "личка", "голосование" (easy poll 1.1.3 - с ним собственно и проблема), "галерея"(простая, но людям нравится).
-------------------
СУТЬ ВОПРОСА:
Как я понял из рядя тем Easy poll 1.1.3 вещь весьма проблемная... Хотя по началу все работало просто прекрасно.
Вот здесь на вашем форуме написано:
http://punbb.ru/viewtopic.php?id=675
следующее:
Px пишет:Плюс до сих пор оно не научилось работать с MySQL5....
Версия 1.1.3 у меня проблема с MySQL 5.0.24a-community-nt . А вот с MySQL 5.0.18-max-log на Jino-net все нормально.
Единственный баг, время от времени отображается только первое сообщение голосования. Нужно обновлять страницу.
Дописал как в viewpool рейтинг, лс, перенос. Вполне нормально
-
Собственно он и сломался при переходе на mysql 5.0.27 А именно перестали поститься опросы. Все старые, ранее созданные видны прекрасно. При попытке создать новый опрос тоже все открывается. Поля заполняются... И при нажатии "Отправить" выдается
"Error: Unable to create topic."
После чего либо появляется пустая тема-битая ссылка, либо вообще ничего не появляется, естественно после такого сообщения.
-
(Кстати я проверил, с easy poll +2.0 (который еще французский чуток) таже фигня, да еще и БД не совместима).
-
Вот и думаю - хоть на mysql 4 переходи... Но ИМХО - это как-то не правильно...
Камрады, может кто-нибудь знает, из-за чего такой хитрый вещь происходит??? А лучше чего там доправить надо в опросе, чтоб с 5 мускулом он подружился. Буду весьма признателен за подсказку, ведь наверняка не я один мучаюсь.
-
Спасибо за ту большую работу, которую вы тут делаете.
2. Укажите данные PUN_DEBUG (об этом читайте фак)
В общем так.
База легко переносится между mysql 5.0.27 и mysql 4.1 (туда и обратно). Несколько раз переносил уже для чистоты эксперимента. И в том и в другом варианте все функции форума работают, кроме голосования (Easy Poll 1.1.3) с версией mysql 5:
-
Вхожу в "Создать новый опрос" корректно, Выбираю 1 из 3 типов опроса корректно. Ввожу вопрос, варианты ответов, название темы и сам пост. Жму "Отправить"
вылезает такая штука:
-
File: D:\www\forum\poll.php
Line: 265PunBB reported: Unable to create poll
Database reported: Field 'voters' doesn't have a default value (Errno: 1364)
Failed query: INSERT INTO phpBB2polls (pollid, options, ptype) VALUES(693, 'a:5:{i:1;s:9:\"âàðèàíò1\";i:2;s:9:\"âàðèàíò 2\";i:3;s:9:\"âàðèàíò 3\";i:4;s:9:\"âàðèàíò 4\";i:5;s:9:\"âàðèàíò 5\";}', 1)
-
(кракозябрами это русские буквы в вариантах ответа, они потом нормальные получаются, если получается сам опрос...)
-
После чего в списке тем появляется соответствующая тема, но при попытке в нее зайти говорит:
"Неверный запрос. Ссылка, по которой вы пришли неверная или устаревшая"
--------------------------------------------
При тех же условиях и работе на mysql 4 все корректно размещается и опрос работает
по кнопке "отправить" отладчик выводит:
0.00353 SELECT u.*, g.*, o.logged, o.idle FROM phpBB2users AS u INNER JOIN phpBB2groups AS g ON
u.group_id=g.g_id LEFT JOIN phpBB2online AS o ON o.user_id=u.id WHERE u.id=2
0.00158 UPDATE phpBB2online SET logged=1173709670 WHERE user_id=2
0.00186 SELECT * FROM phpBB2online WHERE logged<1173709370
0.00108 SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics FROM
phpBB2forums AS f LEFT JOIN phpBB2forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=1) WHERE (fp.read_forum
IS NULL OR fp.read_forum=1) AND f.id=24
0.00188 INSERT INTO phpBB2topics (poster, subject, posted, last_post, last_poster, forum_id, question)
VALUES('all_life', 'Заголовок опроса', 1173709670, 1173709670, 'all_life', 24, 'Вопрос')
0.00152 INSERT INTO phpBB2polls (pollid, options, ptype) VALUES(693, 'a:5:{i:1;s:9:\"âàðèàíò
1\";i:2;s:9:\"âàðèàíò 2\";i:3;s:9:\"âàðèàíò 3\";i:4;s:9:\"âàðèàíò 4\";i:5;s:9:\"âàðèàíò 5\";}', 1)
0.00177 INSERT INTO phpBB2posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id)
VALUES('all_life', 2, '10.37.20.111', 'Сообщение\nПроверка отправки голосования на mysql 4.1', '0', 1173709670,
693)
0.00167 UPDATE phpBB2topics SET last_post_id=25221 WHERE id=693
0.00268 SELECT id, word FROM phpBB2search_words WHERE word
IN('сообщение','проверка','отправки','голосования','mysql','4.1','заголовок','опроса')
0.00360 INSERT INTO phpBB2search_matches (post_id, word_id, subject_match) SELECT 25221, id, 0 FROM
phpBB2search_words WHERE word IN('сообщение','проверка','отправки','голосования','mysql','4.1')
0.00252 INSERT INTO phpBB2search_matches (post_id, word_id, subject_match) SELECT 25221, id, 1 FROM
phpBB2search_words WHERE word IN('заголовок','опроса')
0.00286 SELECT COUNT(id), SUM(num_replies) FROM phpBB2topics WHERE moved_to IS NULL AND forum_id=24
0.00311 SELECT last_post, last_post_id, last_poster FROM phpBB2topics WHERE forum_id=24 AND moved_to IS NULL
ORDER BY last_post DESC LIMIT 1
0.00182 UPDATE phpBB2forums SET num_topics=50, num_posts=1561, last_post=1173709670, last_post_id=25221,
last_poster='all_life' WHERE id=24
0.00175 UPDATE LOW_PRIORITY phpBB2users SET num_posts=num_posts+1, last_post=1173709670 WHERE id=2
-----------------------------------
Опросы, созданные в mysql 4 легко просматриваются и работают в mysql 5.
-
Как я понял, какой-то трабл с полем voters в таблице phpbb2poll (это у меня префикс такой одиозный - он не имеет отношения к одноименному форуму ) именно в момент создания опроса.
-
Таблица ...poll по дампу имеет вид:
DROP TABLE IF EXISTS phpbb2polls;
CREATE TABLE `phpbb2polls` (
`id` int(11) NOT NULL auto_increment,
`pollid` int(11) NOT NULL default '0',
`options` longtext NOT NULL,
`voters` longtext NOT NULL,
`ptype` tinyint(4) NOT NULL default '0',
`votes` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM /*!40101 DEFAULT CHARSET=utf8 */;
-
Строки в poll.php: (хотя я его не модифицировал)
264 $new_tid = $db->insert_id();
265 $db->query('INSERT INTO ' . $db->prefix . 'polls (pollid, options, ptype) VALUES(' . $new_tid . ', \'' . $db->escape(serialize($option)) . '\', ' . $ptype . ')') or error('Unable to create poll', __FILE__, __LINE__, $db->error());
-------------------------
В общем не понимаю, почему 4-й mysql все ест нормально, а 5-й нет...
(баг этот проявляется у меня на версиях форума 1.2.12 и 1.2.14 (если это, конечно существенно)).
Редактировался all_life (2007-03-14 17:32:36)
Глупый мод, надо другой искать
Ну поле voters не должно быть пустое, а в запросе оно не заполняется, тоесть принимает значение NULL, а это противоречит структуре таблицы. Надо либо изменить запрос, вставляя туда это поле, либо изменить структуру таблицы, сделав для поля voters DEFAULT "", например.
Глупый мод, надо другой искать
Ну, других-то фактически нет. Да и на нем уже сильно большая база образовалась. Нельзя же ее теперь так взять и сбросить... Тем более никаких проблем с этим опросом, за исключением описанной, у меня не было.
-
hcs, большое спасибо за ответ. Вот только, извиняюсь конечно за навязчивость, как бы мне так
изменить запрос, вставляя туда это поле
или
изменить структуру таблицы, сделав для поля voters DEFAULT ""
учитывая что мои знания с синтаксисе команд mysql и php хоть и не совсем нулевые, но все же к этому самому нулю стремящиеся
собственно, как будет синтаксис - то выглядеть?
-
т.е. проблема - как это написать.
-
Есть у меня предположение, что, например надо в дампе заменить
`voters` longtext NOT NULL,
на
`voters` longtext NOT NULL default "",
(по образцу соседних полей, там правда цифра в апострофах, а не в кавычках... но и поля не текстовые...) Или это будет не правильно?
-
Лучше, конечно, изменить запрос в poll.php. Но как подступиться к запросам на php я вообще не знаю
Может можно привести какой-нибудь пример, как это должно выглядеть?
Редактировался all_life (2007-03-15 15:23:56)
В твоём случае проще изменить дефолтовое значение для поля, при помощи phpMyAdmin
Только никаких гарантий, неизвестно как себя поведёт мод с такими изменениями. Это не страшно, но могут быть и сюрпризы.
-------------------
-------------------
P.S. Час спустя.
Все, ура! Я его победил. Спасибо за направление мысли в нужное русло.
-
Может решение и не совсем корректно, но оно помогло:
(с базой данных, кстати нифига не проканало )
так вот, я в файле poll.php из строки 265:
$db->query('INSERT INTO ' . $db->prefix . 'polls (pollid, options, ptype) VALUES(' . $new_tid . ', \'' . $db->escape(serialize($option)) . '\', ' . $ptype . ')') or error('Unable to create poll', __FILE__, __LINE__, $db->error());
убрал:
or error('Unable to create poll', __FILE__, __LINE__, $db->error())
осталось:
$db->query('INSERT INTO ' . $db->prefix . 'polls (pollid, options, ptype) VALUES(' . $new_tid . ', \'' . $db->escape(serialize($option)) . '\', ' . $ptype . ')');-
И теперь, не смотря на полное отсутствие работы с полем "voters", просто не вылезает сообщение об ошибке. В результате скрипт спокойно продолжает работать до конца и создает корректный опрос
-
...а с этим полем (voters) опрос вообще не работает... видимо на будущие разработки какой-то запас.
Редактировался all_life (2007-03-15 15:28:36)
Здравствуйте камрады. Категорически прошу извинить меня за мой предыдущий пост... Дело в том что там написан полный бред. (удалять я его не стал, дабы дурь видна была).
Дело в том, что я так припарился с этим опросом, что забыл в очередной раз сменить версию mysql с 4 на 5. И естественно все работало(на 4 - то порядок полный).
Когда 5 таки поставил - все опять переклинило
Так же я был не прав по поводк поля "voters" в таблице опроса (<префикс>polls). Это поле как раз таки самое важное и хранит результаты ответов (конечно если они есть).
-
Однако помог совет товарища hcs, за что ему огромное человеческое спасибо, и сейчас напишу какой хитрый вещь я обнаружил!
(кстати, иначе чем багом mysql 5.0.27 это не назовешь)
-
Дело в том, что я добавил дефолтное значение полям `voters` longtext NOT NULL и `votes` longtext NOT NULL
-
Я открыл файл дампа (его нужный кусок приведен выше на 5 сообщений) и изменил строки:
`voters` longtext NOT NULL,
`ptype` tinyint(4) NOT NULL default '0',
`votes` longtext NOT NULL,
на
`voters` longtext NOT NULL default '',
`ptype` tinyint(4) NOT NULL default '0',
`votes` longtext NOT NULL default '',
-
Это, кстати, не так - то просто сделать Ни один редактор из имевшихся в наличии (ни блокнот, ни фрегат, ни тотал командер, ни тем более остальные навороченные ворды) не смог сохранить этот файл не повредив (не то кодировки сбиваются, ни то переносы какие-то или служебные символы возникают). А DOS тупо сказал - что с файлом 30 мегабайт работать не будет...
Только Far выручил (хоть это все к делу и мало относится).
-
Залив дамп в базу я получил прекрасно работающий опрос на mysql 5 !!!
-
Но вот какой трабл:
При снятии очередного дампа, этих "default '' " в нем опять не образовалось!
т.е. выходит что mysqldump.exe не корректно снимает сценарий восстановления! Естественно залив этот, только что снятый, дамп обратно - получаем отвалившейся опрос... Т.о. если каждый раз перед восстановлением или переносом подправлять вручную дамп - то опрос будет работать (хороше хоть необходимость восстановления или переноса возникает очень редко). Кстати инсталлер easy poll 1.1.3 изначально создает неправильно эту таблицу и поэтому сразу после установки отказывается работать в mysql 5. (у меня теперь уже все работает )
-
Написать в скрипте poll.php так, что-бы каждый раз при создании очередного опроса полям voters и votes присваивались пустые значения я ниасилил, хоть и пытался. Видимо не хватает важной части мозга...
-
Кстати, к слову, очень хороший опрос и во всем остальном не подводил, и народ его любит (пользователи, в смысле)...
==========
Еще возникла небольшая проблема с приватами. Но ее я опишу в подобающем месте форума и не сегодня, а то 2 часа ночи уже и пиво кончилось...
Редактировался all_life (2007-03-17 02:17:09)
а в mySQL4 то намано экспортируется? или тоже коряво? или не проверял?
В mySQL4 вообще никаких проблем.
Все прекрасно работает. При снятии дампа "default ' ' " в сценарии естественно тоже не появляется. Но это не мешает ему работать, после применения такого дампа. Пароблема именно с mysql 5 - он почему-то не хочет работать с этими "longtext" полями, пока для них не установлены дефолтные значения.
-
Т.е. если экспортировать из 5 в 4 то ничего в базе править не придется - все будет работать.
all_life, а ты не пробывал дампы снимать phpMyAdmin'ом а не mysqldump.exe ?
Неа, не пробовал.
Я посмотрел на это чудо современной техники (phpMyAdmin). Чуть голову не сломал пытаясь постичь принцип его настройки и работы. Решил отложить разборки с ним на отдаленное будущее
гыгы) - а ведь он для нубов!
гыгы) - а ведь он для нубов!
Не исключено
-
Я еще более изящное решение нашел для опроса.
вместо
`voters` longtext NOT NULL,
`ptype` tinyint(4) NOT NULL default '0',
`votes` longtext NOT NULL,
написать в базе
`voters` longtext default NULL,
`ptype` tinyint(4) NOT NULL default '0',
`votes` longtext default NULL,
т.о. выходит, что значение не NULL для этих полей не критично.
Опрос продолжает корректно работать. И при этом так же корректно с базы снимается дамп. И соответственно применяется корректно при переносе/восстановлении (в MySql-5).
Редактировался all_life (2007-03-30 15:33:23)
какраз задался этим вопросом - спасибо тебе - попробую
Поставил Easy Poll + 2
терь такая вот фигушка вылазит:
Parse error: syntax error, unexpected '}' in Z:\home\forum.blitzteam.su\www\post.php on line 749
На скока я понял, дело в неправельной фигурной скобке, но я все сделал по инструкции.
Кто нить ставил этот опрос на версию 1.2.16? и нормально ли все работает?
Ты где-то ошибся при установке мода. Перепроверь, все должно работать.
Страницы 1
Тема закрыта