PDA

Просмотр полной версии : [Вопрос] Basa Bd Mysql



ALIT13
11.12.2015, 17:22
Помогите уже не 1 раз пишу почему так не сохранияется другое
вот бд
http://ihost.pro-pawn.ru/image.php?di=2EU5
вот всё что я добавил

enum pInfo
{
pID,//ID
pPass[34],// Пароль
pEmail[34],
pAdmin,
pSkin,
pSex,
pName[30],
pCash,
pLevel,
pRegiste
}
new PlayerInfo[MAX_PLAYERS][pInfo];


stock SavePlayer(playerid)
{
if(GetPVarInt(playerid,"Logged") > 0)
{
new query_string[(21)+(20+MAX_PLAYER_NAME)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `Accounts` SET";

format(query_string, sizeof(query_string), "%s `Name` = '%s',", query_string, PlayerInfo[playerid][pName]);
format(query_string, sizeof(query_string), "%s `Password` = '%s'", query_string, PlayerInfo[playerid][pPass]);
format(query_string, sizeof(query_string), "%s `Skin` = '%d'", query_string, PlayerInfo[playerid][pSkin]);
format(query_string, sizeof(query_string), "%s `Sex` = '%d'", query_string, PlayerInfo[playerid][pSex]);
format(query_string, sizeof(query_string), "%s `Cash` = '%d'", query_string, PlayerInfo[playerid][pCash]);
format(query_string, sizeof(query_string), "%s `Level` = '%d'", query_string, PlayerInfo[playerid][pLevel]);
format(query_string, sizeof(query_string), "%s `Reg` = '%d'", query_string, PlayerInfo[playerid][pRegister]);

format(query_string, sizeof(query_string), "%s WHERE `Name` = '%s'", query_string, GN(playerid));
mysql_function_query(mysql_variable, query_string, false, "", "");
}
return true;
}

forward LoginCallback(playerid, password[]);
public LoginCallback(playerid, password[])
{
new rows, fields, string[144], maximum[128] ;
cache_get_data(rows, fields);
if(!rows)
{
if(GetPVarInt(playerid, "wrongPass") == 2)
return SendClientMessage(playerid,COLOR_RED,"Вы ввели 3 раза неверный пароль, и в целях безопастности вы были кикнуты с сервера!"), Kick(playerid);
SetPVarInt(playerid, "wrongPass", GetPVarInt(playerid, "wrongPass")+1);
format(string, sizeof(string), "{FFFFFF}Добро пожаловать на сервер {01B866}"NameServer"{FFFFFF}\n\nВаш аккаунт зарегистрирован у нас на сервере.\nВведите пароль в данное окно и нажмите кнопку ввод.\n\nВведите пароль: {FF0000}Неверный пароль осталось [%d/3 попыток]",GetPVarInt(playerid,"wrongPass"));
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "{FFFF00}Авторизация", string, "Вход", "Отмена");
return 1;
}
cache_get_field_content(0, "ID", maximum), PlayerInfo[playerid][pID] = strval(maximum);
cache_get_field_content(0, "Password", maximum), strmid(PlayerInfo[playerid][pPass], maximum, 0, strlen(maximum), 32);
cache_get_field_content(0, "Email", maximum), strmid(PlayerInfo[playerid][pEmail], maximum, 0, strlen(maximum), 32);
cache_get_field_content(0, "Level", maximum), PlayerInfo[playerid][pLevel] = strval(maximum);
cache_get_field_content(0, "Skin", maximum), PlayerInfo[playerid][pSkin] = strval(maximum);
cache_get_field_content(0, "Sex", maximum), PlayerInfo[playerid][pSex] = strval(maximum);
cache_get_field_content(0, "Cash", maximum), PlayerInfo[playerid][pCash] = strval(maximum);
cache_get_field_content(0, "Reg", maximum), PlayerInfo[playerid][pRegister] = strval(maximum);
if(PlayerInfo[playerid][pRegister] == 0)
{
PlayerInfo[playerid][pRegister] = 1;
PlayerInfo[playerid][pCash] = 970;
}
SetPVarInt(playerid, "Logged", 1);
SendClientMessage(playerid, -1, "{00FF00}Вы успешно авторизовались!");
SpawnPlayer(playerid);
SavePlayer(playerid);
return 1;
}

stock OnPlayerRegister(playerid, password[])
{
new str[198];
format(str, sizeof(str), "INSERT INTO `Accounts` (`Name`, `Password`) VALUES ('%s', '%s')", GN(playerid), password);
mysql_function_query(mysql_variable, str, false, "OnPlayerLogin","d", playerid);
return true;
}
stock OnPlayerLogin(playerid,password[])
{
new str[128];
format(str, sizeof(str),"SELECT * FROM `Accounts` WHERE `Name` = '%s' AND `Password` = '%s'", GN(playerid), password);
mysql_function_query(mysql_variable, str, true, "LoginCallback","ds", playerid, password);
return true;
}

ALIT13
11.12.2015, 22:51
Добавил код

Nurick
12.12.2015, 00:43
new query_string[(21)+(20+MAX_PLAYER_NAME)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `Accounts` SET";
Увеличьте длину ячеек массива. Не забывайте про нуль символ!

ALIT13
12.12.2015, 08:41
я изменил

stock SavePlayer(playerid)
{
if(GetPVarInt(playerid,"Logged") > 0)
{
new query[700] = "UPDATE `Accounts` SET ";
//format(query,sizeof(query),"UPDATE `Accounts` SET;

format(query, sizeof(query), "%s `Name` = '%s',", query, PlayerInfo[playerid][pName]);
format(query, sizeof(query), "%s `Password` = '%s'", query, PlayerInfo[playerid][pPass]);
format(query, sizeof(query), "%s `Skin` = '%d'", query, PlayerInfo[playerid][pSkin]);
format(query, sizeof(query), "%s `Sex` = '%d'", query, PlayerInfo[playerid][pSex]);
format(query, sizeof(query), "%s `Cash` = '%d'", query, PlayerInfo[playerid][pCash]);
format(query, sizeof(query), "%s `Level` = '%d'", query, PlayerInfo[playerid][pLevel]);
format(query, sizeof(query), "%s `Reg` = '%d'", query, PlayerInfo[playerid][pRegister]);

format(query, sizeof(query), "%s WHERE `Name` = '%s'", query, GN(playerid));
mysql_function_query(mysql_variable, query, false, "", "");
}
return true;
}

ПОЛУЧАЕТСЯ ИД ИМЯ ПАРОЛЬ ЗАПИСУЕТСЯ А ОСТАЛЬНОЕ ВСЁ ПУСТОЕ
http://ihost.pro-pawn.ru/image.php?di=IQF3

LOGI

[10:36:12] [WARNING] CMySQLResult::GetRowDataByName - field not found ("Email")
[10:36:12] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`Skin` = '0' `Sex` = '0' `Cash` = '970' `Level` = '0' `Reg` = '1' WHERE `Name` =' at line 1

gangzone.ini
12.12.2015, 10:53
stock SavePlayer(playerid)
{
/*
Зачем сохранять каждый раз Имя, Пароль, Скин, Пол ?
Если можно во время изменения этих данных сделать собственный UPDATE.
*/
if(GetPVarInt(playerid,"Logged") > 0)
{
new
query[500];//Сам счетай
mysql_format(mysql_variable, query, sizeof(query), "UPDATE `Accounts` SET `Cash` = '%d', `Level` = '%d', `Reg` = '%d' WHERE `Name` = '%e' LIMIT 1",
PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pRegister], GN(playerid));
mysql_tquery(mysql_variable, query, "", "");
}
return true;
}

ALIT13
12.12.2015, 11:16
так я и говорю скин и пол не сохраняются в бд

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

не пойму мне надо добавлять вёс с pInfo куда чтоб сохраналось в OnPlayerRegister после майла создоапть ещ штук 30 примеру pADMIN pHouse и так далее или что ?

stock OnPlayerRegister(playerid)
{
new str[308];
format(str, sizeof(str), "INSERT INTO `Accounts` (`Name`, `Password`, `Skin`, `Sex`, `Cash`, `Level`, `Email`) VALUES ('%s', '%s', '%d', '%d', '%d', '%d', '%s')", GN(playerid), PlayerInfo[playerid][pPass], PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pCash], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pEmail]); //
//mysql_function_query(mysql_variable, str, false, "OnPlayerLogin","d", playerid);
mysql_function_query(mysql_variable, str, false, "", "");
SpawnPlayer(playerid);
return true;
}

а это для чего ?

forward LoginCallback(playerid, password[]);
public LoginCallback(playerid, password[])
{
new rows, fields, string[144], maximum[128] ;
cache_get_data(rows, fields);
if(!rows)
{
if(GetPVarInt(playerid, "wrongPass") == 2)
return SendClientMessage(playerid,COLOR_RED,"Вы ввели 3 раза неверный пароль, и в целях безопастности вы были кикнуты с сервера!"), Kick(playerid);
SetPVarInt(playerid, "wrongPass", GetPVarInt(playerid, "wrongPass")+1);
format(string, sizeof(string), "{FFFFFF}Добро пожаловать на сервер {01B866}"NameServer"{FFFFFF}\n\nВаш аккаунт зарегистрирован у нас на сервере.\nВведите пароль в данное окно и нажмите кнопку ввод.\n\nВведите пароль: {FF0000}Неверный пароль осталось [%d/3 попыток]",GetPVarInt(playerid,"wrongPass"));
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "{FFFF00}Авторизация", string, "Вход", "Отмена");
return 1;
}
cache_get_field_content(0, "ID", maximum), PlayerInfo[playerid][pID] = strval(maximum);
cache_get_field_content(0, "Password", maximum), strmid(PlayerInfo[playerid][pPass], maximum, 0, strlen(maximum), 32);
cache_get_field_content(0, "Email", maximum), strmid(PlayerInfo[playerid][pEmail], maximum, 0, strlen(maximum), 32);
cache_get_field_content(0, "Level", maximum), PlayerInfo[playerid][pLevel] = strval(maximum);
cache_get_field_content(0, "Skin", maximum), PlayerInfo[playerid][pSkin] = strval(maximum);
cache_get_field_content(0, "Sex", maximum), PlayerInfo[playerid][pSex] = strval(maximum);
cache_get_field_content(0, "Cash", maximum), PlayerInfo[playerid][pCash] = strval(maximum);
//cache_get_field_content(0, "Reg", maximum), PlayerInfo[playerid][pRegister] = strval(maximum);
//if(PlayerInfo[playerid][pRegister] == 0)
//{
//PlayerInfo[playerid][pRegister] = 1;
//PlayerInfo[playerid][pCash] = 970;
//}
SetPVarInt(playerid, "Logged", 1);
SendClientMessage(playerid, -1, "{00FF00}Вы успешно авторизовались!");
SpawnPlayer(playerid);
SavePlayer(playerid);
return 1;
}