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

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±

    Пустое поле в "password" MySQL

    Здравствуйте!
    Суть вопроса такова в базе данных не отображается пароль, само поле пустое! Регистрируется аккаунт далее после перезахода возможно зайти с любым паролем так как поле в "password" пустое.

    PHP код:
        switch(dialogid)
        {
            case 
    0:
            {
                if(!
    response)
                {
                    
    SendClientMessage(playerid0xFFB02EFF"Введите \"/q\" (/quit) для выхода");
                    return 
    _Kick(playerid);
                }
                if(!
    strlen(inputtext)) return ShowPlayerDialog(playerid0DIALOG_STYLE_INPUT"Регистрация""\tДобро пожаловать на Davenport RolePlay!\nНеобходимо пройти регистрацию\nПридумайте пароль, он будет запрашиваться каждый раз при входе\
                \n\n\tПримечание:\n\t1.Пароль чувствителен к регистру\n\t2.Длина пароля от 6 до 129 символов\n\t3.Может содержать любые символы, знаки а также цифры"
    "Готово""Отмена");
                else if(
    strlen(inputtext) < || strlen(inputtext) > 129) return ShowPlayerDialog(playerid2DIALOG_STYLE_MSGBOX"Уведомление""Ошибка ввода пароля!\nДлина пароля от 6 до 129 символов""Повторить""");
                
    WP_Hash(Player[playerid][Password], 129inputtext);
                new 
    query[128];
                
    mysql_format(connectMySQLquerysizeof(query), "INSERT INTO `players` (`name`, `password`) VALUES ('%e', '%s')"Player[playerid][Name], Player[playerid][Password]);
                
    mysql_tquery(connectMySQLquery"OnPlayerRegister""d"playerid);
                return 
    1;
            }
            case 
    1:
            {
                if(!
    response)
                {
                    
    SendClientMessage(playerid0xFFB02EFF"Введите \"/q\" (/quit) для выхода");
                    return 
    _Kick(playerid);
                }
                if(!
    strlen(inputtext))
                {
                       new 
    string[107+MAX_PLAYER_NAME];
                    
    format(stringsizeof(string), "\tДобро пожаловать на Davenport RolePlay!\nДанный аккаунт уже зарегистрирован\n\nЛогин: %s\nВведите пароль:"Player[playerid][Name]);
                    
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация"string"Войти""Отмена");
                    return 
    1;
                }
                new 
    WP_string[129];
                
    WP_Hash(WP_stringsizeof(WP_string), inputtext);
                if(!
    strcmp(WP_stringPlayer[playerid][Password]))
                {
                      new 
    query[128];
                    
    mysql_format(connectMySQLquerysizeof(query), "SELECT * FROM `players` WHERE `name` = '%e'"Player[playerid][Name]);
                    
    mysql_tquery(connectMySQLquery"OnPlayerLogin""d"playerid);
                }
                else
                {
                    
    SetPVarInt(playerid"invalid"GetPVarInt(playerid"invalid") +1);
                    if(
    GetPVarInt(playerid"invalid") == 4)
                    {
                         
    SendClientMessage(playerid0xFFB02EFF"Введите \"/q\" (/quit) для выхода");
                        return 
    _Kick(playerid);
                    }
                       new 
    string[107+MAX_PLAYER_NAME+39];
                    
    format(stringsizeof(string), "\tДобро пожаловать на Davenport RolePlay!\nДанный аккаунт уже зарегистрирован\n\nЛогин: %s\nВведите пароль:\nНеверный пароль! Осталось попыток: %d"Player[playerid][Name], GetPVarInt(playerid"invalid"));
                    
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация"string"Войти""Отмена");
                    return 
    1;
                }
                return 
    1;
            }
            case 
    2: return ShowPlayerDialog(playerid0DIALOG_STYLE_INPUT"Регистрация""\tДобро пожаловать на Davenport RolePlay!\nНеобходимо пройти регистрацию\nПридумайте пароль, он будет запрашиваться каждый раз при входе\
            \n\n\tПримечание:\n\t1.Пароль чувствителен к регистру\n\t2.Длина пароля от 6 до 129 символов\n\t3.Может содержать любые символы, знаки а также цифры"
    "Готово""Отмена");
        } 
    PHP код:
    public OnPlayerDataLoaded(playerid)
    {
        if(
    cache_num_rows() == 1)
        {
            new 
    string[107+MAX_PLAYER_NAME];
            
    format(stringsizeof(string), "\tДобро пожаловать на Davenport RolePlay!\nДанный аккаунт уже зарегистрирован\n\nЛогин: %s\nВведите пароль:"Player[playerid][Name]);
            
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация"string"Войти""Отмена");
            
    Player[playerid][ID] = cache_get_field_content_int(0"id");
            
    cache_get_field_content(0"password"Player[playerid][Password], connectMySQL129);
        }
        else
        {
            
    ShowPlayerDialog(playerid0DIALOG_STYLE_INPUT"Регистрация""\tДобро пожаловать на Davenport RolePlay!\nНеобходимо пройти регистрацию\nПридумайте пароль, он будет запрашиваться каждый раз при входе\
            \n\n\tПримечание:\n\t1.Пароль чувствителен к регистру\n\t2.Длина пароля от 6 до 129 символов\n\t3.Может содержать любые символы, знаки а также цифры"
    "Готово""Отмена");
        }
        return 
    1;

    PHP код:
    public OnPlayerRegister(playerid)
    {
        
    Player[playerid][ID] = cache_insert_id();
        
    SpawnPlayer(playerid);
        return 
    1;

    PHP код:
    public OnPlayerLogin(playerid)
    {
        
    SpawnPlayer(playerid);
        return 
    1;



    Последний раз редактировалось Nurick; 26.12.2015 в 01:15.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Как в Player[playerid][Password] записывается пароль?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Как в Player[playerid][Password] записывается пароль?
    Не пароль, а хеш.
    PHP код:
    WP_Hash(Player[playerid][Password], 129inputtext); 
    Правда, настораживает "магическое число" 129. Обычно размер буфера выражают либо через sizeof, либо через константу (которая используется для указания размера массива при его объявлении).

    Теперь рассуждаем логически. Функция WP_Hash возвращает хеш от указанной строки. Длина хеша всегда составляет 128+1 символов.
    И куда же записыается этот хеш?
    PHP код:
    new query[128]; 
    Скорее всего, mysql_format просто пропускает хеш при форматировании, т.к. его длина больше длины форматного буфера.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    Nurick (26.12.2015)
  5. #4
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    А теперь вообще вместо пустого поля у нас появляется в поле password "0"

    PHP код:
                WP_Hash(Player[playerid][Password], 129inputtext);
                new 
    query[256/*произвольно*/];
                
    mysql_format(connectMySQLquerysizeof(query), "INSERT INTO `players` (`name`, `password`) VALUES ('%e', '%s')"Player[playerid][Name], Player[playerid][Password]);
                
    mysql_tquery(connectMySQLquery"OnPlayerRegister""d"playerid); 
    Последний раз редактировалось Nurick; 26.12.2015 в 10:16.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Прологируйте значение в Player[playerid][Password] после того, как получите хеш. И текст запроса после форматирования тоже.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    Nurick (26.12.2015)
  8. #6
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    Тему можно закрывать, проблема решена. Спасибо "Daniel_Cortez" за верный путь направления
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Скорее всего, mysql_format просто пропускает хеш при форматировании, т.к. его длина больше длины форматного буфера.

 

 

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

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

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

Ваши права

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