В принципе в некоторых функциях разобрался
но..
что главное то, что так и не могу разобраться до конца в том,как узнать находится ли аккаунт в базе данных или нет или верен ли введенный пароль игрока в диалог или нет :pardon:
Вид для печати
В принципе в некоторых функциях разобрался
но..
что главное то, что так и не могу разобраться до конца в том,как узнать находится ли аккаунт в базе данных или нет или верен ли введенный пароль игрока в диалог или нет :pardon:
вот пример моей функции
рекомендую посмотреть :smile:PHP код:
stock bool:IsAFexistAccount(name[])
{
new query[70];
format(query, sizeof query, "select id from table where name = '%s'", name); // запрос надо переделать под себя
new Cache:result = mysql_query(_, query);
new rows = cache_num_rows();
cache_delete(result);
return rows ? (true) : (false);
}
http://wiki.sa-mp.com/wiki/MySQL/R33
Ну в OnPlayerConnect что-то типа
И в колбэкеPHP код:
new string[50+MAX_PLAYER_NAME];
format(string, sizeof(string),"SELECT * FROM `Account` WHERE `NickName` = '%s' LIMIT 0,1", pNick(playerid));
mysql_function_query(iMySQL, string, true, "FindPlayerInTable", "i", playerid);//true - включаем кэширование запроса и тем самым мы сможем работать с данными, которые вернёт таблица
Пароль точно так же проверяется. Только можно прямо в диалоге выше занести пароль от аккаунта в переменную и потом уже проверять значение той самой переменной, а не посылать каждый раз запрос в БДPHP код:
forward FindPlayerInTable(playerid);
public FindPlayerInTable(playerid)
{
new rows, fields;
cache_get_data(rows, fields);// Проверяем сколько столбцов и строк "откликнулось" на запрос и можно регистрировать игрока
if(!rows)//Если нуль - значит аккаунт не найден
{
print("Аккаунт не найден");
}
else//Иначе хоть 1 столбец подходит под условие запроса и игрок зарегистрирован уже
{
}
return 1;
}
С паролем нормально или что-то не так?
:pardon:PHP код:
case 2:
{
if(!response) return SendClientMessage(playerid,COLOR_GREEN,"Вы вышли");
if(!strlen(inputtext))
{
format(Dialog_Enter,sizeof(Dialog_Enter),"\t%s добро пожаловать на сервер!\n\n\nВведите пароль:",PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid,2, DIALOG_STYLE_PASSWORD,"\tАвторизация",Dialog_Enter,"Ок","Отмена");
}
else
{
mysql_format(MySQL_ID,MySQL_Data,78+MAX_PLAYER_NAME,"SELECT * FROM "Base" WHERE `Name` = '%e' AND `password` = '%e'", PlayerInfo[playerid][pName], pPassword);
mysql_function_query(MySQL_ID,MySQL_Data, true, "OnPlayerLogin","s", playerid);
}
}
}
return 1;
}
void OnPlayerLogin(playerid)
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows)
{
format(Dialog_Enter,sizeof(Dialog_Enter),"Ваш ник зарегистрирован\n\nЛогин: %s\nВы ввели неверный пароль!\nПопробуйте еще раз:",PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD,"Авторизация",Dialog_Enter,"Вход","Отмена");
return 1;
}
PlayerLogged{playerid} = true;
SpawnPlayer(playerid);
return 1;
}
а?PHP код:
WHERE BINARY
Ну так а что говорит проверка кода в боевых условиях?
Ну запусти сервер и проверь, работает код или нет
Очень смешно,ну прям описаться..
не думаю что нужен полный колбэк диалогов и различные переменные что бы посмотреть функцию обработки запроса,а точнее отправятся или примуться данные,тут вроде не хватает переменной которую не трудно нарисовать в своей затейлевой голове,опять же у меня в данный момент есть только этот кусок кода,а дома я скорее всего появлюсь только завтра,увы вангованый ты наш тебя наверное кормят и поят родители и так-же обеспечивают тебя и дают жилье,мне же надо для этого всего работать.
Тогда два вопроса:
1) Раз вы не дома, какой вам толк от того, что мы оценим работоспособность кода? Запрос мешает вам продолжать разработку?
2) Что вам мешает проверить код по приезду домой?
На первый взгляд код верен. Возвратов не хватает и с заполнителем "%e" у многих часто бывают проблемы (строку вставляет не всю. Если будет так - поменяйте на обычный %s), но это не критично. Более подробно скажет только проверка кода в боевых условиях