Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Полноценная система регистрации и авторизации.

Статус
В этой теме нельзя размещать новые ответы.

ra132132ji

Нуль
Регистрация
15 Апр 2017
Сообщения
3
Лучшие ответы
0
Репутация
3
Доброго времени суток, уважаемые пользователи портала. Представляю Вам полноценную систему регистрации, а также авторизации.





[HR][/HR]
Ко всем переменным:

PHP:
new database;
new bool:authorization[MAX_PLAYERS];

enum player_information
{
	p_name[MAX_PLAYER_NAME],
	p_password[20 + 1],
	p_email[50 + 1],
	p_referral[MAX_PLAYER_NAME],
	p_sex,
	p_skin,
	p_score
}
new p_i[MAX_PLAYERS][player_information];
public OnGameModeInit():

PHP:
	database = mysql_connect("localhost", "root", "database", "");
public OnGameModeExit():

PHP:
	mysql_close(database);
public OnPlayerConnect(playerid):

PHP:
	GetPlayerName(playerid, p_i[playerid][p_name], MAX_PLAYER_NAME);
	static const fmt_str[] = "SELECT * FROM `accounts` WHERE `p_name` = '%s'";
	new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
	format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
	mysql_function_query(database, string, 1, "p_check", "i", playerid);
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):

PHP:
	switch(dialogid)
	{
	    case 0:
	    {
	        if(!response)
	            return Kick(playerid);
			if(!strlen(inputtext))
			{
			    static const fmt_str[] =
				"\
				    {F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
					\nВаш аккаунт не найден в базе данных, поэтому Вам\
					\nнужно пройти регистрацию. Введите пароль в поле.\
				";
				new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
				format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
				ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", string, "Далее", "");
				return 1;
			}
			if(strlen(inputtext) < 6 || strlen(inputtext) > 20)
			    return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Пароль должен содержать от 6 до 20 символов и букв.", "Далее", "");
			for(new i = strlen(inputtext); i != 0; --i)
			switch(inputtext[i])
			{
			    case 'А'..'Я', 'а'..'я', ' ':
			        return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Ваш пароль не должен содержать русских букв.", "Далее", "");
			}
			strmid(p_i[playerid][p_password], inputtext, 0, strlen(inputtext), 20);
			ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите Ваш действующий электронный адрес.", "Далее", "");
	    }
	    case 1:
	    {
			if(!response)
				return Kick(playerid);
			if(!strlen(inputtext))
				return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите Ваш действующий электронный адрес.", "Далее", "");
            if(strlen(inputtext) < 10 || strlen(inputtext) > 50)
                return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Почта должна содержать от 10 до 50 символов и букв.", "Далее", "");
            for(new i = strlen(inputtext); i != 0; --i)
            switch(inputtext[i])
			{
			    case 'А'..'Я', 'а'..'я', ' ':
			    	return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Ваша почта не должна содержать русских букв.", "Далее", "");
			}
			strmid(p_i[playerid][p_email], inputtext, 0, strlen(inputtext), 50);
			ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
	    }
	    case 2:
	    {
	        if(!response)
				return Kick(playerid);
			if(!strlen(inputtext))
			    return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
            if(strlen(inputtext) < 1 || strlen(inputtext) > 24)
                return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
            strmid(p_i[playerid][p_referral], inputtext, 0, strlen(inputtext), MAX_PLAYER_NAME);
            ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Выберите Ваш пол.", "Мужской", "Женский");
	    }
	    case 3:
	    {
	        if(!response)
	        {
	            p_i[playerid][p_sex] = 1;
	            p_i[playerid][p_skin] = 13;
	        }
	        else
	        {
	            p_i[playerid][p_sex] = 2;
	            p_i[playerid][p_skin] = 230;
	        }
	        p_i[playerid][p_score] = 1;
	        authorization[playerid] = true;
			static const fmt_str[] = "INSERT INTO `accounts` (`p_name`, `p_password`, `p_email`, `p_referral`, `p_sex`, `p_skin`, `p_score`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d')";
			new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 20 + 1 - 2 + 50 + 1 - 2 + MAX_PLAYER_NAME - 2 + 2 - 2 + 4 - 2 + 5];
			format(string, sizeof(string), fmt_str, p_i[playerid][p_name], p_i[playerid][p_password], p_i[playerid][p_email], p_i[playerid][p_referral], p_i[playerid][p_sex], p_i[playerid][p_skin], p_i[playerid][p_score]);
			mysql_function_query(database, string, 0, "", "");
			SpawnPlayer(playerid);
	    }
	    case 4:
	    {
	        if(!response)
	            return Kick(playerid);
			if(!strlen(inputtext))
			{
				static const fmt_str[] =
				"\
				    {F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
				    \nВаш аккаунт найден в базе данных, поэтому Вам нужно\
				    \nпройти авторизацию. Введите свой пароль в поле.\
				";
				new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
				format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
				ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация.", string, "Далее", "");
				return 1;
			}
			static const fmt_str[] = "SELECT * FROM `accounts` WHERE `p_name` = '%s' AND `p_password` = '%s'";
			new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 20 + 1];
			format(string, sizeof(string), fmt_str, p_i[playerid][p_name], inputtext);
			mysql_function_query(database, string, 1, "p_login", "i", playerid);
	    }
	}
В конец:

PHP:
forward p_check(playerid);
public p_check(playerid)
{
	new rows, fields;
	cache_get_data(rows, fields);
	if(rows)
	{
		static const fmt_str[] =
		"\
		    {F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
		    \nВаш аккаунт найден в базе данных, поэтому Вам нужно\
		    \nпройти авторизацию. Введите свой пароль в поле.\
		";
		new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
		format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
		ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация.", string, "Далее", "");
	}
	else
	{
	    static const fmt_str[] =
		"\
		    {F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
			\nВаш аккаунт не найден в базе данных, поэтому Вам\
			\nнужно пройти регистрацию. Введите пароль в поле.\
		";
		new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
		format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
		ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", string, "Далее", "");
	}
	return 1;
}

forward p_login(playerid);
public p_login(playerid)
{
	new rows, fields;
	cache_get_data(rows, fields);
	if(rows)
	{
	    cache_get_field_content(0, "p_email", p_i[playerid][p_email], database, 50);
	    cache_get_field_content(0, "p_referral", p_i[playerid][p_referral], database, MAX_PLAYER_NAME);
	    p_i[playerid][p_sex] = cache_get_field_content_int(0, "p_sex");
	    p_i[playerid][p_skin] = cache_get_field_content_int(0, "p_skin");
	    p_i[playerid][p_score] = cache_get_field_content_int(0, "p_score");
	    authorization[playerid] = true;
	    SpawnPlayer(playerid);
	}
	else
	{
		static const fmt_str[] =
		"\
		    {F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
		    \nВаш аккаунт найден в базе данных, поэтому Вам нужно\
		    \nпройти авторизацию. Введите свой пароль в поле.\
		";
		new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
		format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
		ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация.", string, "Далее", "");
	}
	return 1;
}
База данных: .

PHP:
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу