Szerző Téma: MySQL kérdés.  (Megtekintve 616 alkalommal)

MySQL kérdés.
« Dátum: 2012. december 05. - 21:07:16 »
0 Show voters
Hello mindenki.Egy kis gondom akadt a MySQL el.PHP ban nagyjából tudom hogy hogy mentsek, hogy töltsek be dolgokat, viszont már a pawnban elakadtam.
Pawn ban még azt is megtudom csinálni hogy eltárolja a dolgokat, viszont hogy betöltsek dolgot, az már nem megy.
Ezért segítségeteket kérném.Hogy megérthessem csinálok egy kis példát, amiben arra kérlek benneteket hogy segítsetek fel tölteni, majd ismét az adatokat betölteni.
Legyen 5 fajta változó:
 

new jatekos[MAX_PLAYER_NAME], jmoney, jpassword[30], bool:isvip, Float:izpos;

 
Ebböl az 5 változóbol a jelszót hash olni szeretném.
Elõször is egy kis teszt scriptet szeretnék csinálni mysql el, úgyhogy így folytatom:
 

public OnFilterScriptInit() {
jatekos = \"SSS\";
jpassword = \"tesztjelszo\";
jmoney = 155;
isvip = true;
jzpos = 15.0;
//Adatok eltárolása (Ezt szeretném megtudni válaszotokban, viszont tudomásom szerint így van:
/*
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS); // természetesen az adatok define olva vannak, és a táblázat is készen áll.
new str[100];
format(str, sizeof(str), \"INSERT INTO `testtable` (`jatekos`, `password`, `money`, `isvip`, `playerZpos`) VALUES (\'%s\', MD5(\'%s\'), \'%d\', \'%b\', \'%f\')\", jatekos, jpassword, jmoney, isvip, jzpos);
*/
// Betöltõs része.---------------------------------------------------
jatekos = \"\";
jpassword = \"\";
jmoney = 0;
isvip = false;
jzpos = 0.0;
//lenulláztam mindent, hogy tesztelhessük.
printf(\"%s || %s || %d || %b || %f\", jatekos, jpassword, jmoney, isvip, jzpos);
      return 1;
}

 
A lementõs részét remélem hogy jól csináltam.Ha nem akkor kérlek benneteket javítsátok.
A végsõ kérdésem az lenne, hogy hogyan tudom ezt ismét lekérdezni, és a jelszó hash-t visszaállítani.
Elõre köszönöm válaszotokat.
« Utoljára szerkesztve: 2012. december 07. - 20:42:42 írta xSkillZ7x »

MySQL kérdés.
« Válasz #1 Dátum: 2012. december 06. - 18:41:23 »
+1 Show voters
A titkosítás lényege hogy az egyirányú út. Visszafelé szinte lehetetlen végrehajtani.
 
#include <a_samp>
#include <a_mysql> // BlueG R7 mysql plugin
enum
PlayerData
{
jatekosnev[24],
jpassword[24],
jmoney,
bool:isvip,
Float:jzpos
}
stock const SQL_HOST[] =   \"localhost\";
stock const SQL_USER[] =   \"\";
stock const SQL_PASS[] =    \"\";
stock const SQL_DB[] =      \"\"
new
FCH; // Újabb csatlakozási pont mysqlhez ami ehhez a filterscripthez kötött.
new
PlayerInfo[MAX_PLAYERS][PlayerData]; // Minden egyes játékosnak létrehozva a fenti enum tömb a benne lévõ hivatkozásokkal/elnevezésekkel (persze külön típusuak)
public
OnFilterScriptInit()
{
FCH = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
// Késõbbiekben nem nullát kell írni hanem \"playerid\" kifejezést, mely egy bizonyos játékost jelöl. (mondjuk pont azt aki csatlakozik a szerverhez) OnPlayerConnect(playerid) <-- Ott a playerid
strcat(PlayerInfo[0][jatekosnev], \"SSS\", 24);
strcat(PlayerInfo[0][jpassword], \"tesztjelszo\", 24);
PlayerInfo[0][jmoney] = 155;
PlayerInfo[0][isvip] = true;
PlayerInfo[0][jzpos] = 15.0;
new
query[256];
format(query, sizeof(query), \"INSERT INTO `testtable` (`jatekosnev`, `password`, `money`, `isvip`, `playerZpos`) VALUES (\'%s\', MD5(\'%s\'), \'%d\', \'%b\', \'%f\')\",    PlayerInfo[0][jatekosnev],
                                                                                                                     PlayerInfo[0][jpassword],
                                                                                                                     PlayerInfo[0][jmoney],
                                                                                                                     PlayerInfo[0][isvip],
                                                                                                                     PlayerInfo[0][jzpos]);
mysql_function_query(FCH, query, false, \"THREAD_pelda\", \"d\", 12345);
return 1;
}
forward THREAD_pelda(egypeldaint);
public THREAD_pelda(egypeldaint)
{
//A játékos nevet és a jelszót nem törlöm mivel ezek adottak lesznek mikor egy játékos csatlakozni fog és beírja a jelszavát, és ezek segítségével lehet majd utasítást küldeni mysql oldalra hogy betudja azonosítani milyen adatokkal térjen vissza.
// Clear data
PlayerInfo[0][jmoney] = 0;
PlayerInfo[0][isvip] = false;
PlayerInfo[0][jzpos] = 0.0;
 
new
query[256];   
// Itt én kiválasztottam hogy melyik adatokkal térjen vissza mivel a másik kettõ már úgyis ismert, ami éppen a keresési feltétel.
format(query, sizeof(query), \"SELECT `money`,`isvip`,`playerZpos` FROM `testtable` WHERE `jatekosnev` = \'%s\' AND `password` = MD5(\'%s\')\", PlayerInfo[0][jatekosnev], PlayerInfo[0][jpassword]);
mysql_function_query(FCH, query, true, \"THREAD_load\", \"ss\", PlayerInfo[0][jatekosnev], PlayerInfo[0][jpassword]); // enable cache data sokkal gyorsabb adatfeldolgozás
return 1;
}
forward THREAD_load(str_1[], str_2[]);
public THREAD_load(str_1[], str_2[])
{
new
iRows,
iFields,
iFetch[24]; // Egy string változó soronként ebbe kerül ideiglenesen a beolvasott adat míg megfelelõ átalakítás után a jó változóba kerül tárolásra.
cache_get_data(iRows, iFields, FCH);
if(iRows == 0) return printf(\"A megadott feltételekkel nem létezik adatsor %s, %s\", str_1, str_2);
cache_get_row(0, 0, iFetch, FCH);
PlayerInfo[0][jmoney] = strval(iFetch);
cache_get_row(0, 1, iFetch, FCH);
PlayerInfo[0][isvip] = !!strval(iFetch);
cache_get_row(0, 2, iFetch, FCH);   
PlayerInfo[0][jzpos] = floatstr(iFetch);
printf(\"%s || %s || %d || %b || %f\", PlayerInfo[0][jatekosnev], PlayerInfo[0][jpassword], PlayerInfo[0][jmoney], PlayerInfo[0][isvip], PlayerInfo[0][jzpos]);
return 1;
}

MySQL kérdés.
« Válasz #2 Dátum: 2012. december 07. - 13:55:19 »
0 Show voters
Nagyon szépen köszönöm.Viszont lenne egy kérdésem.Ha én <b>G-sTyLeZzZ</b> pluginját használnám lenne különös gond?(Más funkciók vannak).De ettöl függetlenûl letöltom azt amit írtál.Köszi.Ameddig bele nem jövök, addig kicsit bajos lessz, viszont utána remélem megy majd legalább annyira mint a fájlkezelõ.Amúgy hagytam volna fájlkezelõn, csak annyi a gond hogy most pár php cuccot irogatok (Server - Weboldal) és egyes dolgokat mysql segítségével letudok kérdezni.Nah de köszi.Egyelõre még nem zárok, mert ha véletlenül még akadna valami gondom ne kelljen új topicot nyissak.

MySQL kérdés.
« Válasz #3 Dátum: 2012. december 07. - 18:11:37 »
+1 Show voters
Egyrõl írtunk BlueG aka GStylezzz.
http://forum.sa-mp.com/showthread.php?t=56564

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal