Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Сообщаем об ошибках phpBB 2.0.x разработчикам

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет
Поблагодарили: 2 раза
Контактная информация:

Сообщаем об ошибках phpBB 2.0.x разработчикам

Сообщение Xpert »

В связи с тем что phpBB Group решила всерьез заняться исправлением ошибок в phpBB 2.0.x, был снова открыт багтрек на phpBB.com. Все желающие могут поделиться там с разработчиками найденными ошибками. Если вам удалось что-то обнаружить, дайте об этом знать. В случае, когда вы не слишком хорошо владеете английским, я или мои коллеги помогут вам оформить отчет об ошибке или отправят его сами.

Также выкладывайте ссылки на ваши отчеты, если таковые имеются - обсудим.

Поскольку возможно начнутся ложные попадания:
1. Ошибка должна выявляться на чистом дистрибутиве.
2. Дистрибутив должен быть последней версии (на данный момент это 2.0.22).

Моему перу на данный момент принадлежат следующие отчеты:
  • Optimizing index.php - оптимизация вывода форумов и категорий на главной странице - не просмотрен разработчиками
  • No usage of dateformat constant from language files - вроде несколько ошибочный репорт, однако в процессе разбора выяснилось что назначение одной из переменных в lang_main.php не слишком хорошо пояснено - не просмотрен разработчиками
  • Blank posts when message contains only BBCode - возможность отправки сообщений, содержащих только BBCode, а по сути пустых - не просмотрен разработчиками
  • Parsing BBcode at quoted user name - неверная обработка имени пользователя при цитировании сообщений, если оно содержит BBCode - не просмотрен разработчиками
  • Error at cat counting on index - неверный подсчет числа категорий еа главной странице. Ни на что не влияет, но имеется ошибка - исправлено разработчиками
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 2 месяца
Откуда: Москва
Контактная информация:

Сообщение Coagulant »

Присоединяюсь к Xpert.
  • ModCP Panel - Forum select order - неверная сортировка форумов в modcp.php - исправлено разработчиками (нашёл Meithar)
  • Bad SQL query in prune.php - неоптимизированный sql запрос при очистке форумов - не просмотрен разработчиками (нашёл MiksIr, fix от Егора Наклоняева)
  • Incorrect group moderator change when deleting user - ошибка при удалении пользователя, являющегося модератором группы - не просмотрен разработчиками
  • Wrong new PM count when poster deleted - неверный подсчёт количества ЛС в шапке форума, если автор ЛС удалён - не просмотрен разработчиками
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

UPDATED 3
  • Memberlist sort by 'joined' - тяк.... маленькая ошибочка в коде =) - исправлено разработчиками 2.0.18
  • Topic notify template - хм... наверное это скорее придирка... к присутствию {USERNAME} в уведомлении о новом ответе =) - но все равно исправлено разработчиками 2.0.18
  • Missing </span> for logged users - ошибка в шаблоне... при входе получается, что один </span> в меню пропущен... - исправлено разработчиками 2.0.18
  • Not needed script for privmsg popup notify... - наверное тоже больше придирка... к хреновому скрипту на всплывающее окошко о новом лс... =) - признано не багом, исправлять не будут, да и нах их... =) фиховый скрипт...
  • Error in MODs DB - ошибка в базе модов на phpBB.ком - просмотрено, вроде не исправлено, не проверял, тк моды еще не проходили проверку...
  • Double $lang['Send_email'] - двойное определение языковой переменной - исправлено разработчиками 2.0.18
  • Double $lang['Delete_post'] - двойное определение языковой переменной - исправлено разработчиками 2.0.18
  • Not working moderator access editor [PHP5] - придирка к работе с пхп5... рекомендация по исправлению не моя... найдено по-мойму всеми кто исопльзовал пхп5... =) - признано не багом, исправлять не будут
  • Not working simple access editor [PHP5] - очередная придирка к работе с пхп5... исправление мое... жалоб не видел... но у самого проблемы были =)... - признано не багом, исправлять не будут
  • Removing trailing whitespaces in includes/topic_review.php - коли начали править просто пробелы.. то пусть исправляют... - не просмотрено
  • Removing
    trailing whitespaces in template.php
    - аналогично предыдущему... - не просмотрено
  • Missed Session Keys in db_utilities.php - пропущенная таблица для восстановления бд.. в общем-то не страшно, но однако все галочки "запомнить меня" забудутся... - исправлено разработчиками CVS
  • sql_query() returns false on commit with empty sql-query - собственно то, о чем мы дискутируем ниже с phantom'ом... только ошибка пожалуй немного другая... посмотирим, что скажут... спасибо phantom'у сказано и на phpBB.ком =) - не просмотрено
Последний раз редактировалось [R: R@m$e$ :U] 21.12.2005 14:14, всего редактировалось 3 раза.
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

Xpert & Coagulant
предлогаю обновить свои посты, на соответствие текущему состоянию... =)
Others
смотрю вот Siava добавил туда свой баг... пусть и он тут отпишет =) и остальное, кто писал... Makc666 это не касается... +)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
phantom
phpBB 1.0.0
Сообщения: 6
Стаж: 18 лет 4 месяца

Сообщение phantom »

Привет.
Я разрабатываю мод Анкетирования, для добавления данных в базу(mysql4) решил использовать для sql_query второй параметр.

У меня код sql_query( '', END_TRANSACTION ) вылетает с ошибкой.

Исправил файл db/mysql4.php:
<<<<<<
else
{
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
$result = mysql_query("COMMIT", $this->db_connect_id);
}
}

if( $this->query_result )
{
=======
else
{
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
$this->query_result = mysql_query("COMMIT",
$this->db_connect_id);
}
}

if( $this->query_result )
{
>>>>>>>>
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

а можно подробней об ошибке? тк в стандартном phpBB, ошибок нету... и работает все на ура...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
phantom
phpBB 1.0.0
Сообщения: 6
Стаж: 18 лет 4 месяца

Сообщение phantom »

Код: Выделить всё

    while( list( $value_id, $value ) = @each( $question['VALUES'] ) )
    {
         [skip]
          $sql = "INSERT INTO ". QUESTION_VALUES.
                     " (question_id, title) VALUES (".
                     "$question_id_val, '$title' )";
          if ( !$db->sql_query( $sql, BEGIN_TRANSACTION ) )
          {
                message_die( GENERAL_ERROR,
                                     "Can't insert question info.",
                                     '', __LINE__, __FILE__, $sql );
          }
    }

    if ( !$db->sql_query( '', END_TRANSACTION ) )
    {
        // Это условие выполнялось всегда
        message_die( GENERAL_ERROR, "Can't commit data",
                     '', __LINE__, __FILE__, '');
    }
Возможно я неправильно понимаю смысл 2-го прараметра.

Добавлено спустя 5 минут 9 секунд:

Подробнее.
Смотрим файл db/mysql4.php

Код: Выделить всё

 if( $transaction == END_TRANSACTION && $this->in_transaction )
{
    $result = mysql_query("COMMIT", $this->db_connect_id);
}
Если второй параметр END_TRANSACTION, то выполнить команду комит.

Код: Выделить всё

 if( $this->query_result )
{
проверяем результат выполнения последней SQL комманды. Поскольку, я указал в 1-м параметре пустую строку, то выполниться должна быть только команда COMMIT, но результат ее выполнения на валидность не проверяеться, а проверяеться зн. переменной которая не определена.
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

phantom
а если все же посмотреть в функцию дальше?

Код: Выделить всё

		if( $this->query_result )
		{
-=skipped=-
		}
		else
		{
			if( $this->in_transaction )
			{
				mysql_query("ROLLBACK", $this->db_connect_id);
				$this->in_transaction = FALSE;
			}
			return false;
		}
такой вызов никогда не возвращает TRUE, если запрос пустой... посему твоя проверка не имеет смысла...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
phantom
phpBB 1.0.0
Сообщения: 6
Стаж: 18 лет 4 месяца

Сообщение phantom »

Я не проверку поставил. Я изменил сохранение результата выполнения commit. Код привел в виде cvs diff -u.

Посмотри пож. код. мне нужно в конце нескольких вызовов поставить COMMIT. ROLLBACK мне не нужен.

Если слодовать твоему совету, то зачем вообще была нужна проверка в начале sql_query на пустую SQL.

PS: Посмотри на действия mysql4/sql_query().
VovikV
phpBB 1.4.4
Сообщения: 119
Стаж: 18 лет 4 месяца

Сообщение VovikV »

А вот я с инглишем так себе дружу, просмтривать по долгу инет возможности нету. Как бы закрывать хотя бы критические ошибки?
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

VovikV
ставить последние версии... которые выкладывают тут... тема не об этом...
phantom
не... я про твою проверку...

Код: Выделить всё

    if ( !$db->sql_query( '', END_TRANSACTION ) ) 
    { 
        // Это условие выполнялось всегда 
        message_die( GENERAL_ERROR, "Can't commit data", 
                     '', __LINE__, __FILE__, ''); 
    }
эта проверка с пустым запросом не нужна...
rollback ты не получишь... вернее получишь если commit не сработает... в противном случае он не происходит... смотри внимательней на код функции... =) вызов commit производится либо вместе с запросом, либо на пустом запросе без проверки на его выполнение... тк он всегда возвращает false..
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
phantom
phpBB 1.0.0
Сообщения: 6
Стаж: 18 лет 4 месяца

Сообщение phantom »

Извени, может мы говорим о разных вещах.
Что есть:

Код: Выделить всё

 else
{
    if( $transaction == END_TRANSACTION && $this->in_transaction )
   {
      $result = mysql_query("COMMIT", $this->db_connect_id);
   }
}

....

      if( $this->query_result )
      {
-=skipped=-
      }
      else
      {
         if( $this->in_transaction )
         {
            mysql_query("ROLLBACK", $this->db_connect_id);
            $this->in_transaction = FALSE;
         }
         return false;
      } 
Смотри. $this->in_transaction==true поскольку предыдущие запросы выполнялись с флагом BEGIN_TRANSACTION.
Получаетсья поскольку $this->query_result не определено и $this->in_transaction==true, то ROLLBACK выполниться в любом случае. Да может он и выполниться после COMMIT, но как-то неправильно получаеться.

Насчте проверки. Мне нужно проверить выполнился ли COMMIT корректно, может коннект с базой пропал.
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

phantom
до чего же ты ленивый... или не хочешь понять что тебе говорят

Код: Выделить всё

	//
	// Base query method
	//
	function sql_query($query = "", $transaction = FALSE)
	{
		//
		// Remove any pre-existing queries
		//
		unset($this->query_result);

		if( $query != "" )
		{
			$this->num_queries++;
			if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
			{
				$result = mysql_query("BEGIN", $this->db_connect_id);
				if(!$result)
				{
					return false;
				}
				$this->in_transaction = TRUE;
			}

			$this->query_result = mysql_query($query, $this->db_connect_id);
		}
		else
		{
			if( $transaction == END_TRANSACTION && $this->in_transaction )
			{
				$result = mysql_query("COMMIT", $this->db_connect_id);
			}
		}

		if( $this->query_result )
		{
			unset($this->row[$this->query_result]);
			unset($this->rowset[$this->query_result]);

			if( $transaction == END_TRANSACTION && $this->in_transaction )
			{
				$this->in_transaction = FALSE;

				if ( !mysql_query("COMMIT", $this->db_connect_id) )
				{
					mysql_query("ROLLBACK", $this->db_connect_id);
					return false;
				}
			}
			
			return $this->query_result;
		}
		else
		{
			if( $this->in_transaction )
			{
				mysql_query("ROLLBACK", $this->db_connect_id);
				$this->in_transaction = FALSE;
			}
			return false;
		}
	}
вот вся функция...
сначала идет проверка, есть ли запрос

Код: Выделить всё

if( $query != "" )
..
else
{
	if( $transaction == END_TRANSACTION && $this->in_transaction )
	{
		$result = mysql_query("COMMIT", $this->db_connect_id);
	}
}
и если нету, то проверяем пытаемся ли выполнить END_TRANSACTION, он выполняется, ТОЛЬКО если был выполнен BEGIN_TRANSACTION...
следующим этапом идет проверка выполнился ли запрос, но именно запрос, а не COMMIT!

Код: Выделить всё

if( $this->query_result )
...
else
{
	if( $this->in_transaction )
	{
		mysql_query("ROLLBACK", $this->db_connect_id);
		$this->in_transaction = FALSE;
	}
	return false;
}
и если он не выполнился, то мы проверяем, выполнился ли COMMIT, проверка идет путем проверки завершили ли мы BEGIN_TRANSACTION или нет... и если нет, то выполняется ROLLBACK, в ином случае данное место игнорируется... единственное, что тут можно исправить так это

Код: Выделить всё

	return false;
заменить на

Код: Выделить всё

	return true;
а ты же своей заменой предпоследнюю проверку

Код: Выделить всё

if( $this->query_result )
{
...
}
else
{
... ROLLBACK ...
}
заставляешь выполнится как для запроса... в итоге ты получаешь данный код...

Код: Выделить всё

			if( $transaction == END_TRANSACTION && $this->in_transaction )
			{
				$this->in_transaction = FALSE;

				if ( !mysql_query("COMMIT", $this->db_connect_id) )
				{
					mysql_query("ROLLBACK", $this->db_connect_id);
					return false;
				}
			}
а это приводит к тому, что ты пытаешься выполнить второй COMMIT, но я не уверен, что он выполнится, и следовательно выполняется ROLLBACK...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
phantom
phpBB 1.0.0
Сообщения: 6
Стаж: 18 лет 4 месяца

Сообщение phantom »

Вобщем я понял к чему ту клониш. Я сообщил, о том что я считаю ошибкой.
Если ты нет, то просто удали все посты.

ЗЫ: Давай без взаимных оскорблений. :evil:
ЗЫЗЫ: Попробуй просто вникнуть в мой посты.
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

phantom
да тебе просто тоже стоило вникнуть в суть проблемы =) а я в суть твоих постов... сори, если обидел... мы друг друга не допоняли, имхо... в общем-то действительно такая проблема есть, но решается она имхо, чуть иначе... =)
о самом факте, сообщил разработчикам, и тебе спасибо сказал =)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Закрыто

Вернуться в «Поддержка phpBB 2.0.x»