Master Опубликовано 16 Марта 2007 Жалоба Поделиться Опубликовано 16 Марта 2007 Временно прикрепляю тему, так как баг у всех в 2.2.2 версии.Выполнить sql запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0'; Архар . 6.12.2007В версии 2.2.2 после установки этого фикса при выполнении действий в последовательности, указанной в сообщенииhttp://www.ibresource.ru/forums/index.php?...st&p=300053проскакивает число "255 сообщений". Почему это происходит, сказано здесь: http://www.ibresource.ru/forums/index.php?...st&p=300034 Решение../sources/lib/func_msg.phpнайти $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=new_msg-{$cnt}, show_popup=0", 'where' => "id={$mid}" ) ); $this->ipsclass->DB->simple_exec();заменить на $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=new_msg-{$cnt}, show_popup=0", 'where' => "id={$mid} AND new_msg>0" ) ); $this->ipsclass->DB->simple_exec(); chempion отреагировал на это 1 Ссылка на комментарий Поделиться на других сайтах Прочее
0 Kowex Опубликовано 7 Июня 2007 Жалоба Поделиться Опубликовано 7 Июня 2007 Временно прикрепляю тему, так как баг у всех в 2.2.2 версии.Выполнить sql запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0'; Запрос прошёл успешно, но теперь когда удаляешь не прочитанное сообщение новых сообщений 255 Ссылка на комментарий Поделиться на других сайтах Прочее
0 tj.anton Опубликовано 18 Июня 2007 Жалоба Поделиться Опубликовано 18 Июня 2007 Временно прикрепляю тему, так как баг у всех в 2.2.2 версии.Выполнить sql запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0'; Здравствуйте, у меня такой вопрос, выполнил SQL запрос, теперь у пользователей иногда появляется 255 сообщений, вопрос: это нормально ? Ссылка на комментарий Поделиться на других сайтах Прочее
0 SomehaiN Опубликовано 18 Июня 2007 Жалоба Поделиться Опубликовано 18 Июня 2007 Читайте с #14 сообщения и ниже. Ссылка на комментарий Поделиться на других сайтах Прочее
0 SergOZ Опубликовано 27 Июня 2007 Жалоба Поделиться Опубликовано 27 Июня 2007 забавно, у всех почему то стало по 255 сообщений написано ) Ссылка на комментарий Поделиться на других сайтах Прочее
0 Borland_delphi_6 Опубликовано 28 Июня 2007 Жалоба Поделиться Опубликовано 28 Июня 2007 Подскажите, что делать с проблемой "255"? Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 28 Июня 2007 Жалоба Поделиться Опубликовано 28 Июня 2007 апдейт сет 0 ....наверно больше не повторится, так что должно прокатить Ссылка на комментарий Поделиться на других сайтах Прочее
0 SergOZ Опубликовано 28 Июня 2007 Жалоба Поделиться Опубликовано 28 Июня 2007 апдейт сет 0 ....наверно больше не повторится, так что должно прокатить Повторится Ссылка на комментарий Поделиться на других сайтах Прочее
0 molodec Опубликовано 22 Июля 2007 Жалоба Поделиться Опубликовано 22 Июля 2007 помогите Временно прикрепляю тему, так как баг у всех в 2.2.2 версии.Выполнить sql запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0';не помогает сообшения всё рввно не отпраляются Ссылка на комментарий Поделиться на других сайтах Прочее
0 weirdsar Опубликовано 27 Июля 2007 Жалоба Поделиться Опубликовано 27 Июля 2007 всё Ссылка на комментарий Поделиться на других сайтах Прочее
0 Spy Опубликовано 15 Сентября 2007 Жалоба Поделиться Опубликовано 15 Сентября 2007 Подскажите, что делать с проблемой "255"?Ответа так и нет? Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 15 Сентября 2007 Жалоба Поделиться Опубликовано 15 Сентября 2007 выше уже написали почему.Или потому что у кого-то было отрицительное число или потому что было у кого-то больше 99 сообщений новых. СделайтеUPDATE ibf_members SET new_msg=0 WHERE new_msg < 0 or new_msg = 255 Ссылка на комментарий Поделиться на других сайтах Прочее
0 NikolayV Опубликовано 2 Ноября 2007 Жалоба Поделиться Опубликовано 2 Ноября 2007 Запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0'Успешно выполнен. Но не помогает, всё равно белая страница! Ссылка на комментарий Поделиться на других сайтах Прочее
0 Sannis Опубликовано 2 Ноября 2007 Жалоба Поделиться Опубликовано 2 Ноября 2007 А кто сказал что это помогает от белой страницы? Если белая страница в ПМ, то скорее всего недостаток памяти. смотрите тему в форуме FAQ про это. Ссылка на комментарий Поделиться на других сайтах Прочее
0 WARpholomey Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 Здравствуйте все!В ручную эту ошибку с 255 править можно... Но, почему она возникает? Вот структура:new_msg tinyint(3) UNSIGNED NULL = Да Default = 0 А расклад стандартный: У пользователя было 0 сообщений, пришло 1.Пользователь удаляет его - сообщений 255.Обновляет страницу - сообщений 0. Никто не знает где копать? Я PHP знаю, так что достаточно сказать где искать... Ибо в коде форума довольно сложно разбираться. Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 сообщений 255тут надо знать не пхп, а дополнительные коды, с помощью которых в машине идет представление отрицательных чиселк сожалению, решение дать параметр "беззнаковый" к этой ячейке от глюков не спасаетоно спасает от глюка "-1", но делает глюк "255" почему такпотому знаковое отрицательное число -1 в машине представляется как11111111 (это 1 байт - 8 бит)если сделать инверсию этого числа получим00000000чтобы получить реальное число из дополнительного кода, надо к полученному прибавить 100000001 значит мы получили "-1" но если мы зададим параметр unsignedто11111111 = 1*128+1*64+1*32+1*16+1*8+1*4+1*2+1*1=255 почему unsigned?по правилу представления отрицательных чисел, если в самом левом бите еденица, то число отрицательное и компьютер переводит его из доп кода и мы видим -1таким образом в 1 байте можно представить числалибо от 0 до 255либо от -128 до 127 (точно нижнюю границу не помню) так почему 0 - 1 = 11111111 ?потому что 11111111+1=100000000а 9-ая 1 (первая слева) переходит в следующий байта в текущем остается 00000000 = 0 Ссылка на комментарий Поделиться на других сайтах Прочее
0 WARpholomey Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 Arhar, спасибо! По крайней мере теперь понятно из-за чего... При удалении сообщения если их и так ноль из нуля вычитается единица.Если в базе не указано "unsigned" то получается -1, если указано - 255.Это получается из-за того что если перевести -1 из десятичной системы в бинарную получится 11111111, а при обратном переводе - 255. В каком файле находятся функции работы с ПМ? Может перед тем как вычитать заставить его проверить что в базе не ноль... Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 в принципе проблема появляется когда юзер удаляет сам свое сообщение? тогда решение можно попробовать такое ./sources/action_public/messenger.php найти (в function delete) //----------------------------------------- // Delete it from the DB //----------------------------------------- $this->msglib->delete_messages( $this->ipsclass->input['MSID'], $this->ipsclass->member['id'] ); $this->msglib->rebuild_dir_count( $this->ipsclass->member['id'], $this->ipsclass->member['vdirs'], $this->lib->vid, $this->ipsclass->member['dir_data'][ $this->lib->vid ]['count'] - 1, 'save', "msg_total=msg_total-1" ); заменить на //----------------------------------------- // Delete it from the DB //----------------------------------------- $this->msglib->delete_messages( $this->ipsclass->input['MSID'], $this->ipsclass->member['id'] ); $extra = ($this->ipsclass->member['msg_total']-1<0)?"":"msg_total=msg_total-1"; $this->msglib->rebuild_dir_count( $this->ipsclass->member['id'], $this->ipsclass->member['vdirs'], $this->lib->vid, $this->ipsclass->member['dir_data'][ $this->lib->vid ]['count'] - 1, 'save', $extra ); там еще есть одно место, где уменьшается счетчик, это при удалении с использованием "галочки"надо найти способ имитировать эту ошибку, тогда можно точно будет установить ее источник в том же файле найти $this->msglib->rebuild_dir_count( $this->ipsclass->member['id'], $this->ipsclass->member['vdirs'], $this->lib->vid, $this->ipsclass->member['dir_data'][ $this->lib->vid ]['count'] - $affected_ids, 'save', "msg_total=msg_total-$affected_ids" );заменить на $extra = ($this->ipsclass->member['msg_total']-$affected_ids<0)?"msg_total=0":"msg_total=msg_total-$affected_ids"; $this->msglib->rebuild_dir_count( $this->ipsclass->member['id'], $this->ipsclass->member['vdirs'], $this->lib->vid, $this->ipsclass->member['dir_data'][ $this->lib->vid ]['count'] - $affected_ids, 'save', $extra ); Ссылка на комментарий Поделиться на других сайтах Прочее
0 WARpholomey Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 Мне пожаловался пользователь, сказал что "так и так", ошибку я повторил за пол минуты: 1. Личных сообщений: 0 - ссылка вверху страницы, нажал. (Папка с сообщениями пустая вобще) 2. Новое личное сообщение -> Написал письмо самому себе, текст банальное "123", заголовок - то же "123" 3. Отправил, дальше стандартная страница переадресации "Ваше сообщение с заголовком «123» успешно отправлено..." 4. Опять нахожусь в Личных Сообщениях. "Личных сообщений: 1"Если сообщение сначала прочитать - почему-то ошибка не повторяется, или я не уловил связи. 5. Выделяю сообщение галочкой, жму кнопку "Удалить" 6. Страница обновляется и я вижу - пустая папка и текст вверху форума - "Личных сообщений: 255", обновляю страницу и всё нормально - "Личных сообщений: 0" Затем создал ещё одного пользователя, отправил сообщение ему.Начиная с пункта 5 всё повторяется. Я об ошибке, на в абсолютно новом форуме, и узнал потому что написал ЛС пользователю, и он сказал мне что вот такое дело. Проверка поля msg_total не помогла... Да и почему msg_total? Не new_msg разве? Ведь вверху форума рядом со словами "Личных сообщений" указывается количество новых, а не всех? Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 может быть, надо смотреть кодсейчас пойду имитировать ошибку так, а галочка "сохранить в отправленных" стоит? Ссылка на комментарий Поделиться на других сайтах Прочее
0 WARpholomey Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 Версия форума - IPB 2.2.2, русский...Нет, "Сохранить в отправленных" не стоит. Если галочку поставить ошибка сохраняется... Более того - после удаления копии из "Отправленных" вместо 0 снова проскакивает 255. Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 знаешь что попробуй ... а, нет, вру это я смотрю 231 5 сек все равно никак не получается имитировать ошибку такой вопроскогда заходишь в папку с сообщениями, но не открываешь их, счетчик сбрасывается? Ссылка на комментарий Поделиться на других сайтах Прочее
0 WARpholomey Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 Да, если я захожу в папку где есть новые сообщения, то счётчик сбрасывается даже если я их не читал. Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 6 Января 2008 Жалоба Поделиться Опубликовано 6 Января 2008 давай в icq 253969361 пробуй./sources/lib/func_msg.phpнайти $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=new_msg-{$cnt}, show_popup=0", 'where' => "id={$mid}" ) ); $this->ipsclass->DB->simple_exec();заменить $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=new_msg-{$cnt}, show_popup=0", 'where' => "id={$mid} AND new_msg-{$cnt}>=1" ) ); $this->ipsclass->DB->simple_exec(); $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=0, show_popup=0", 'where' => "id={$mid} AND new_msg-{$cnt}<1" ) ); $this->ipsclass->DB->simple_exec(); конечный вариант решения в первом сообщении темытакже если хотите, чтобы сообщение оставалось в статусе непрочитанного не до тех пор, пока откроется папка с новыми сообщениями, а до тех пор, пока не откроется само сообщение, в файле./sources/action_public/messenger.phpнайти и удалить/закомментировать if ($this->ipsclass->member['current_id'] == 'in' and $this->ipsclass->member['new_msg'] > 0 ) { $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => 'new_msg=0', 'where' => 'id='.$this->ipsclass->member['id'] ) ); $this->ipsclass->DB->simple_exec(); } Ссылка на комментарий Поделиться на других сайтах Прочее
0 2rough4u Опубликовано 14 Апреля 2008 Жалоба Поделиться Опубликовано 14 Апреля 2008 $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "new_msg=new_msg-{$cnt}, show_popup=0", 'where' => "id={$mid} AND new_msg>0" ) ); $this->ipsclass->DB->simple_exec();Тоже сначала так хотел сделать, потом подумал, что даже при new_msg>0 кол-во удаляемых непрочитанных сообщений ($cnt) может быть больше текущего new_msg и, опять же, такой запрос загонит его в минус Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 14 Апреля 2008 Жалоба Поделиться Опубликовано 14 Апреля 2008 Если ты выполнишь то что написано в начале топика то в минус не загонит никак. Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
Master
Временно прикрепляю тему, так как баг у всех в 2.2.2 версии.
Выполнить sql запрос:
Архар . 6.12.2007
В версии 2.2.2 после установки этого фикса при выполнении действий в последовательности, указанной в сообщении
http://www.ibresource.ru/forums/index.php?...st&p=300053
проскакивает число "255 сообщений". Почему это происходит, сказано здесь: http://www.ibresource.ru/forums/index.php?...st&p=300034
Решение.
./sources/lib/func_msg.php
найти
заменить на
Ссылка на комментарий
Поделиться на других сайтах
Лучшие авторы в этом вопросе
8
6
6
5
Дни популярности
6 янв
10
18 мар
4
28 июн
3
16 апр
3
Лучшие авторы в этом вопросе
Song 8 публикаций
Arhar 6 публикаций
4itos 6 публикаций
WARpholomey 5 публикаций
Дни популярности
6 янв 2008
10 публикаций
18 мар 2007
4 публикации
28 июн 2007
3 публикации
16 апр 2007
3 публикации
Популярные сообщения
Master
Временно прикрепляю тему, так как баг у всех в 2.2.2 версии. Выполнить sql запрос: ALTER TABLE `ibf_members` CHANGE `new_msg` `new_msg` TINYINT( 2 ) UNSIGNED NULL DEFAULT '0'; Архар . 6.12
SomehaiN
Для: IIIIArtesIIII, Читаем: FAQ по вопросам
Song
У кого-то больше 99 новых писем
52 ответа на этот вопрос
Рекомендуемые сообщения