[Любая игра] Допиленный RankMe 2.8.3 для MySQL

Тема в разделе "Новые плагины", создана пользователем SiBear, 16 янв 2015.

  1. SiBear

    SiBear

    Сообщения:
    7
    Симпатии:
    2
    Всем привет!

    Столкнулся с проблемой русских ников в RankMe при использовании MySQL: при добавлении игрока с русским ником в базу, он сохранялся с кракозябрами кодировки. (пример: НиТащер228 )
    Но это пол беды - при запросе (через php, к примеру) данных о игроке они так же криво отображались на html-странице, при любых charset'ах, при любых кодировках самого html-файла.

    Решение искалось не долго - на странице habra обнаружил интересную тему: Особенности работы с кодировками в MySQL 4.1+
    После обновления 4.1 в mysql первым делом нужно указывать в какой кодировке будем отправлять/получать данные:
    PHP:
    mysql_query("SET NAMES '<сокр_имя_кодировки>'"); //к примеру cp1251
    //А дальше выполняйте любые запросы, кодировка сохранится, пока вы не закроете текущее соединение с БД.
    А так же, не менее важное: при создании таблицы необходимо в конце запроса ставить такие параметры, чтобы установить в какой кодировке она будет:
    PHP:
    DEFAULT CHARACTER SET <сокр_имя_кодировкиCOLLATE <полное_имя_кодировки>; //по умолчанию в utf8
    Скачав с оф.форума исходник, я поправил запросы SQL в них в соответствии с новыми введениями в более поздних версиях mysql, и все встало на свои места.

    Ставите плагин, запускаете сервак, если данные для подключения верны - должна создаться таблица в указанной БД на сервере. Кстати, таблица(у неё кодировка latin1) со всеми рангами храниться у меня в базе данных ranks(у неё кодировка utf8_general_ci, поэтому можете не заморачиваться с кодировкой самой БД, только проверьте кодировку таблицы в ней.)

    Для проверки кодировки новой таблицы можете отправить ей запрос вида:
    PHP:
    SHOW VARIABLES LIKE 'character_set%';
    В ответе должны получить несколько строк, где важна только эта:
    PHP:
    ... //Остальные utf8
    character_set_filesystem binary 
    character_set_server latin1 
    //Она важна!
    ...
    Если все так, то таблица создана правильно и проблем возникнуть не должно. Сами редакторы (к примеру HediSQL) могут коряво отображать русские буквы: не волнуйтесь, так и есть, по умолчанию у него стоит utf8, а не latin1, можете выполнить запрос вида SET NAMES 'latin1'; SELECT * FROM <имя_таблицы>; - это покажет вам вашу таблицу с русскими и английскими буквами. Нам это не особо важно, ведь мы будем получать данные через сайт.

    Вот краткие примеры, по которым у меня все работает как часы (сразу оговорюсь - все файлы сайта в кодировке UTF-8 без BOM)

    Подключаемся к базе, используя кодировку latin1 (aka windows-1252)
    PHP:
    <?php 
    //это db.php
        
    $msql = array(
        
    "ip" => '127.0.0.1',
        
    "u" => 'user'//имя юзера
        
    "p" => 'pass'//пароль
        
    "db" => 'basename' //имя БД, где будет таблица rankme
        
    );

        
    $link mysql_connect($msql['ip'], $msql['u'], $msql['p']) or die(); //Подключаемся к серверу mySQL
        
    mysql_select_db($msql['db']) or die();
        
        
    mysql_query("SET NAMES 'latin1'"); //один из ключевых моментов!
        //mysql_set_charset("");
    ?>
    Ну и, собственно, получаем из базы то, что хотим:
    PHP:
    //это file.php
    include('db.php');

    $lastu="select name from rankme order by id desc limit 1";
    $result mysql_query($lastu);
    $i=mysql_fetch_array($result);
    $last=$i['name'];
    mysql_free_result($result);
        
    echo 
    $last//получаем ник последнего игрока
    Ну и отображаем на нашей странице полученные данные, тут важно установить meta тег с параметром charset равным utf-8:

    HTML:
    <?php include('file.php'); ?>
    <html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    <?php echo $last; //Тут будет ник последнего игрока. ?>
    </body>
    </html>
    
    P.S. Вы спокойно можете настроить так, чтобы все работало в utf-8 и через utf-8 - это будет даже вернее. Но суть этого исправления в том, чтобы была возможность пользоваться RankMe "из коробки", не настраивая ничего в базах/кодировках.
    Все просто: скачали, поставили, запустили - радуетесь.
    Спасибо за внимание, скомпилированный плагин прикручу к заметке.

    SourceMod Version: 1.6.3
    Metamod:Source version 1.10.4
    Тестировалось на CS:GO.

    UPD: Исходник не загружается, т.к hlmod установил ограничение в 32Кб, исходник - 86Кб.
    UPD2: last_player.zip - это для проверки работоспособности плагина. Заливаете на сайт и заходите на index.php в корневую директорию; он отобразит ник последнего игрока. Так же не забудьте в файле src/db.php поправить данные подключения к БД.
    Если все сделано правильно, то увидите нормальные буквы(в том числе и русские).
    Я проверил - русский текст пишет нормально.
     

    Вложения:

    • rankme.smx
      Размер файла:
      59,3 КБ
      Просмотров:
      52
    • last_player.zip
      Размер файла:
      1,6 КБ
      Просмотров:
      69
    Последнее редактирование: 24 янв 2015
  2. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    Если проблема отображения ников на сайте, то с установкой этого плагина, будет всё норм?
     
  3. SiBear

    SiBear

    Сообщения:
    7
    Симпатии:
    2
    Пробуйте, если что-то не работает или будут вопросы - я отвечу.
    P.S. Исходник затерялся, чуть позже прилеплю.
     
  4. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
  5. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    Саша Шеин, Какая версия PHP стоит? У меня например - если ставлю выше 5.2 ломается текст.
     
  6. SiBear

    SiBear

    Сообщения:
    7
    Симпатии:
    2
    PHP 5.3.3-7+squeeze19 with Suhosin-Patch (cli) (built: Feb 17 2014 10:10:23)
    Server version: Apache/2.2.16 (Debian)

    НО, от этого зависеть не должно.
    Пробуйте эту версию плагина, если заработает/не заработает - пишите сюда, будем решать.
    Но это мне помогло с русскими буквами(никами).

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

    UPD: Проверил, все должно быть нормально. Проверяйте.
     
    Последнее редактирование: 23 янв 2015
  7. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Так где исходник?
     
  8. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    SiBear, если я правильно понял. То при установке плагина надо обнулить стату и тогда тестить. А как быть с сайтом(web частью) тем у кого нет доступа к web-части кроме как через браузер.
     
  9. TWRP

    TWRP Read Only

    Сообщения:
    317
    Симпатии:
    45
    Вот костыль есть от Легенды с хоста serva4ok
    Когда сидел когда-то на майарене то были такие траблы с текстом ника.

    Поставив его все пропало.
    http://forum.serva4ok.ru/index.php?/topic/19026-rankme-иероглифы-в-web/

    но там нет скачки с постов, может кому-то интересно, напишите ему он даст или butaford он тоже даст костыль
     
  10. SiBear

    SiBear

    Сообщения:
    7
    Симпатии:
    2
    У вас должен быть доступ к MySQL и Web.
    В MySQL вы должны будете проверить вашу таблицу(просто проверить в какой кодировке сохранилась таблица), а на сайте проверить meta-тег charset=utf-8
    Если это готовая панель, то придется вам править .php скрипты, т.к. необходимо перед всеми запросами в базу отправить этот: SET NAMES 'latin1';
     
  11. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    SiBear, печально у меня нет доступа ни к Web морде ни к MySql.
     
  12. SiBear

    SiBear

    Сообщения:
    7
    Симпатии:
    2
    Обновил шапку:
    HLmod не загружает, т.к исходник(86Кб) весит в 2 раза больше квоты(32Кб).

    Добавлено через 4 минуты
    К mysql можно и не иметь, а вот к морде нужно, т.к туда нужно вставить ту строчку в скрипт.
     
    Последнее редактирование: 24 янв 2015
  13. Grey83

    Grey83

    Сообщения:
    334
    Симпатии:
    96
    А в ZIP сжать видимо не судьба (на ПК нет архиваторов или архив выходит больше 750кБ)?:-D
     
  14. BatyaMedic

    BatyaMedic Ньюсмейкер

    Сообщения:
    769
    Симпатии:
    123
    Он это в январе написал,лол.
     
  15. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.989
    Симпатии:
    2.987
    Бред.

    Достаточно писать перед каждым запросом
    PHP:
    SQL_FastQuery(g_hStatsDb, "SET NAMES \"UTF8\"");
    P.S. не проверял