News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

Не отправляються личные сообщения

Started by kotid, November 01, 2006, 12:08:47 PM

Previous topic - Next topic

kotid

Доброго времени суток!
Поставил в локалке форум SMF1.0.8. Нормально всё работает кроме отправки личных сообщений. Не находит пользователей, у которых ник начинаеться с большой буквы. Задаешь адресата правильно, пробовал через поиск - всё равно автоматом подставляет с маленькой буквы и ругаеться мол "нет такого пользователя"

AleksBas

Такая же ситуация. Версия форума 1.1.1. Проблема появилась после перехода на кодировку UTF-8. До этого все работало отлично.

NEWESTA

А что именно находилось в сообщении?ЕСли не секрет такой.Может он на само сообщение так реагирует.

AleksBas

В сообщении текст простой. Так же вход на форум стал чувствителен к регистру в логине.

Нашел в интернете такое:

"Если не задан атрибут чувствительности к регистру BINARY, то величины VARCHAR сортируются и сравниваются как независимые от регистра. "

Вопрос, где этот атрибут находится?

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

AleksBas

Нашел сам, проблеммы была в том:
В резервной копии сделаной самим движком нет информации о типах даных которые находятся в таблицах. По этому скрипты востановления не смогли закачать даные. И я воспользовался MYPHPADMINon. Там всю базу смог востановить только через SQL запросы. А он их обрабатывает, конвертирует даные и присваевает атрибуты таблицам как указано по умолчанию. В моем случае это был UTF8_binary. Соответствено поиск а атрибутом binary производится с учетом регистра, движок форума на это не расчитан.
Решение было такое, опять сделать базу даных через резервное копирование в движке. Она опять в текстовом виде и без типов даных. Поменять в myphpadmine по умолчанию на UFT-8_unicode и по частям SQL запросами импортировать базу даных на сервер.

risla

А у меня такая проблема возникла и без перехода на UTF-8. Заглавные буквы меняются и сообщение не отправляется.

Diestro

Проблему решил сам, поковырявшись в исходниках. База в кодировке cp_1251_general_ci. Не бинари, но тем не менее выборка с нее через phpmyadmin не было регистронезависимая.
Проблему решил:
/Sources/Subs-Auth.php
в функции
findMembers
изменил запрос на:

// Search by username, display name, and email address.
$request = db_query("
SELECT ID_MEMBER, memberName, realName, emailAddress, hideEmail
FROM {$db_prefix}members
WHERE (LOWER(memberName) $comparison '" . implode("' OR LOWER(memberName) $comparison '", $names) . "'
OR LOWER(realName) $comparison '" . implode("' OR LOWER(realName) $comparison '", $names) . "'$email_condition)
" . ($buddies_only ? 'AND ID_MEMBER IN (' . implode(', ', $user_info['buddies']) . ')' : '') . "
AND is_activated IN (1, 11)" . ($max == null ? '' : "
LIMIT " . (int) $max), __FILE__, __LINE__);


Попросту говоря добавил функцию LOWER к запросу, принудительно переводящую в нижний регистр результат запроса

risla

2 Diestro
Немыслимое спасибо, друг!!!

Advertisement: