ООО ЭкоЮнит
FAQSearchMemberlistUsergroupsFilesLog inRegisterГлавная
printer-friendly view
 
AuthorMessage
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

У меня стоит мод Username BBCode - Name, ID And Level Indication (взят с phpbbguru.net/.....c6147.html ). Обнаружилось, что если между тегами находится текст с символом ' (одинарная кавычка), то происходит ошибка SQL запроса, и генерация страницы прерывается.
На этом форуме ошибки нет.

Проблема по видимому в этом запросе:
Code:
    $user = intval($text);
    $sql = 'SELECT username, user_id, user_level
        FROM ' . USERS_TABLE . '
        WHERE user_id = ' . $user . "
            OR username = '" . $text . "'";
    if ( !($result = $db->sql_query($sql)) )
    {
        message_die(GENERAL_ERROR, "Could not obtain user information.", '', __LINE__, __FILE__, $sql);
    }

Sergey, подскажите пожалуйста что надо исправить?

Добавлено спустя 11 минут 36 секунд:

Получаю такое сообщение:
Code:
Could not obtain user information.

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hera'' at line 4

SELECT username, user_id, user_level FROM phpbb_users WHERE user_id = 0 OR username = 'S'hera'

Line : 1897
File : bbcode.php
Line : 1897 это строка из предыдущей цитаты "message_die(GENERAL_ERROR, "Could not obtain user information.", '', __LINE__, __FILE__, $sql); "
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Элементарно.
Code:
            OR username = '" . $text . "'";

Replace With
Code:
            OR username = '" . str_replace("\'", "''", $text) . "'";

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

Добавлено спустя 11 минут 14 секунд:

У меня по другому организовано. name_BBCode() с кэшированием данных и раскраской ника в соответствии с рангом или уровнем пользователя.
Code:

function name_BBCode($text) 
{ 
    global $db, $lang, $phpEx, $list_user_data; 
    global $userdata;
    if (is_numeric($text))
    {
        $user = intval($text);
    }
    else
    {
        $user = 0;
    }
    if (intval($text) == 0)
    {
        //for compatible Time & Date in Quote mod 
        $start_pos_whitespacer = strpos($text, ' @ ');
        if ($start_pos_whitespacer)
        {
            $text = substr($text, 0, $start_pos_whitespacer);
        }
        //for compatible Time & Date in Quote mod 
        $text = preg_replace('#\s+#', ' ', trim($text));        
    }
    if (!is_array($list_user_data))
    {
        $list_user_data = array();
    }

    if ( is_numeric($text) && intval($text) === $userdata['user_id'] )
    {
        $name = $userdata;
    }
    else if ( $text == $userdata['username'] )
    {
        $name = $userdata;
    }
    else if (isset($list_user_data[$text]))
    {
        $name = $list_user_data[$text];
    }
    else
    {
        $sql = 'SELECT *
            FROM ' . USERS_TABLE . '
            WHERE user_id = ' . $user . "
                OR username = '" . str_replace("\'", "''", $text) . "' LIMIT 1";
        if ( !($result = $db->sql_query($sql)) )
        {
            message_die(GENERAL_ERROR, "Could not obtain user information.", '', __LINE__, __FILE__, $sql);
        }
        $name = $db->sql_fetchrow($result);
        $db->sql_freeresult($result);
        $list_user_data[$text] = $name;
    }
    $user_id = $name['user_id'];
    $username = $name['username'];
    $user_level = $name['user_level'];

    if ($user_id == ANONYMOUS)
    {
        return "<b>$text</b>";// [' . $lang['User_Not_Registered'] . ']'; 
    }
    else if ( !$name )
    {
        return "<b>$text</b>";// [' . $lang['User_Not_Find'] . ']';
    }
    $style_color = get_user_style_color($name);
    $color_username = $name['username'];
    $color_username = ($user_level == USER) ? '<b>' . $color_username . '</b>': $color_username;
    $user_url = POST_USERS_URL;
    return ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&$user_url=$user_id") . '" target="_blank" ' . $style_color . ' />' . $color_username . '</a>'; 
}


Функцию get_user_style_color() можно вставить или в конец includes/function.php или в bbcode.php

Code:

function get_user_style_color(&$udata)
{
    global $theme, $id_color, $user_group_color;
    $style_color = '';
    if ( $udata['user_level'] == ADMIN )
    {
        $style_color = 'style="color:#' . (isset($theme['color_admin']) ? $theme['color_admin'] : $theme['fontcolor3']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_level'] == MOD )
    {
        $style_color = 'style="color:#' . (isset($theme['color_mod']) ? $theme['color_mod'] : $theme['fontcolor2']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_level'] == MAIN_MOD || $udata['user_level'] == GLOGAL_MOD)
    {
        $style_color = 'style="color:#' . (isset($theme['color_main_mod']) ? $theme['color_main_mod'] : $theme['fontcolor98']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_level'] == SUPPORT )
    {
        $style_color = 'style="color:#' . (isset($theme['color_support']) ? $theme['color_support'] : $theme['fontcolor4']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_level'] == VIP )
    {
        $style_color = 'style="color:#' . (isset($theme['color_vip']) ? $theme['color_vip'] : $theme['fontcolor5']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_level'] == BOT )
    {
        $style_color = 'style="color:#' . (isset($theme['color_bot']) ? $theme['color_bot'] : $theme['fontcolor99']) . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $user_group_color[$udata['user_id']] )
    {
        $style_color = 'style="color:' . $user_group_color[$udata['user_id']] . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else if ( $udata['user_whosonline_color'] )
    {
        $style_color = 'style="color:' . $id_color[$udata['user_whosonline_color']] . '"';
        $udata['username'] = "<b $style_color>" . $udata['username'] . '</b>';
    }
    else
    {
        $style_color = (isset($theme['color_user']) ? 'style="color:#' . $theme['color_user'] . '"' : '');
    }

    return ' ' . $style_color;
}
Back to topOffline View user's profile Visit poster's website Skype Name
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

От вставки кода
Code:
OR username = '" . str_replace("\'", "''", $text) . "'";
ничего не изменилось.

Не важно, сделаю как у вас

_________________
Архив модов с phpbb.com phpbb2refugees.com......php?t=241
Архив модов с phpbb2.de yadi.sk/d/XP53sFs.....93Q36Ap , drive.google.com/.....49aHH-NdbR
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Как это ничего не изменилось? Ты заменил или вставил ещё раз?
Попробуй str_replace("\'", "''", $text) заменить на addslashes($text)

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline This post has 1 review(s) View user's profile Visit poster's website Skype Name
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

После замены str_replace("\'", "''", $text) на addslashes($text) - заработало. Спасибо за решение проблемы. Позже попробую разобраться почему так происходит.

_________________
Архив модов с phpbb.com phpbb2refugees.com......php?t=241
Архив модов с phpbb2.de yadi.sk/d/XP53sFs.....93Q36Ap , drive.google.com/.....49aHH-NdbR
Back to topOffline View user's profile
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

В моде обнаружен глюк.

Если текст заключенный между тегами [n ] и [/n ] начинается с цифры соответствующей ИД пользователя, то высвечивается ник этого пользователя. Воспроизводится на этом форуме. Например:
Code:
[n]2произвольные символы[/n]
высвечивает ник с ИД № 2 - 2произвольные символы, мы вместо 2произвольные символы видим Sergey
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Это не глюк, это фича. Здесь уже не воспроизводится.
Code:
#
#-----[ OPEN ]------------------------------------------
#
includes/bbcode.php

#
#-----[ FIND ]------------------------------------------
#in function name_BBCode()
#

    $user = intval($text);

#
#-----[ REPLACE WITH ]------------------------------------------
#
    if (is_numeric($text))
    {
        $user = intval($text);
    }
    else
    {
        $user = 0;
    }
 

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

Спасибо Sergey !
Если стоит кэширование данных из предыдущего поста ( forum.aeroion.ru/v.....=2257#2257 ), то надо дополнительно
Code:
найти
if ( intval($text) == $userdata['user_id'] ) 

заменить на
if ( is_numeric($text) && intval($text) === $userdata['user_id'] )
Back to topOffline View user's profile
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

Аддон для "Username BBCode - Name, ID And Level Indication" и mod http header. Не показывает ботам bbcode ссылки на профиль в никах, тем самым уменьшает нагрузку на сервер.
Addon for "Username BBCode - Name, ID And Level Indication" and mod http header . No shows bots the bbcode link to a profile in nicknames, thus reducing the load on the server.


Download bots_do_not_show_a_username_bbcode_name.txt (1.41 KB). Added/Updated Sun 15 Mar, 2015 19:12. Downloaded 5 Time(s).

Back to topOffline View user's profile
miracle

Забанен


Joined: 02 May 2014
Show/Hide

а не проще ли в роботс закрыть ссылки на профили пользователей. ведь проще простого?!
Back to top View user's profile
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

Аддон убирает при "просмотре" форума поисковыми ботами SQL запросы нужные для генерации в viewtopic ссылок на профили пользователей.

Добавлено спустя 46 секунд:

Закрытие в роботс ссылок на профили в аддоне тоже есть.
miracle, вы даже аддон не смотрели.
Back to topOffline View user's profile
miracle

Забанен


Joined: 02 May 2014
Show/Hide

мой друг, нет не смотрел, судил только по этой фразе
vlad77 @ Sun 15 Mar, 2015 19:13 wrote: (View Post)
Show


не совсем понял что такое ББКОД ССЫЛКИ НА ПРОФИЛЬ, читал как ССЫЛКУ НА ПРОФИЛЬ, но советую ее закрыть через роботс, или но индекс, или нофоллов.

может я не прав, но пока понимаю так!
Back to top View user's profile
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

vlad77 @ Tue 12 Oct, 2010 00:51 wrote: (View Post)
Show
в 1м сообщении темы написано что такое ббкод ссылка на профиль.
Аддон вы не смотрели, тему тоже не смотрели.

_________________
Архив модов с phpbb.com phpbb2refugees.com......php?t=241
Архив модов с phpbb2.de yadi.sk/d/XP53sFs.....93Q36Ap , drive.google.com/.....49aHH-NdbR
Back to topOffline View user's profile
vlad77 Gender:Male

Модератор


Joined: 15 Mar 2008
Show/Hide

Название мода: Mod Cache Users List
Автор: vlad77
Описание мода: Этот мод является аддоном для Username BBCode - Name, ID And Level Indication и Мод Change bbcode quote with Gender mod. Кэширует в файл список пользователей.
Версия мода: 1.0.0

Title: Mod Cache Users List
Author: vlad77l
Description: This mod is an add-on for Username BBCode - Name, ID And Level Indication Мод Change bbcode quote with Gender mod . Caches a list of users in the file.
Version: 1.0.0


Download Mod_Cache_Users_List.txt (9.64 KB). Added/Updated Mon 13 Aug, 2018 21:22. Downloaded 1 Time(s).
Этот мод является аддоном для Change bbcode quote with Gender mod, от Sergey и Username BBCode - Name, от Dominion. Кэширует в файл список пользователей.
This mod is an add-on for Change bbcode quote with Gender mod, by Sergey and Username BBCode - Name, by Dominion. Caches a list of users in the file.


_________________
Архив модов с phpbb.com phpbb2refugees.com......php?t=241
Архив модов с phpbb2.de yadi.sk/d/XP53sFs.....93Q36Ap , drive.google.com/.....49aHH-NdbR
Back to topOffline View user's profile
Display posts from previous:   

Summary Rating For >> Проблема с модом Username BBCode - Name, ID And Level Indication
Average Rating: 0.00 :: Min Rating: 0 :: Max Rating: 0 :: Number of Ratings: 0
Choose Rating: 1   2   3   4   5  

Similar Topics
Topic Author Forum Replies Last Post
No new posts Проблема с модом simple subforums 1.0.2b
подфорумы
Добрый день. Я же который раз пытаюсь заново ставить мод simple_subforums_1.0.2b, который создает подфорумы, но у меня проблема - подфорумы видны не только на странице viewforum но и на морде - а мне это не нужно. Может
Bender Поддержка и моды для phpBB2 18 Sat 11 Jul, 2015 14:12 View latest post
vlad77
No new posts Show message if not level to download attach
Аддон для attach mod, если нет прав на просмотр вложения в сообщении, показывает что в этом сообщени
Название мода: Show message if not level to download attach Автор: vlad77 Описание мода: Это аддон для File Attachment Mod, если нет прав на просмотр вложения в сообщении, показывает что в этом сообщении есть вложения,
vlad77 Поддержка и моды для phpBB2 0 Fri 08 Jul, 2016 20:14 View latest post
vlad77
No new posts Ошибка на форуме с модом предупреждений и личными сообщениями.
Здравствуйте дорогие коллеги! У меня есть пару вопросов, если не сложно помогите разобраться: 1. Странная ошибка выплыла у меня на форуме: http://santechniki.com/topic5790-765.html Code Warning: str_repeat()
miba Поддержка и моды для phpBB2 13 Fri 15 Oct, 2010 17:45 View latest post
Sergey
No new posts Ошибка с модом желтые карточки (Yellow Card MOD)
Там в демократии ещё используется для закачки reputation.php, который у меня уже имеется. Так как в прямизне своих рук я не настолько уверена, то подала а не поставить ли жёлтые карточки. И даже поставила. Но только
zizinana Поддержка и моды для phpBB2 1 Fri 28 Mar, 2014 12:30 View latest post
Sergey
No new posts [FINAL] AJAX username, emai and password check before registration for phpBB2
проверка имени пользователя, адреса email, пароля перед регистрацией
Описание мода: Позволяет пользователю проверить доступность имени и адреса email, а также надёжность пароля перед регистрацией на конференции без перезагрузки страницы. Версия мода: 1.0.2 Сложность установки: Легко Время
Sergey Поддержка и моды для phpBB2 9 Fri 11 Sep, 2015 12:29 View latest post
Sergey






All times are UTC + 3 hours
Users browsing this topic:
Registered Users: None

Jump to:   
printer-friendly view
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
/a
Username:

Password:

Log me on automatically each visit
  Яндекс.Метрика
CrackerTracker © 2004 - 2018 CBACK.de