[Ошибка] Редактированное сообщение

Board index phpBBex 1.x Поддержка

Description: У вас проблемы с phpBBex 1.x и вам необходима помощь? Спрашивайте здесь!
Forum rules: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Moderator: Поддержка

Post #1by InTheWeb » 12.10.2016, 13:27

Приветствую.
На локалке тестирую phpBBex 1.9.1 и заметил, что переодически при редактировании сообщения вместо моего ника выводится "Гость". Однако если viewtopic.php заменить на стандартный phpBB 3.0.14, то подобного не наблюдается.
Повторное редактирование помогает.

В чём может быть проблема?

Added after 1 hour 9 minutes:
Code: Select all
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1649: Undefined offset: 81
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1649: Undefined offset: 81
* 81 = ID пользователя
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #2by Sumanai » 12.10.2016, 15:34

InTheWeb wrote:В чём может быть проблема?
Кто знает?
InTheWeb wrote:PHP Notice: in file [ROOT]/viewtopic.php on line 1649: Undefined offset: 81
Это на файле от phpBBex или от phpBB?
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #3by InTheWeb » 12.10.2016, 15:48

Sumanai wrote:Это на файле от phpBBex или от phpBB?
Это на файле от phpBBex.
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #4by Sumanai » 12.10.2016, 15:55

В оригинальном файле на этой строке комментарий, который никак не может вызывать ошибки. Приложите свой файл.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #5by InTheWeb » 12.10.2016, 15:59

Держите.
Attachments
viewtopic.rar
viewtopic.пхп
(18.48 KiB) Downloaded 56 times
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #6by Sumanai » 12.10.2016, 16:08

Что-то мне кажется, что это из-за Admin Only Edit Post MOD. Либо Topic Moderator MOD.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #7by InTheWeb » 12.10.2016, 16:08

Sumanai wrote:Topic Moderator MOD.
Крайне вряд ли. Всегда работал.
Sumanai wrote:Admin Only Edit Post MOD
Попробую удалить. Отпишусь.
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #8by InTheWeb » 13.10.2016, 10:43

Нет, к сожалению, проблема не пропала.
Ещё заметил такую особенность: если проредактировать на этой странице ещё несколько постов, то ник становится корректным и ошибка пропадает.
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #9by InTheWeb » 15.10.2016, 11:24

Code: Select all
// If reversed order is used for storing
if ($store_reverse)
{
   $post_list = array_reverse($post_list);
}
Закомментировал данный код и всё отлично. Что это вообще?

Я понимаю, что возвращение в обратном порядке. Но к чему?
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #10by Sumanai » 15.10.2016, 11:34

Это чтобы не перегружать БД, чтобы выбирать 20 сообщений с конца, а не выбирать тысячи сообщений сначала лишь для того, чтобы их отбросить. Оптимизация. Сейчас посмотрю, как это может быть связано с редактированием сообщений.

Added after 7 minutes 4 seconds:
InTheWeb, первое сообщение в проблемной теме было закреплено?
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #11by InTheWeb » 15.10.2016, 11:42

Sumanai wrote:InTheWeb, первое сообщение в проблемной теме было закреплено?
Нет, такого не было.

Added after 27 seconds:
Причем, если я заменяю все на стандартный viewtopic.php из phpBB, то всё ОК.
Теперь заметил, что сообщения наоборот выходят (в обратном порядке).
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #12by Sumanai » 15.10.2016, 12:29

InTheWeb wrote:Теперь заметил, что сообщения наоборот выходят (в обратном порядке).
InTheWeb wrote:Закомментировал данный код
Очевидно, нужно его вернуть.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #13by InTheWeb » 15.10.2016, 12:34

Sumanai wrote:Очевидно, нужно его вернуть.
Одно убивает другое. оО
Кстати, я так понимаю, попытки найти связь с редактированием провалились?
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #14by Sumanai » 15.10.2016, 13:13

Пока не выяснил. Была надежда на закреплённый первый пост, но она провалилась, думаю дальше.

Added after 15 minutes 11 seconds:
InTheWeb, проведите такой тест: Замените строку
Code: Select all
            $display_username = get_username_string('full', $row['post_edit_user'], $post_edit_list[$row['post_edit_user']]['username'], $post_edit_list[$row['post_edit_user']]['user_colour']);
На строки
Code: Select all
            $display_username = get_username_string('full', $row['post_edit_user'],
$post_edit_list[$row['post_edit_user']]['username'],
$post_edit_list[$row['post_edit_user']]['user_colour']);
После воспроизведите ошибку и посмотрите, какая из этих трёх строк будет выдавать ошибку Undefined offset.

Added after 2 minutes 51 second:
Так же интересно было бы узнать, проявляется ли ошибка на
  1. последней странице темы
  2. в первой половине темы
  3. во второй половине темы
  4. везде.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #15by InTheWeb » 16.10.2016, 12:15

Sumanai, доброе утро.
Собственно, что успел выявить... Ошибки на следующих строках:
Code: Select all
$post_edit_list[$row['post_edit_user']]['username'],
$post_edit_list[$row['post_edit_user']]['user_colour']);
Sumanai wrote:Так же интересно было бы узнать, проявляется ли ошибка на
последней странице темы
в первой половине темы
во второй половине темы
везде.
Не смог полностью уследить, но, как правило, где-то внизу происходит. Например, в этот раз на 19 посту такое произошло.

Added after 3 hours 35 minutes:
Таким образом все работает:
Spoiler
Code: Select all
$sql = 'SELECT p.post_id
   FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE . ' u': '') . "
   WHERE p.topic_id = $topic_id
      " . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p.post_approved = 1' : '') . "
      " . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
      $limit_posts_time
   ORDER BY $sql_sort_order";
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);

$i = ($store_reverse) ? $sql_limit - 1 : 0;
while ($row = $db->sql_fetchrow($result))
{
   $post_list[$i] = (int) $row['post_id'];
   ($store_reverse) ? $i-- : $i++;
}
$db->sql_freeresult($result);

while ($row = $db->sql_fetchrow($result))
{
   if ($topic_data['topic_first_post_show'] && $row['post_id'] == $topic_data['topic_first_post_id'])
   {
      // Skip first post if it is pinned
      continue;
   }
   $post_list[] = (int) $row['post_id'];
}
$db->sql_freeresult($result);


// Show first post on every page if needed
if ($topic_data['topic_first_post_show'])
{
   array_unshift($post_list, (int) $topic_data['topic_first_post_id']);
}

if (!sizeof($post_list))
{
   if ($sort_days)
   {
      trigger_error('NO_POSTS_TIME_FRAME');
   }
   else
   {
      trigger_error('NO_TOPIC');
   }
}
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #16by InTheWeb » 17.10.2016, 13:23

Проблема снова имеет место быть.
Нарыл такое: /viewtopic.php?t=1661
Может, пора уже исправить как-нибудь?

Added after 23 minutes 48 seconds:
Такой кусок вроде исправляет ситуацию:
Code: Select all
if($topic_data['topic_first_post_show'] && ( $start != 0))
{
   $i = 0;
   $post_list[$i] = $topic_data['topic_first_post_id'] ;
   $i = ($store_reverse) ? $sql_limit : $i+1;
}
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #17by Sumanai » 17.10.2016, 15:42

InTheWeb wrote:Может, пора уже исправить как-нибудь?
Пора конечно. В следующей версии, которая скоро выйдет, думаю это исправить.
Просто я никак не могу повторить ошибки.
InTheWeb wrote:Такой кусок вроде исправляет ситуацию:
Не то, костыль какой-то, кусок кода совершенно не в тему.
Сейчас я совершенствую понимание относящегося к проблеме кода и разрабатываю нормальное исправление.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #18by InTheWeb » 17.10.2016, 16:31

Sumanai wrote:разрабатываю нормальное исправление.
я так понимаю, версия будет 2.0.*? :(
Получается, ошибку на моей версии уже никто исправлять не будет, очень жаль.
На 2.0 не перехожу из-за отсутсивя мода кураторов.

Added after 1 minute 31 second:
Sumanai wrote:Сейчас я совершенствую понимание относящегося к проблеме кода и разрабатываю нормальное исправление.
Не дочитал. То есть, исправление будет и в моде, и в письменном виде? Отлично. Благодарю.
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Post #19by Sumanai » 17.10.2016, 16:49

InTheWeb wrote:я так понимаю, версия будет 2.0.*? :(
Да.
InTheWeb wrote:Получается, ошибку на моей версии
А какая у вас? Я так и не понял, вы то ищите мод на 2.0, то вот сейчас.
InTheWeb wrote:На 2.0 не перехожу из-за отсутсивя мода кураторов.
Вам же указали на соответствующее расширение, названия у них разные, но суть одна.

Added after 24 seconds:
InTheWeb wrote:То есть, исправление будет и в моде, и в письменном виде?
Все правки выложены в открытый доступ в репозитории. Я дам вам ссылку.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1564
With us: 4 yaers 4 months

Post #20by InTheWeb » 17.10.2016, 16:50

У меня 1.9. Вы, видимо, случайно перенесли тему в этот раздел вместе с предыдущей моей (она, кстати, именно по 2.0)
Такой код 100% убирает ошибку. Взял у автора << first post on every page >>
Spoiler
Code: Select all
// Container for user details, only process once
$post_list = $user_cache = $id_cache = $attachments = $attach_list = $rowset = $update_count = $post_edit_list = array();
$has_attachments = $display_notice = false;
$bbcode_bitfield = '';
$i = $i_total = 0;

// Go ahead and pull all data for this topic
$sql = 'SELECT p.post_id
   FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE . ' u': '') . "
   WHERE p.topic_id = $topic_id
      " . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p.post_approved = 1' : '') . "
      " . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
      $limit_posts_time
   ORDER BY $sql_sort_order";
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);

$i = ($store_reverse) ? $sql_limit - 1 : 0;
// First post on every page
// Show first post on every page if needed
if ($topic_data['topic_first_post_show'] && ($start != 0))
{
   if (!$store_reverse)
   {
      $post_list[$i] = $topic_data['topic_first_post_id'];
   }
   $i++;
}

while ($row = $db->sql_fetchrow($result))
{
   $post_list[$i] = (int) $row['post_id'];
   ($store_reverse) ? $i-- : $i++;
}
$db->sql_freeresult($result);

// For the case the user is trying to reach the second half of the topic
if ($topic_data['topic_first_post_show'] && ($start != 0) && $store_reverse)
{
   $post_list[$i] = $topic_data['topic_first_post_id'];
}

if (!sizeof($post_list))
{
   if ($sort_days)
   {
      trigger_error('NO_POSTS_TIME_FRAME');
   }
   else
   {
      trigger_error('NO_TOPIC');
   }
}
-->> http://www.phpbbguru.net/community/viewtopic.php?p=252821#p252821

Added after 41 second:
InTheWeb wrote:Приветствую.
На локалке тестирую phpBBex 1.9.1
InTheWeb
Topic author, Новичок
Avatar
Reputation: 11
With us: 10 months 28 days

Next

Return to Поддержка