Jump to content
Фай Д. Флоурайт

Обновление форума

Recommended Posts

Да-да, файлы доступны (см. выше)

Еще вопрос: как избавиться от мультицитирования? То есть если нужно из кучи цитат вставить только одну (дабы не утяжелять ответ) - есть способ?

Edited by Анико

Share this post


Link to post
Share on other sites

Форум цитирует либо несколько сообщений (Мультицитата), либо одно сообщение (Цитата), но целиком. То есть если в цитируемом сообщении есть цитаты, то и их он захватит.

Share this post


Link to post
Share on other sites

То есть если в цитируемом сообщении есть цитаты, то и их он захватит.

И эти "лишние" цитаты никак нельзя убирать из ответа?

Share this post


Link to post
Share on other sites

Довольно оригинальная картина: пока браузер держит кукисы с сайта, заходишь без проблем. Стоит скинуть настройки браузера, разлогиниться, поставить новый и т.д. - всё, пишет, что с данным логином не связана ни одна учётная запись. Так что о каком-то восстановлении пароля тут говорить не приходится. Пришлось региться заново.

Share this post


Link to post
Share on other sites

Довольно оригинальная картина: пока браузер держит кукисы с сайта, заходишь без проблем. Стоит скинуть настройки браузера, разлогиниться, поставить новый и т.д. - всё, пишет, что с данным логином не связана ни одна учётная запись. Так что о каком-то восстановлении пароля тут говорить не приходится. Пришлось региться заново.

Я на форум логинюсь с двух разных аккаунтов с 5 разных устройств. Историю на рабочем компьютере чищу постоянно и не наблюдаю каких либо проблем с входом на форум. Возможно все таки забыли пароль и логин?

Edited by Ирдириэль

Share this post


Link to post
Share on other sites

Ирди, не смеши мои тапочки. Эсли непонятно - это Элека. Ты в серьёз предполагаешь, что я пароль забыла? Я регулярно перелогинивалась из 2х разных систем своего компа, плюс другие устройства. Не говоря уже о том, что мну те же самые (естественно) логин+пасс на ДКП, где они прекрасно работают с момента разделения авторизации. Просто когда вы заменили форум я какое-то время не заходила из рабочей системы на форум. А в Хроме игровой системы авторизация была запомненна. Как только я по техническим причинам сбросила настройки Хрома игровой системы - попасть на форум больше не смогла.

У Берта было то же самое абсолютно.

То же самое было у Ивельки.

Система не знает моего логина как явления. Думаю, вы там можете посмотреть, к какому реальному ID юзера и, соответственно, логину, привязаны сообщения Элеки.

И сделай мне, плз, доступ к Псам и в офицерку, а то я только открытые разделы вижу.

P.S. И - да, я, ессно, пыталась войти и под ником Элека, на случай если при конвертации ники с логинами перепутались. Логина Элека система тоже не знает.

Share this post


Link to post
Share on other sites

Отправил ссылку для восстановления пароля на email, который был указан при регистрации.

В письме будут указан Логин.

После апгрейда форума действительно были проблемы с авторизацией, решением которых был только сброс пароля.

Share this post


Link to post
Share on other sites

Не, Ирди, скорее всего, поскольку регилась на форуме я лет 10 назад, там емейл с мэйл.ру, anka-t@mail.ru которым я давно не пользуюсь, там стояла пересылка на мой нормальный мэйл на Яндексе, но из-за неиспользования ящик сдох, а для восстановления они просят больше инфы, чем я могу предоставвить и я на него уже года 3 как забила. Я тебе на фейсбуке свой мейл скинула, вот на него можно ссылку кинуть :)

Share this post


Link to post
Share on other sites

Не совсем проблема, но... Гугл упорно продолжает сувать оповещения с форума в спам. Наверное это не важно, но может с этим что-то возможно сделать?

qYwKH5P7.png

Share this post


Link to post
Share on other sites

Если достаточно часто получать и удалять не читая письма - то в итоге гугл начинает их автоматом заносить в спам. Скорее всего это про твой случай.

Чтобы они шли во входящие - настрой фильтры для данного мыла (настройки - фильтры - создаем новый, выбираем действие "никогда не отправлять в спам").

Edited by Фай Д. Флоурайт

Share this post


Link to post
Share on other sites

Если достаточно часто получать и удалять не читая письма - то в итоге гугл начинает их автоматом заносить в спам. Скорее всего это про твой случай.

Письма отсюда изначально валились в спам. И так до сих пор, несмотря на пометку отправителя как "не спам", перенаправление их во "Входящие" и т.д. Почему не помогает? Ответ, похоже, на скрине...
Не смертельно, переживем  
:P  

Share this post


Link to post
Share on other sites

Склеил учетки, мыло поставил актуальное, чтобы могла теперь без проблем переустановить пароль.

Спасибо.

Можно небольшой совет, от человека, съевшего собаку на сложных запросах к MySQL?

Share this post


Link to post
Share on other sites

Поскольку форум сделан под стандарт HTML 5.0, то он просто может быть ещё сырым, то есть дело может и не в косяках переноса.  

Мой первый аккаунт, созданный хз сколько лет назад имеет логин Anka. После обновления скрипта, пока я не логинилась при входе, а заходила по cookies, хранящимся в браузере, всё было прекрасно. Причём, все мои сообщения отображались под ником моего перса - Элека, заданным в настройках моего аккаунта. То есть все старые данные успешно в новую базу переехали. Как только я удалила cookies, при попытке авторизации мне было заявленно, что такого логина не существует, но это явно не так, почему - уже объясняла.
При этом (ВНИМАНИЕ!) я без проблем зарегистрировала новый акк на тот же логин. И некоторое время им попользовалась - логингилась неоднократно, ибо разные системы. Как только Ирди написал, что нашёл мой старый акк и отправил мне ссылку для восстановления пароля - я уже в следующий раз не смогла залогиниться, причём, с тем же самым сообщением, об отсутствии искомого логина в базе.
Это наводит на мысль, что такое сообщение получается не только в результате отсутствия нужной записи, но и в случае её дублирования в таблице пользователей. А это не просто плохо, это - очень плохо!

Поэтому, предлагаю вам проверить эту самую очевидную версию. Заходите в phpMyAdmin, смотрите как называется там основная таблица с данными пользователей. Я для примера создала 2 таблички. Первая - правильная, как должно быть.

CREATE TABLE IF NOT EXISTS `USER_M` (
  `id` int(5) unsigned NOT NULL AUTO_INCREMENT,
  `login` varchar(25) NOT NULL DEFAULT '',
  `pass` varchar(25) NOT NULL DEFAULT '',
  `nm` varchar(25) NOT NULL DEFAULT '',
  `email` varchar(25) NOT NULL DEFAULT '',
  `tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `login` (`login`),
  UNIQUE KEY `nm` (`nm`),
  UNIQUE KEY `email` (`email`)  
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Ссылки';

Вторая - неправильная, если моё предположение верно, то так есть сейчас:

CREATE TABLE IF NOT EXISTS `USWER_I` (
  `id` int(5) unsigned NOT NULL AUTO_INCREMENT,
  `login` varchar(25) NOT NULL DEFAULT '',
  `pass` varchar(256) NOT NULL DEFAULT '',
  `nm` varchar(25) NOT NULL DEFAULT '',
  `email` varchar(25) NOT NULL DEFAULT '',
  `tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Юзеры' AUTO_INCREMENT=1;

INSERT INTO `USWER_I` (`id`, `login`, `pass`, `nm`, `email`) VALUES
(1, 'Anka', 'pass', 'Элека', 'anka-tg@ya.ru'),
(2, 'Bert', 'pass', 'Берта', 'golovan19@ya.ru'),
(3, 'Anka', 'pass', 'Элека', 'anka-tg@ya.ru'),
(4, 'Bert', 'pass', 'Берта', 'golovan19@ya.ru'),
(5, 'Anka', 'pass', 'Элека', 'anka-tg@ya.ru');

где нам критичны 4 поля: login - это, собственно логин юзера, email - понятно и nm - это ник перса, под которым отображаются записи на форуме, `tm` - дата создания записи. Посмотрите, как эти поля называются в вашей базе. Возможно, что ники персонажей в вашей базе хранятся в другой таблице, тогда смотрите пока только логин и емейл и дату.

Теперь смотрите вкладку "структура" у себя, что за ключи есть в вашей таблице? Должно быть (с учётом ника перса) 4 ключа, каждый из них уникальный.

 

Если у вас так, то можно вздохнуть с облегчением, но тогда непонятно, откуда взялись проблемы. Стоит проверить то, что написано в самом конце данного поста.

Если у вас не так, и в табличке ключей нет логина, емейла и ника, то проблему мы нашли. Как её решать в этом случае? В теории в той же вкладке в самой структуре таблицы надо для всех нужных полей, как-то, логин, емейл и имя перса выставить флаг уникальности, это кнопка с буковкой "U" в строке с данного поля структуры таблицы. Но, если записи в этом поле уже продублированы, то MySQL это делать откажется и вы получите такое сообщение:

#1062 - Duplicate entry 'Anka' for key 'login'

Естественно, первым продублированным логином совершенно не обязательно будет Anka :)
Поэтому, сначала надо избавиться от дублей, для чего нужно как минимум их вычислить. Это делается так - топчем в верхнем меню вкладку SQL и кидаем в окошко следующий запрос:

SELECT `id`, `login`, count(*) FROM `USWER_I` GROUP BY `login` HAVING count(*) > 1

Естественно, `id`, `login` вы меняете на свои названия соответствующих полей, а имя таблицы пользователей `USWER_I` - на своё.
Получаем список логинов, которые продублированы, в моей табличке это соответственно Anka и Bert

Теперь нужно вытащить список идентификаторов записей, которые продублированы:

SELECT `id`, `login`, `tm`  FROM `USWER_I` WHERE `login` IN ('Anka', 'Bert') ORDER BY `login`

Будьте внимательны при составлении списка логинов, который в скобках: должны быть перечислены все имеющиеся в ответе базы логины, по одному разу, каждый логин строго должен находиться в своих одиночных кавычках (не путать с кавычками, обрамляющими имена таблиц и полей, которые вводятся вместо буквы Ё в английской раскладке!), именно так, как в моём запросе. Получаем список дублированных записей, у меня это 1, 3, 5, 2, 4.

Теперь нам нужно удалить лишние, но сначала надо определиться, какие из них лишние...
Сначала смотрим дату: все записи, котороые переехали из оригинальной базы, имеют одну и ту же дату. Оставляем, естественно, их. Хуже, если старых записей несколько, то есть они были продублированы при переносе. Тогда нужно смотреть, к какому идентификатору привязаны сообщения на форуме. Если только к одному для этого логина - оставляем его, если к разным - то, либо где их больше, либо где они более поздние по дате, но, давайте пока не умножать сущности сверх необходимого и предоложим, что проблема именно при переносе возникла (ведь на старом форуме таких проблем не было) и либо, записи под данным ником так же продублировались, тогда их число будет совпадать и оставлять нужно первый идентификатор, удалив остальные, либо они будут отнесены только к одному идентификатору таблицы пользователей, тогда оставлять тот, что с записями. Запрос к таблице записей для этого будет выглядеть как-то так:

SELECT COUNT(*) FROM SELECT `имя_поля_с_идентификатором_записи` FROM `имя_таблицы_с_сообщениями` WHERE `имя_поля_с_идентификатором_пользователя_в таблице_записей`=`имя_поля_с_идентификатором_пользователя_в таблице_пользователей`

 

Если результат запроса 0, то добавляем в список удаляемых именно этот ID.
В результате, команда на удаление будет выглядеть так:

DELETE FROM `USWER_I` WHERE `id` IN (внутри скобок - список ID через запятую и пробел, без каких-либо кавычек)

Не забудьте использовать своё имя таблицы пользователей и имя ячейки с идентификатором.

После удаления лишних записей вы сможете выставить флаг уникальности для ячейки с логином. После этого в списке ключей должен появиться ещё один уникальный ключ с именем поля, содержащего логин.

Впрочем, если можно просто склеить данные, как было сделано для моего аккаунта, то всё становится несколько проще.

Ту же самую процедуру полностью нужно проделать для емейла и имени перса...

Если же ключи правильно были определены как уникальные, то причина, по-видимому, кроется в кодировках. Дело в том, что для работы с utf-8 необходимо кроме определения кодировки в тексте страниц и в базе ещё и задавать её в параметрах коннекта. Для этого ищите где в вашем скрипте лежит файл коннекта (искать нужно текстовое соответствие следующего вида: mysql_connect) и после следующей команды mysql_select_db должен наличествовать следующий набор команд:

mysql_query('SET NAMES utf8', $connid);
mysql_query('SET character_set_client = utf8', $connid);
mysql_query('SET character_set_connection = utf8', $connid);
mysql_query('SET character_set_results = utf8', $connid);

где $connid - имя переменной с вашим коннектом к БД, которая создаётся и к которой приравнивается результат выполнения первой команды - mysql_connect. В данном контексте utf8 - именно так, без дефиса.

Для западно-европейских языков отсутствие этих команд ничего не изменит, поэтому, если скрипт разрабатывался "там", то этих команд, скорее всего, не будет, а вот для остальных языков, включая русский, способно вызвать серьёзные проблемы. Так что настоятельно рекомендую проверить их наличие в любом случае.

forum_1.png

forum_2.png

Edited by Элека

Share this post


Link to post
Share on other sites

Ох как много текста :)

Все проще - раньше у аккаунта были логин и отображаемое имя. Теперь - только один вариант. Не знаю, почему я не упомянул об этом после апгрейда.

Edited by Фай Д. Флоурайт

Share this post


Link to post
Share on other sites

Опять про файлы.

Так файловый архив видит неавторизованный пользователь:

no.thumb.png.9433266903c13db6139a577d0e3

А так - авторизованный участник:

yes.thumb.png.34bb446b68c580cb8132e94ca5

Подкатегории не видны и недоступны

Share this post


Link to post
Share on other sites

Ох как много текста :)

Все проще - раньше у аккаунта были логин и отображаемое имя. Теперь - только один вариант. Не знаю, почему я не упомянул об этом после апгрейда.

Всё не так просто: система разрешает создавать аккаунт под уже существующим логином.

Кроме того, необходимость постоянного сброса пароля, по крайней мере у меня, никуда не делась. Если вхожу из иного браузера, чем в прошлый раз, приходится сбрасывать пароль снова. При этом, пароль всегда один и тот же.

Share this post


Link to post
Share on other sites

Еще раз повторяю. Раньше у учеток были два разных поля - логин и отображаемое имя.

При апгрейде из этих двух полей должно было остаться только одно у пользователей. Выбрал отображаемое имя. Поэтому тот аккаунт, который ранее носил логин Anka, стал Элекой.

И поэтому стало возможным зарегистрироваться под таким логином, т.к. его больше не существовало.

Со сбросом пароля недостаточно сведений для понимания ситуации. Попробуй очистить куки для форума.

Edited by Фай Д. Флоурайт

Share this post


Link to post
Share on other sites

А я опять повторяю, что после этого залогиниться невозможно, я каждый раз захожу на форум только после сброса пароля. Думаешь я сразу не пыталась зайти какЭлека вместо Anka? :)

И про кодировки я писала не просто так: пока логин и пароль были английскими, проблем не было.

Share this post


Link to post
Share on other sites

Ещё раз: кодировка данных, пересылаемых в форме, если жёстко не прописана в файле коннекта отдаётся на усмотрение браузера. А в нём могут быть и настройки по умолчанию - разные для всех, и настройки пользователя. То есть данные отправляются как Бог на душу положит. Для вставки сообщений это не важно абсолютно, т.к. в базе сопоставление прописано всегда. А вот сравнение моего ника на русском, переданное в соответствии с установками браузера и неперекодированное системой в желанный формат никогда этот ник не найдёт, что мы и наблюдаем сейчас.

Без этого такая дрянь будет у кого-то твориться постоянно:

mysql_query('SET NAMES utf8', $connid);
mysql_query('SET character_set_client = utf8', $connid);
mysql_query('SET character_set_connection = utf8_general_ci', $connid);
mysql_query('SET character_set_results = utf8', $connid);

И если скрипты используют библиотеку iconv, а, скорее всего, это так, то проверьте наличие ещё и этого:

iconv_set_encoding('internal_encoding', 'UTF-8');
iconv_set_encoding('input_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'UTF-8');

Учите мат-часть, многое станет понятнее :)

Edited by Элека

Share this post


Link to post
Share on other sites

То ты километровую простыню написала про неуникальность столбца с логинами, что просто дикость и как это вообще могло тебе прийти в голову такое.

Теперь про сопоставление кодировки у мускуля, на голубом глазу полагая, что скрипт не задает эти параметры при работе с БД - что опять же полная дикость. Разумеется, в коде движка при установлении соединения с мускулем прописываются параметры подключения.

Перестань пожалуйста держать других за идиотов. В чем здесь проблема - надо разбираться. Но без суеты глупых предположений - выглядит это просто отвратительно.

В скайп напиши мне на norrath_ru - нужно верифицировать проблему наживо.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...