Ошибка вывода профиля для ника, содержащего заглавные буквы

Обновился до ревизии 222 от сегодня. И совершенно случайно попытался зайти на страничку пользователя Fanta. В результате чего увидел ошибку 404. Для пользователей с никами, не содержащими заглавных букв, странички отображаются нормально. В чём может быть проблема?

upd. Не работает не только .../profile/Fanta/, но и .../my/Fanta/. (

19 комментариев

avatar
Возможно у вас как-то криво встало обновление SVN, возможно что-то в настройках сервера — потому что здесь например профиль гражданина Copypast открывается без ошибок. У меня тоже на ревизии 222 все нормально.
avatar
Что значит «криво»? :)

Я просто удалил сайт (т.к. он валяется без дела уже 4 месяца, ждет обновления LS 0.3 с новым дизом) и залил все заново. Прописал все настройки в конфигах, создал пустую базу, выполнил патч базы. Забил руками старые данные и юзеров.

Так что «криво» встать релиз не мог. Возможно, что-то у хостера не так? firstvds.ru
avatar
чувствительность к регистру?
avatar
У кого? :)
avatar
Зарегистрировал нового юзера — PeTTiNg… та же самая петрушка… Что делать? Подскажите хоть, где в коде посмотреть, в каких файлах копаться?
avatar
а что будет если на фтп просто создать папку содержащую такие буквы (не имеющего ничего общего с движком), а в нее положить фаил любой, тоже из заглавных букв в имени и попробывать его скачать?
avatar
avatar
да, странный баг.
а .htaccess точно родным перезаписан?
avatar
<code>AddDefaultCharset UTF-8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php</code>
avatar
Насколько я понимаю — проблема не в выводе, а в поиске данных юзера в базе. Попробовал сейчас в phpMyAdmin поиск по "=" и «LIKE»: в обоих случаях PeTTiNg нашелся… (((
Как бы в движке найти место, где происходит поиск юзера по нику…
avatar
Нашел. GetUserByLogin. Легче не стало… (((
avatar
Уже голову сломал со всякими ROUTE_PAGE_PROFILE, getUserWebPath, getLogin, _aData['user_login']… не могу найти где именно зарыта собака…
avatar
не отрабатывает регулярное выражение
<code>$this->AddEventPreg('/^[\w\-\_]+$/i','/^(whois)?$/i','EventWhois');</code>

попробуй его заменить на
<code>$this->AddEventPreg('/^[a-zA-Z\-\_]+$/i','/^(whois)?$/i','EventWhois');</code>
  • ort
  • 0
avatar
Поменял. Не помогло. (

<code>protected function RegisterEvent() {                        
                //$this->AddEventPreg('/^[\w\-\_]+$/i','/^(whois)?$/i','EventWhois');
                $this->AddEventPreg('/^[a-zA-Z\-\_]+$/i','/^(whois)?$/i','EventWhois');
                //$this->AddEventPreg('/^[\w\-\_]+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite');
                $this->AddEventPreg('/^[a-zA-Z\-\_]+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite');
        }</code>
avatar
Засада вот где:
<code>
/**
* Проверяем есть ли такой юзер
*/
if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) {
       echo 'БОРОДА' . $sUserLogin;
       return parent::EventNotFound();
}</code>

Хотя $sUserLogin содержит то, что нужно.
avatar
включи в конфиге логирование СКЛ запросов и посмотри запрос на юзера
avatar
Переменная $this->oUserProfile в выражении «if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin)))» ПУСТАЯ! Думаю, так не должно быть. А "$this->User_GetUserByLogin($sUserLogin)" отрабатывает корректно — возвращает массив с данными, который видно через «print_r($this->User_GetUserByLogin($sUserLogin))».
avatar
Сорри. Не отрабатывает!!!

<code>[2009-03-10 22:40:55][59083][DEBUG][SELECT 
                                u.*,
                                IF(uv.user_id IS NULL,0,1) as user_is_vote,
                                uv.vote_delta as user_vote_delta,
                                IF(uf.user_id IS NULL,0,1) as user_is_frend 
                        FROM 
                                cook2_user as u
                                
                                LEFT JOIN (
                                                SELECT
                                                        user_id,
                                                        vote_delta                                                                                                
                                                FROM cook2_user_vote 
                                                WHERE user_voter_id = 45
                                        ) AS uv ON uv.user_id = u.user_id
                                        
                                LEFT JOIN (
                                                SELECT
                                                        user_id,
                                                        user_frend_id                                                                                                
                                                FROM cook2_friend 
                                                WHERE user_id = 45
                                        ) AS uf ON uf.user_frend_id = u.user_id
                                
                        WHERE 
                                u.user_login = '<b>petting</b>' ]
[2009-03-10 22:40:55][59083][DEBUG][  -- 19 ms; returned 0 row(s)]</code>


Что-то где-то меняет PeTTiNg на petting
avatar
В User.mapper.class.php убрал strtolower и заработало:

<code>if($aRow=$this->oDb->selectRow($sql,$iCurrentUserId,$iCurrentUserId,strtolower($sLogin))){</code>

Но обнаружилась новая проблема:
.../profile/a592153 :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.