PDA

Просмотр полной версии : [Вопрос] Подтверждение пароля



OLDBOY
18.06.2017, 09:41
Добрый день ув. пользователи 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);
А вот так лучше не надо.

OLDBOY
18.06.2017, 15:12
Спасибо но дело в том, то что мне нужно сравнить совпадают ли пароли если нет то вывести снова этот диалог, и да после сохранения пароля выводить этот диалог или же как сохранил пароль в БД потом выводить?

Edwin
18.06.2017, 15:48
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
{
// код, если игрок ввел не верный пароль
}
}

OLDBOY
18.06.2017, 17:27
Это тоже самое то что и я предоставил, может мне кто нибудь объяснить просто словами что за функции нужны будут для работы

Edwin
18.06.2017, 17:59
Вы хотите вводить пароль повторно после ввода первый раз при регистрации?

OLDBOY
18.06.2017, 18:17
допустим открывается диалог регистрации, мы ввели пароль далее открывается другой диалог нам нужно ввести тот же самый пароль(повторить наш пароль) если пароли совпадают переходим к следующему шагу(выбор пола, выбор скина) если нет то открываем ему тот же диалог(либо кикаем не суть)

Edwin
18.06.2017, 18:24
Тогда сохраните пароль в первом окошке в переменную, и во втором через 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 регистрация_повтор_ввода_пароля:
{
если (текст из массива с паролем совпадает с введенным текстом)
{
Переходим к следующему шагу
}
иначе Кикаем игрока
}

Edwin
18.06.2017, 18:41
case регистрация_ввод_пароля:
{
записываешь пароль в массив
Показываешь диалог с повтором пароля
}
case регистрация_повтор_ввода_пароля:
{
если (текст из массива с паролем совпадает с введенным текстом)
{
Переходим к следующему шагу
}
иначе Кикаем игрока
}

Всё правильно
Не забудьте вернуть значение после перехода к следующему шагу

DeimoS
18.06.2017, 19:08
Это тоже самое то что и я предоставил, может мне кто нибудь объяснить просто словами что за функции нужны будут для работы

То, о чём ты спрашивал - это pVar (http://wiki.sa-mp.com/wiki/Per-player_variable_system).

OLDBOY
18.06.2017, 20:27
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 толком не понял что она делает

- - - Добавлено - - -

Еще это всё нужно выводить до сохранения пароля в Базу Данных или же после?

Edwin
18.06.2017, 21:21
Да пароль можно вообще не сохранять, зачем лазить базу лишний раз. Сохраните в PVar, и проверьте при вводе повторного пароля, потом уже можно писать
PVar - это переменная для игрока, скажем так, выполняет все её функции
Вот (http://pawn-wiki.ru/index.php?/topic/4007-uchimsja-polzovatsja-pvarami/) статья о них (не реклама)

OLDBOY
19.06.2017, 22:30
Будьте добры объясните для тупоголового:

new oldpass[25];
GetPVarString(playerid,"passvtr",oldpass,25);

Посмотрел статью выше данную никак понять не могу. для чего берётся переменная oldpass[25] для чего мы выдаём 25 ячеек??

DeimoS
19.06.2017, 22:34
Чтоб взять значение из GetPVarString же. А 25 ячеек берётся, видимо, потому что текст в GetPVarString равен 25 символам