Szerző Téma: Mysql betöltés  (Megtekintve 1416 alkalommal)

Mysql betöltés
« Dátum: 2012. szeptember 22. - 17:57:56 »
0 Show voters
Csövi mindenki :D
Elég régen kértem már helpet, mert nem volt rá szükség, de most viszont van :)
[pawn]       format(Query, sizeof(Query), \"INSERT INTO `playerek`(Név,AdminSzint) VALUES(\'%s\',\'%i\')\", PlayerName(playerid),szint); [/pawn]
Van ez a sor, és ez ugye lementi a táblába a nevét és az admin szintjét.
Azt akarom megcsinálni, hogy be is töltse a player csatlakozásakor :D
Aki megcsinálja +++ :)
Köszi.
[Kezdõ vagyok MySQL -ba még csak :D]
Dexter

Nem elérhető ►ѕтa

  • 2016
  • Newbie
    • Profil megtekintése
Mysql betöltés
« Válasz #1 Dátum: 2012. szeptember 22. - 18:19:34 »
+1 Show voters
Elsõként ajánlom átnézni (ha még nem ismered) kurta mysql regisztrációs rendszerét, tanulhatsz belõle.
Másodrészt pedig, másold be ezeket a funkcióidhoz, viszont elõtte hozz létre egy globális queryd változót (mi legalábbis úgy használjuk):
 

stock GetPlayerData( playerid, dataline[] ) {
new esced[ 24 + 1 ];
mysql_real_escape_string( PlayerName(playerid), esced );
format( queryd, sizeof(queryd), \"SELECT * FROM `players` WHERE `Név` = \'%s\'\", esced );
mysql_query( queryd );
mysql_store_result( );
mysql_fetch_row_format( dataline, \"|\" );
mysql_free_result( );
return true;
}

 
Majd amikor bejelentkezik( nálam jelen esetben Belepes(playerid), illetve hozz létre egy globális line változót. ):
 

stock Belepes(playerid)
{
new SetVarThing[sZAMUK][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, PVarSet, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[2]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

Mysql betöltés
« Válasz #2 Dátum: 2012. szeptember 22. - 18:29:29 »
0 Show voters
Idézetet írta: ►ѕтaЯ◄ date=1348330774\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27813\" data-ipsquote-contentclass=\"forums_Topic
Elsõként ajánlom átnézni (ha még nem ismered) kurta mysql regisztrációs rendszerét, tanulhatsz belõle.
Másodrészt pedig, másold be ezeket a funkcióidhoz, viszont elõtte hozz létre egy globális queryd változót (mi legalábbis úgy használjuk):
 

stock GetPlayerData( playerid, dataline[] ) {
new esced[ 24 + 1 ];
mysql_real_escape_string( PlayerName(playerid), esced );
format( queryd, sizeof(queryd), \"SELECT * FROM `players` WHERE `Név` = \'%s\'\", esced );
mysql_query( queryd );
mysql_store_result( );
mysql_fetch_row_format( dataline, \"|\" );
mysql_free_result( );
return true;
}

 
Majd amikor bejelentkezik( nálam jelen esetben Belepes(playerid), illetve hozz létre egy globális line változót. ):
 

stock Belepes(playerid)
{
new SetVarThing[sZAMUK][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, PVarSet, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[2]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

 

Köszi, ez hibátlan ahogy van :)
Meg van még 1 baj a makeadmin parancsommal.
parancs:
 
CMD:makeadmin(playerid,params[])
{
if(IsPlayerAdmin(playerid) || PlayerInfo[playerid][pAdminLevel] == 6)
{
new targetid, szint, msg[128];
if(sscanf(params,\"ui\",targetid,szint)) return SendClientMessage(playerid, COLOR_SERVER, \"/makeadmin [iD / Név] [AdminSzint]\");
{
if(szint < 0 || szint > 6) return SendClientMessage(playerid, COLOR_SERVER, \"Admin szintek: 0 | 1 | 2 | 3 | 4 | 5 | 6\");
PlayerInfo[playerid][pAdminLevel] = szint;
format(msg,sizeof(msg),\"Gratulálunk az új adminunknak!! Neve: %s  || Adta neki: %s  || Admin rang: %s\",TargetName(playerid),PlayerName(playerid),Admin_Szintek[szint]);
SendClientMessageToAll(COLOR_LIGHTBLUE,msg);
}
new Query[256];
format(Query, sizeof(Query), \"SELECT * FROM `playerek` WHERE `name` = \'%s\'\", PlayerName(playerid));
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0) // Ha a sorok száma nem 0 ( nem üres )
{
   new Query1[256];
format(Query1, sizeof(Query1), \"UPDATE `samp`.`playerek` SET `AdminSzint` = \'%i\' WHERE `Név` = %s\", szint,PlayerName(playerid));
mysql_query(Query1);
}
else
{
new Query2[256];
format(Query2,sizeof(Query2),\"INSERT INTO `samp`.`playerek` (`Név` ,`AdminSzint`)VALUES (\'%s\', \'%i\'\",PlayerName(playerid),szint);
mysql_query(Query2);
}
mysql_free_result();
}
return 1;
}

 
Az vele a baj, hogy hiába 0 -ra van téve a num rows akkor sem csinálja (insert és update) de ha megfordítom, akkor mindíg létrehozza ha adok magamnak admint (insert)
Ha ezt megoldod, erre is adok pluszt, (akárkinek)
A mostanira megy a + :)
köszi!!
Dexter
E: Még sem hibátlan :O
Amikor az OnPlayerConnect alá beírtam a Belepes(playerid); -t hibákat hozott rá.
Hibák:
 
D:\\samp scripting\\gamemodes\\mysql.pwn(305) : error 017: undefined symbol \"SZAMUK\"
D:\\samp scripting\\gamemodes\\mysql.pwn(305) : error 036: empty statement
D:\\samp scripting\\gamemodes\\mysql.pwn(306) : error 017: undefined symbol \"line\"
D:\\samp scripting\\gamemodes\\mysql.pwn(307) : error 017: undefined symbol \"split\"
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : error 017: undefined symbol \"line\"
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : warning 215: expression has no effect
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : error 001: expected token: \";\", but found \"]\"
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : error 029: invalid expression, assumed zero
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : fatal error 107: too many error messages on one line

 
Kurta rendszerét ismerem, csak az nem olyan mert én parancsokat csinálok :D
« Utoljára szerkesztve: 2012. szeptember 22. - 18:31:47 írta _I[TM]I_Dexter[CL] »

Mysql betöltés
« Válasz #3 Dátum: 2012. szeptember 22. - 18:51:06 »
+1 Show voters
stock Belepes(playerid)
{
        new line[ 64 + 1 ];
new SetVarThing[2][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, PVarSet, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[2]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

 
szükséges hozzá a \"split(..)\" is.
(google a barátod)
Spoiler for off - staR:
Ez nem az én GetPlayerData-m? :D

Nem elérhető ►ѕтa

  • 2016
  • Newbie
    • Profil megtekintése
Mysql betöltés
« Válasz #4 Dátum: 2012. szeptember 22. - 19:08:09 »
0 Show voters
Spoiler for off, sry:
Igen a tied, lusta voltam sajátot írni:D

Mysql betöltés
« Válasz #5 Dátum: 2012. szeptember 22. - 19:21:03 »
0 Show voters
Idézetet írta: TayLoR date=1348332666\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27813\" data-ipsquote-contentclass=\"forums_Topic

stock Belepes(playerid)
{
        new line[ 64 + 1 ];
new SetVarThing[2][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, PVarSet, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[2]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

 
szükséges hozzá a \"split(..)\" is.
(google a barátod)
Spoiler for off - staR:
Ez nem az én GetPlayerData-m? :D
 
Köszi Taylor neked is ment + , de még mindíg nem hibátlan XD
Errors: [2]
 
D:\\samp scripting\\gamemodes\\mysql.pwn(308) : error 017: undefined symbol \"PVarSet\"
D:\\samp scripting\\gamemodes\\mysql.pwn(312) : error 032: array index out of bounds (variable \"SetVarThing\")

 
Köszi elõre is! :)
Dexter

Mysql betöltés
« Válasz #6 Dátum: 2012. szeptember 22. - 19:24:16 »
+1 Show voters
stock Belepes(playerid)
{
        new line[ 64 + 1 ];
new SetVarThing[2][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, SetVarThing, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[1]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

Mysql betöltés
« Válasz #7 Dátum: 2012. szeptember 22. - 19:47:33 »
0 Show voters
Idézetet írta: TayLoR date=1348334656\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27813\" data-ipsquote-contentclass=\"forums_Topic

stock Belepes(playerid)
{
        new line[ 64 + 1 ];
new SetVarThing[2][32]; // jelen esetben 2
GetPlayerData(playerid, line);
split( line, SetVarThing, \'|\' );
sscanf(line, \"p<|>s[32]d\", SetVarThing[0], SetVarThing[1]);
if(mysql_num_rows() != 0)
{
pInfo[playerid][AdminLevel] = strval(SetVarThing[1]); // itt sima változót használtam, de ha akarod lehet pvarban is
}
return 1;
}

 

Így már jó is! :)
Köszönöm, letestelem :)
+ ment!

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 22. - 19:49:04 )

Arra még tudtok választ hogyan tudnám kimenteni ha kap admint valaki?
Például adok magamnak 6-os admint és mentse ki ebbe a táblába: playerek ebbe vannak: Név, AdminSzint
Köszi :D
[+ erre is érvényes]
Dexter
« Utoljára szerkesztve: 2012. szeptember 22. - 19:49:04 írta _I[TM]I_Dexter[CL] »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal