Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для McGetto
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.05.2015
    Сообщений
    11
    Репутация:
    0 ±

    Почему не считывает цвет из базы данных после перезапуска сервера?

    Короче вот мой код записи цвета игрока в базу данных:

    new query_string[1000] = "UPDATE `accounts` SET";
    format(query_string, sizeof(query_string), "%s `Color` = '%06x'", query_string, PlayerInfo[playerid][pColor] >>> 8);
    format(query_string, sizeof(query_string), "%s WHERE `Nick` = '%s'", query_string, PlayerInfo[playerid][pName]);
    mysql_function_query(mysql_connect_ID, query_string, false, "", "");

    А вот код считывания:
    new query_string_get[52+MAX_PLAYER_NAME];
    format(query_string_get, sizeof(query_string_get), "SELECT * FROM `accounts` WHERE `Color` = %x", PlayerInfo[playerid][pColor]);
    mysql_query(mysql_connect_ID, query_string_get);

    Все работает нормально до перезапуска сервера, после перезапуска - цвет из базы данных не считывается, т.е в переменную записывается значение 0 (черный цвет). Как исправить?

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Не очень разбираюсь в SQL, но всё же попробую помочь.

    Во-первых, в коде сохранения указан цвет PlayerInfo[playerid][pColor] >>> 8, а в коде загрузки - PlayerInfo[playerid][pColor]. Либо делайте такой же сдвиг на 8 бит вправо в коде загрузки, либо убирайте его из сохранения. Я бы выбрал второй вариант, поскольку метки на радаре могут быть и прозрачными, а при сдвиге значение прозрачности теряется.

    Во-вторых, для цвета используется в сохранении используется спецификатор "%06x", а в загрузке - "%x", они могут дать разные результаты, если градация красного в цвете равна нулю. Советую использовать "%06x" в обоих вариантах либо "%08x", если вы убрали сдвиг вправо (см. выше).

    В-третьих (хоть это и не относится к проблеме), что будет, если я зарегистрирую игрока с ником "Daniel ') DROP TABLE `accounts`;--" ?
    Подсказка.
    И ещё.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #3
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не очень разбираюсь в SQL, но всё же попробую помочь.

    Во-первых, в коде сохранения указан цвет PlayerInfo[playerid][pColor] >>> 8, а в коде загрузки - PlayerInfo[playerid][pColor]. Либо делайте такой же сдвиг на 8 бит вправо в коде загрузки, либо убирайте его из сохранения. Я бы выбрал второй вариант, поскольку метки на радаре могут быть и прозрачными, а при сдвиге значение прозрачности теряется.

    Во-вторых, для цвета используется в сохранении используется спецификатор "%06x", а в загрузке - "%x", они могут дать разные результаты, если градация красного в цвете равна нулю. Советую использовать "%06x" в обоих вариантах либо "%08x", если вы убрали сдвиг вправо (см. выше).

    В-третьих (хоть это и не относится к проблеме), что будет, если я зарегистрирую игрока с ником "Daniel ') DROP TABLE `accounts`;--" ?
    Подсказка.
    И ещё.
    А будет SQL инъекция

  4. #4
    Аватар для Mazzilla
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В-третьих (хоть это и не относится к проблеме), что будет, если я зарегистрирую игрока с ником "Daniel ') DROP TABLE `accounts`;--" ?
    Подсказка.
    И ещё.

  5. Пользователь сказал cпасибо:
    $continue$ (22.05.2015)
  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Так и знал, что напишут что-то в этом роде.
    Да, трюк не сработает, но дело даже не в длине ника.

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #6
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Так и знал, что напишут что-то в этом роде.
    Да, трюк не сработает, но дело даже не в длине ника.

    Можно не ставить в клиент такой ник, просто при регистрации (если такова имеется), в диалог вводим Daniel ') DROP TABLE `accounts`;--
    Но правда если не стоит, mysql_format

  8. #7
    Аватар для McGetto
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.05.2015
    Сообщений
    11
    Репутация:
    0 ±
    Daniel_Cortez, так?:
    Код записи:
    new query_string[1000] = "UPDATE `accounts` SET";
    format(query_string, sizeof(query_string), "%s `Color` = '%06x'", query_string, PlayerInfo[playerid][pColor]);
    format(query_string, sizeof(query_string), "%s WHERE `Nick` = '%s'", query_string, PlayerInfo[playerid][pName]);
    mysql_function_query(mysql_connect_ID, query_string, false, "", "");

    Код считывания:
    new query_string_get[52+MAX_PLAYER_NAME];
    format(query_string_get, sizeof(query_string_get), "SELECT * FROM `accounts` WHERE `Color` = %06x", PlayerInfo[playerid][pColor]);
    mysql_query(mysql_connect_ID, query_string_get);

    Все равно не работает :( А вот если записывать в Int и считывать так:
    cache_get_field_content_int(0, "Skin", mysql_connect_ID);
    То работает отлично, но цвет сохраняется целочисленными числами, типа этого: 65579 или -16554789, а мне это не нравиться, ибо читать цвет в таком формате я не могу, гораздо удобнее читать например зеленый цвет как: 00FF00.
    Последний раз редактировалось McGetto; 24.05.2015 в 17:10.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •