Ошибка при вводе пароля

s0lnc3v

Новичок
Автор темы
7
1
На бласт хаке уже есть подобная тема, но я не понял, что там именно делать нужно.
Есть диалог авторизации, БД и ввод пароля. При вводе пароля у меня пропадает диалог, а в mysql.log пишет это: [ERROR] cache_get_value_name: field 'salt' not found (и 'password').

Сам код, в котором происходит проверка хэша и соли пароля, а также проверка по бд
PHP:
new checkpass[65];
                SHA256_PassHash(inputtext, player_info[playerid][SALT], checkpass, 65);
                if(strcmp(player_info[playerid][PASSWORD], checkpass, false, 64) == 0)
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
                }

Что делать, я не понимаю? Уже на другой форум писали, но ответа так и нет :d
PHP:
case DLG_LOG:
        {
            if(response)
            {
                if(!strlen(inputtext))
                {
                    ShowLogin(playerid);
                }
                new checkpass[65];
                SHA256_PassHash(inputtext, player_info[playerid][SALT], checkpass, 65);
                if(strcmp(player_info[playerid][PASSWORD], checkpass, false, 64) == 0)
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
                }
                else
                {
                    new string[63];
                    SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")-1);
                    if(GetPVarInt(playerid, "WrongPassword") > 0)
                    {
                        format(string, sizeof(string), "[Ошибка] {ffffff}Неправильный пароль. У вас осталось %d попыток", GetPVarInt(playerid, "WrongPassword"));
                        SCM(playerid, COLOR_RED, string);
                    }
                    if(GetPVarInt(playerid, "WrongPassword") == 0)
                    {
                        SCM(playerid, COLOR_RED, "[Ошибка] {ffffff}Вы исчерпали лимит попыток входа и были кикнуты");
                        Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_WHITE, "{E00D18}[Ошибка] {FFFFFF}Вы отказались от регистрации!");
                SCM(playerid, COLOR_WHITE, "Чтобы выйти из игры, откройте чат и введите: \"/q\"");
                return Kick(playerid);
            }

я не спал полтора суток, так что не всё могу понять
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,133
Когда вы копируете код и надеетесь, что он будет работать, хотя бы копируйте его осознанно. В базе данных нет полей salt и password, либо ты их не запрашиваешь в SQL-запросе. Одно из двух, скорее всего первое, если ты вручную создавал базу данных. Тебе нужно создать эти поля и задать им нужные параметры.