News:

Want to get involved in developing SMF, then why not lend a hand on our github!

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: