Вопросы

Я пишу систему авторизации, и у меня такая ошибка:

error 035: argument type mismatch (argument 1)

Жалуется на эту строчку:

mysql_tquery(inputtext, player_info[playerid][PASSWORD], checkpass, 32);

И сам код авторизации:

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 ответа на этот вопрос

  • 0

@rediska Мне кажется,или ты забыл написать ИД подключения. Ну переменую, котораая отвечает у тебя за подключение к бд. Например dbHandle.

Выглядеть это должно так:

mysql_tquery(dbHandle,inputtext, player_info[playerid][PASSWORD], checkpass, 32);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Antoxa39 пропускает любой пароль

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska ну я в этом уже не могу никак помочь,т.к сам учусь Pawn.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Советую ознакомиться с документацией по MySQL (клик)

1 аргумент - имя переменной

2 аргумент - запрос, а ты пытаешься в запрос записать введённый игроком текст

И т. д., там даже есть пример использования. Не ту функцию ты используешь для записи пароля в массив

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska strmid(p_info[playerid][pass],inputtext,0,strlen(inputtext),26);

держи,вырезал со своего мода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Antoxa39 а запросов в mysql на проверку пароля у тебя там нету никаких? или оно просто ставится так без запроса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 @rediska strmid(p_info[playerid][pass],inputtext,0,strlen(inputtext),26); эта функция записывает веденный текст игроком в переменную где хранится пароль. На проверку нет

 

strmid(dest[], const source[], start, end, maxlength=sizeof dest)

 

dest[]Массив, для записи символов из строки source.

const source[]Массив со строкой, часть которой требуется скопировать.

start Позиция начала копирования (нумерация начинается с 0).

end Позиция завершения копирования. Копируются символы из диапазона start..end-1.

maxlength Размер массива dest (необязательный параметр).

 

mysql_fetch_field_row
 

Функция получает данные из указанного столбца
string[]: строка куда будет помещен результат из столбца
const fieldname[]: имя столбца, из которого будем брать данные
connectionHandle: ID соединения@rediska 

Отредактировано пользователем Antoxa39

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN я так понимаю это вот это?:

  Цитата
new query[128];
format(query, sizeof(query), "SELECT * FROM `players` WHERE `id` = %d", Player[playerid][ID]);
mysql_tquery(MySQL, query, "OnStuffSelected""d", playerid);

 

Читать далее...  

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska чтобы добавить акк в бд нужно использовать запрос INSERT INTO *жмяк.
P.S квадратные скобки которые там указаны,не нужны их писать в запросе Pawn

Отредактировано пользователем Antoxa39

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska да, это правильный метод использования функции. А у тебя, как видишь - совсем какая-то ерунда

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Antoxa39 У меня все работает, все добавляется кроме этой проверки 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN теперь вот

local variable "query" shadows a variable at a preceding level

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska переводчик в помощь. Я в какой-то теме видел твой код и видел созданную 2 раза переменную, она локальная, просто другая ниже уровнем. Смотри внимательно переменную с этим названием

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN да вроде бы всё нормально, на что он жалуется та

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska вот дай мне пвн, я тебе за минуту как увижу твоё сообщение найду

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska 

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN так а на что там жаловаться то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska подумай. А то совсем уже ленитесь, хотите что бы сделали вам. Я тебе подчеркнул, ошибку переведи в гугле

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN ну а так нормально проверка сделана? или опять фигни понаписал я

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska там бред полный. Найди функцию здесь, ознакомься с ней, а потом вернись к коду и прочти, что ты написал.

А вообще, совет ВСЕМ НОВИЧКАМ. Начинайте не с написания мода с нуля, а с доработки модов с пабликов. Мод с нуля - не такое простое дело как кажется, и писать его по видосам какого-то чувака, а самому не обучаться - бред полный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@SCRIPTMAN ?

if(strfind(player_info[playerid][NAME], player_info[playerid][PASSWORD], true) != -1)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska  вообще не туда идёшь. Сам не понимаешь, что нужно сделать. Меньше смотрите пишущих с нуля - от них нет смысла, потому что вы не думаете, вы только копируете чужой код, даже не пытаетесь разобраться. Я тебе целый диалог в теме написал и расписал что не так, а ты даже не смог посмотреть это, попытаться понять. Смотри последние 2 сообщения, дальше без меня

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@rediska, а зачем вам вообще здесь strcmp? Вы разве где-то заранее загружали в эту переменную пароль?

 

Запрос к базе данных (например, на поиск аккаунта) можно реализовать, грубо говоря, двумя путями:

  1. Отправить запрос и заставить машину ждать, пока сервер базы данных вернет ответ. Соответственно, чем больше нагружен сервер, чем больше забита база данных, чем сложнее запрос, тем больше время ответа. И пока выполняется этот запрос, весь сервер, можно сказать, зависает. Для этого используют mysql_query.
  2. Отправить запрос к базе данных без принудительного ожидания ответа (в отдельном потоке). Соответственно, отправляете запрос, далее продолжает исполняться ваш программный код. Как только сервер базы данных подготовит ответ, так в ближайший допустимый момент вызовется та public-функция, которую вы зададите. Для этого используют функции mysql_tquery, mysql_pquery (mysql_pquery используется, когда нужна многопоточность, – лучше с ней не играйтесь пока что).

Что мы видим у вас сейчас (на момент последней редакции)? К базе данных отправляется запрос в отдельном потоке при помощи функции mysql_tquery (речь идет о строке 631 на изображении, приведенном пользователем @SCRIPTMAN). Результат этого запроса (все данные об аккаунте с некоторым ником и некоторым паролем) вы увидите в функции PlayerLogin. Но при этом пароль пытаетесь сверять в строке 632. То есть из базы данных пароль еще не был получен, но вы уже сравниваете его. Проверку необходимо проводить в функции PlayerLogin в вашем случае.

 

Что касается PlayerLogin. Просто в самом начале этой функции необходимо добавить проверку, возвращена ли хотя бы 1 строка. Возвращена? Превосходно, введенный пароль правильный, идем на авторизацию. Нет? Значит в базе данных нет аккаунта с такой комбинацией логина и пароля, то есть введен неверный пароль.

 

В результате ваш диалог авторизации приобретает примерно следующий вид:

  открыть спойлер

 

А функция PlayerLogin преобразуется в следующий вариант:

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Владислав2
      От Владислав2
      Здравствуйте, при компиляции появляется ошибка,

      Ошибка:
      error 017: undefined symbol "REP_KUZIA_TD"

      Строки:
       
          REP_KUZIA_TD[0] = TextDrawCreate(7.499990, 314.444396, "REP: 1");
          TextDrawLetterSize(REP_KUZIA_TD[0], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[0], 1);
          TextDrawColor(REP_KUZIA_TD[0], -1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          TextDrawSetOutline(REP_KUZIA_TD[0], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[0], 255);
          TextDrawFont(REP_KUZIA_TD[0], 1);
          TextDrawSetProportional(REP_KUZIA_TD[0], 1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          REP_KUZIA_TD[1] = TextDrawCreate(6.249957, 330.518493, "ASK: 0");
          TextDrawLetterSize(REP_KUZIA_TD[1], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[1], 1);
          TextDrawColor(REP_KUZIA_TD[1], -1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          TextDrawSetOutline(REP_KUZIA_TD[1], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[1], 255);
          TextDrawFont(REP_KUZIA_TD[1], 1);
          TextDrawSetProportional(REP_KUZIA_TD[1], 1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          return 1;
      }

      Буду рад если кто-то поможет