Просмотр полной версии : [Вопрос] Подтверждение пароля
Добрый день ув. пользователи PRO-PAWN
Хотел сделать подтверждение пароля. Но ни как не получается реализовать.
Понял что нужно работать с Strcmp (http://wiki.sa-mp.com/wiki/Strcmp_RU)
Допустим я вызываю диалог
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Подтверждение пароля", "Повторите пароль:", "Готово", "");
case 1:
{
// тут не понял что за действие должно быть
}
SetPVarString(playerid,"passvtr",inputtext); // не понял что это
ShowPlayerDialog(playerid,dRegisterPovtor,3,"Повтор пароля","Повторите ваш пароль:","ОК","Отмена");
case dRegisterPovtor:
{
new oldpass[25];
GetPVarString(playerid,"passvtr",oldpass,25);// тут
DeletePVar(playerid,"passvtr");// тут
if(!response) return 1;
if(!strcmp(inputtext,oldpass,false) && strlen(inputtext))
{
sql_escape_string(zConn, inputtext, pData[playerid][pPassword], 24); // тут тоже не понял за что отвечает
ShowPlayerDialog(playerid,dRegister2,1,"{ffffad}Регистрация","Укажите вашу {99b4ff}почту\n\n\n\n","Далее","Назад");
}
else SendClientMessage(playerid,CGRAY,"Введенные Вами пароли не совпадают"), NewKick(playerid);
}
Можете объяснить пожалуйста
middlematt
18.06.2017, 14:26
Посмотри этот (http://pro-pawn.ru/showthread.php?10548-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0-MySQL-R39-R40) урок. Там написано, как сделать проверку на правильность пароля и как записать его.
SetPVarString(playerid,"passvtr",inputtext);
А вот так лучше не надо.
Спасибо но дело в том, то что мне нужно сравнить совпадают ли пароли если нет то вывести снова этот диалог, и да после сохранения пароля выводить этот диалог или же как сохранил пароль в БД потом выводить?
case 1:
{
// тут не понял что за действие должно быть
}
Тут должен быть код, который сработает, когда игрок playerid нажмёт какую-нибудь кнопку на диалоговом окне с ID 1
middlematt
18.06.2017, 15:55
Спасибо но дело в том, то что мне нужно сравнить совпадают ли пароли если нет то вывести снова этот диалог, и да после сохранения пароля выводить этот диалог или же как сохранил пароль в БД потом выводить?
Думаю, под свой мод ты подогнать сможешь.
case 1:
{
if(!response)
return 1;
new
oldpass[25];
GetPVarString(playerid, "passvtr", oldpass, 25);
if ((!strcmp(inputtext, oldpass, false))
&& (strlen(inputtext) != 0))
{
// код, если игрок ввел верный пароль
}
else
{
// код, если игрок ввел не верный пароль
}
}
Это тоже самое то что и я предоставил, может мне кто нибудь объяснить просто словами что за функции нужны будут для работы
Вы хотите вводить пароль повторно после ввода первый раз при регистрации?
допустим открывается диалог регистрации, мы ввели пароль далее открывается другой диалог нам нужно ввести тот же самый пароль(повторить наш пароль) если пароли совпадают переходим к следующему шагу(выбор пола, выбор скина) если нет то открываем ему тот же диалог(либо кикаем не суть)
Тогда сохраните пароль в первом окошке в переменную, и во втором через strcmp сравните его с inputtext
Если пароли равны ( if(!strcmp ), выдавайте следующее окно, в другом случае, повтор ввода (или что хотите)
$continue$
18.06.2017, 18:32
#if !defined isnull
#define isnull(%1) \
(((%1[0]) == 0) || ((%1[0]) == '\1') && ((%1[1]) == 0))
#endif
if(0 != strcmp(password, input_password) && !isnull(password) && !isnull(input_password))
{
ShowPlayerDialog(playerid, ид_диалога_авторизации, DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "Отмена");
}
password - пароль сохраненный в базе, input_password - введенный в диалог пароль (inputttext)
middlematt
18.06.2017, 18:37
допустим открывается диалог регистрации, мы ввели пароль далее открывается другой диалог нам нужно ввести тот же самый пароль(повторить наш пароль) если пароли совпадают переходим к следующему шагу(выбор пола, выбор скина) если нет то открываем ему тот же диалог(либо кикаем не суть)
case регистрация_ввод_пароля:
{
записываешь пароль в массив
Показываешь диалог с повтором пароля
}
case регистрация_повтор_ввода_пароля:
{
если (текст из массива с паролем совпадает с введенным текстом)
{
Переходим к следующему шагу
}
иначе Кикаем игрока
}
case регистрация_ввод_пароля:
{
записываешь пароль в массив
Показываешь диалог с повтором пароля
}
case регистрация_повтор_ввода_пароля:
{
если (текст из массива с паролем совпадает с введенным текстом)
{
Переходим к следующему шагу
}
иначе Кикаем игрока
}
Всё правильно
Не забудьте вернуть значение после перехода к следующему шагу
Это тоже самое то что и я предоставил, может мне кто нибудь объяснить просто словами что за функции нужны будут для работы
То, о чём ты спрашивал - это pVar (http://wiki.sa-mp.com/wiki/Per-player_variable_system).
SetPVarString(playerid, "password", inputtext); // сохраняем введённый текст в поле диалога(это пароль)
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "", "", "", ""); // выводим диалог
case 0: // действие
{
new string_password[30]; // допустим макс. значение пароля 30 символов
GetPVarString(playerid, "password", string_password, sizeof(string_password)); // получаем это значение
if (!strcmp(inputtext, string_password, false) && strlen(inputtext)) //сравниваем введенный пароль в диалоге с тем что ввели после + учитываем регистр букв || количество введенных символов
{
// тут уже если всё успешно выводим следующий диалог
}
else
{
// если нет то либо кикаем либо что то ещё
}
}
Хотел узнать подробнее о GetPVarString толком не понял что она делает
- - - Добавлено - - -
Еще это всё нужно выводить до сохранения пароля в Базу Данных или же после?
Да пароль можно вообще не сохранять, зачем лазить базу лишний раз. Сохраните в PVar, и проверьте при вводе повторного пароля, потом уже можно писать
PVar - это переменная для игрока, скажем так, выполняет все её функции
Вот (http://pawn-wiki.ru/index.php?/topic/4007-uchimsja-polzovatsja-pvarami/) статья о них (не реклама)
Будьте добры объясните для тупоголового:
new oldpass[25];
GetPVarString(playerid,"passvtr",oldpass,25);
Посмотрел статью выше данную никак понять не могу. для чего берётся переменная oldpass[25] для чего мы выдаём 25 ячеек??
Чтоб взять значение из GetPVarString же. А 25 ячеек берётся, видимо, потому что текст в GetPVarString равен 25 символам
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot