Szerző Téma: MySQL  (Megtekintve 1553 alkalommal)

MySQL
« Dátum: 2013. július 02. - 09:01:38 »
0 Show voters
Üdv.
Segítségre lenne szükségem  :sly:
Az a gondom, hogy átolvastam a MySQL DB tudnivalókat, úgy nagyjából meg is értettem, csak
az a gond, hogy nem teljesen, kurta mysql rendszerét és átnéztem csináltam egy parancsot
az õ parancsai alapján ugyan abban a szkriptben, de az sem jött össze :/
R7 plugin-t használok, valaki tudna egy példát írni arra, hogyan UPDATELJEK pl meg kiolvasás
Az érdekelne engem, hogy pl:
Olvassa ki egy változóba a jelszót, amelyik sorban a fnév Azzeroth
Azt tudom, hogy \"SELECT `pass` FROM accounts WHERE name = `Azzeroth`\"
csak a query függvényekkel nem vagyok tisztában miket kell pontosan :/
És valaki le tudna írni egy kiolvasás és egy update részletet? :confused: nagyon megköszönném  :D
És egybõl menne is a plusz, elég sok ideje szenvedem már ezzel   :Cry2:

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
MySQL
« Válasz #1 Dátum: 2013. július 02. - 09:41:39 »
0 Show voters
format(Query ,100, \"SELECT * FROM players WHERE name=\'ember\' AND pass=\'lolxD24\'\");

 
http://sampforum.hu/index.php?topic=9285
r7 a legjobb plugin de a nagyon nehéz.. probáltam én is megtanulni már azokat a dolgokat de nekem sem ment valami fényesen ezért mentem lejebb a verzióval.. inkább ha mySQL -t tanulsz kezdjél bele az r6 tanulásába sokkal jobban megérted.. linkeltem egy leírást az r6 leírást azt ha tanulod megérted.
« Utoljára szerkesztve: 2013. július 02. - 09:43:27 írta ZyZu »

MySQL
« Válasz #2 Dátum: 2013. július 02. - 11:11:13 »
0 Show voters
Háát belenéztem az r6-ba azzal kezdtem el, csak megláttam r7, mondom újabb jobb az, de nekem a kiolvasásban még az r6-is gondot okoz :/
Ha r6-tal csinálom meg azt nehéz lesz késõbb átírni r7-re?:/
Meg tényleg csak annyi, hogy r6-ból leírnál nekem annyit, hogyan olvassan ki egy megadott helyrõl
Mert ezt hogy kiválasztja a sort meg bla, ezt nem értem :/
csak annyi, hogy pl megadom h amelyik sorban a név azzeroth pl akkor onnan kell a jelszó :| ennyiben kellene csak segítség ^^, meg r6 plugin és inc link mert azt nem találtam :/
Beraktam ahogy írják::
 
public OnPlayerCommandText(playerid, cmdtext[])
{
new index, cmd[20];
cmd = strtok(cmdtext, index);
if (strcmp(cmd, \"/teszt\", true) == 0)
{
new tmp[20];
tmp = strtok(cmdtext, index);
new line[128], MyRegID, Pass[64];
new query[128];
format(query, sizeof(query), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
mysql_query(query);
mysql_store_result();
mysql_fetch_row(line);
mysql_free_result();
sscanf(line, \"p<|>d{s[24]s[20]}s[30]{s[30]s[30]d}\", MyRegID, Pass);
SetPVarInt(playerid, \"RegID\", MyRegID);
if(Egyezik(strval(tmp), Pass))
{
   //LoginPlayer(playerid, Pass);
}
else
       {
   SendClientMessage(playerid, -1, \"HIBA: Rossz jelszó.\");
   return 1;
}
    return 1;
}
return 0;
}

 
és ezt kapom és nem jövök rá :ss :
 
D:\\samp0.3x repack\\gamemodes\\mysql_test.pwn(30) : error 047: array sizes do not match, or destination array is too small
D:\\samp0.3x repack\\gamemodes\\mysql_test.pwn(35) : error 047: array sizes do not match, or destination array is too small
D:\\samp0.3x repack\\gamemodes\\mysql_test.pwn(47) : error 035: argument type mismatch (argument 1)
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase
 
3 Errors.

MySQL
« Válasz #3 Dátum: 2013. július 02. - 11:13:57 »
0 Show voters
Idézetet írta: ZyZu date=1372750899\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"39156\" data-ipsquote-contentclass=\"forums_Topic

format(Query ,100, \"SELECT * FROM players WHERE name=\'ember\' AND pass=\'lolxD24\'\");

 
http://sampforum.hu/index.php?topic=9285
r7 a legjobb plugin de a nagyon nehéz.. probáltam én is megtanulni már azokat a dolgokat de nekem sem ment valami fényesen ezért mentem lejebb a verzióval.. inkább ha mySQL -t tanulsz kezdjél bele az r6 tanulásába sokkal jobban megérted.. linkeltem egy leírást az r6 leírást azt ha tanulod megérted.
 
Nem is nehéz az R7.
Mellesleg másold már be az egész scriptet, mert tuti, hogy valamit rosszul másoltál.

MySQL
« Válasz #4 Dátum: 2013. július 02. - 11:31:05 »
0 Show voters
Próbáltam egy tesztet csinálni, de sajnos még cask nem is logolt :/
 
#include <a_samp>
#include <a_mysql>
#include <sscanf2>
 
#define MYSQL_HOST       \"127.0.0.1\"
#define MYSQL_USER       \"root\"
#define MYSQL_PASS       \"\"
#define MYSQL_DB         \"samp\"
 
public OnGameModeInit()
{
mysql_debug(1);
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
     return 1;
}
public OnGameModeExit()
{
mysql_close();
     return 1;
}
public OnPlayerSpawn(playerid)
{
new line[128], MyRegID, Pass[64];
new query[128];
format(query, sizeof(query), \"SELECT * FROM `accounts` WHERE `name` = \'%s\'\", pName(playerid));
mysql_query(query);
mysql_store_result();
mysql_fetch_row(line);
mysql_free_result();
sscanf(line, \"p<|>d{s[24]s[20]}s[30]{s[30]s[30]d}\", MyRegID, Pass);
SetPVarInt(playerid, \"RegID\", MyRegID);
if(Egyezik(\"123456\", Pass))
{
    new string[100];
    format(string, 100, \"Megegyezett Pass és RegID:\", Pass, MyRegID);
SendClientMessage(playerid, -1, \"\");
}
else
      {
SendClientMessage(playerid, -1, \"HIBA: Rossz jelszó.\");
return 1;
}
return 1;
}
stock pName(pid)
{
new name[64];
GetPlayerName(pid, name, sizeof(name));
return name;
}
stock Egyezik(comp[], with[])
{
new LenghtComp = strlen(comp);
new LenghtWith = strlen(with);
new Character;
if( LenghtComp != LenghtWith ) return false;
for( new i; i < LenghtComp; i++ )
{
    if( comp == with )
    {
        Character++;
}
}
if( LenghtComp == Character ) return true;
return false;
}

 
Ja és Run time error 19: file or function not found. :/
Te el tudod értelmesen magyarázni, amire én kíváncsi vagyok?:/ mert mindenki csak kerülgeti :sss

MySQL
« Válasz #5 Dátum: 2013. július 02. - 11:34:59 »
0 Show voters
Esetleg nem tölt be a mysql plugin?

MySQL
« Válasz #6 Dátum: 2013. július 02. - 11:36:51 »
0 Show voters
jóó, nincs már error 19, dee, bállítottam, ugye ahogyan ott van ha pass = 123456-tal (adatbázisban a jelszónál az van) és még is azt írja h nem egyeznek :/ az lehet a gond h varchar a típusa DB-ben?:o
ja meg, ezt a sort elmagyaráznád nekem, kérlek ^^
 
   sscanf(line, \"p<|>d{s[24]s[20]}s[30]{s[30]s[30]d}\", MyRegID, Pass);
« Utoljára szerkesztve: 2013. július 02. - 11:41:54 írta anorennia »

MySQL
« Válasz #7 Dátum: 2013. július 02. - 14:15:44 »
+1 Show voters
Ez a kiolvasás rész úgy mûkszik, hogy pár dolgot nem vesz figyelembe ami a {} között van. Szóval csak egy integert olvas ki meg 1 jelszót.
Ha sscanfban nem értesz sokszor valamit, akkor szerintem nézd meg ezt a topicot: http://forum.sa-mp.com/showthread.php?t=120356.
Itt van sok példa.

MySQL
« Válasz #8 Dátum: 2013. július 02. - 21:08:24 »
0 Show voters
Ez idáig rendben van akkor, ki tudok már számszerint 1-esével olvasni, el is tudom tárolni, de rájöttem közben, ha például valaki csatlakozik és elkell tárolni enum-ba valamiket :|
Amúgy hogy érdemesebb enummal eltárolni minden dolgot, vagy folyamatosan mindig kiolvastatni?^^
Abban tudnál segíteni, hogy kiolvasok DB-bõl egy sort \"SELECT * FROM accounts WHERE password=\'1234\'\"
néztem ChuckNoriss leírását, de lehet ennyire buta vagyok, de nem értek, meg a beolvasásból sokat :/
az kellene nekem pl:
query(sor ahol jelszó 1234)
életet,pénz,pontot beolvassa és eltárolom egy változóba.

MySQL
« Válasz #9 Dátum: 2013. július 02. - 22:22:44 »
+1 Show voters
A * jelöli hogy minden adattal vissza térjen amennyi adatsorban a feltételeknek egyezést talál.
Játékos regisztrációs adatnál két dolgot szokás megadni feltételnek mégpedig a felhasználó nevet illetve a jelszót.
 
SELECT * FROM accounts WHERE name=\'anorennia\' AND password=\'1234\'

 
Ez minden olyan sorral visszatért ahol a felhasználó név és a jelszó megegyezik, ez igaz általában egyetlen egy sor, nem részletezem miért, erre te magad is rájössz.
Na mivel régóta nem írtam db adatkezelést, így biztos lesz mit alakítani rajt de mûködését talán megérted belõle:
 
#include <a_samp>
#define FILTERSCRIPT
#include <zcmd>
new
DB:USERDB;
enum
enum_pInfo
{
Money,
Score,
Float:Health
};
new
PlayerInfo[MAX_PLAYERS][enum_pInfo];
public
OnFilterScriptInit( )
{
    USERDB = db_open(\"users.db\"); // Adatbázis megnyítása
//  Arra figyelj hogy csak egy adatsort hozz létre ugyanazzal a felhasználó névvel illetve jelszóval!!!!!
//   db_query(USERDB, \"CREATE TABLE `accounts` (name TEXT, pass TEXT, Money NUMERIC, Score NUMERIC, Health FLOAT)\");  // Adattábla szerkezet létrehozás
//   db_query(USERDB, \"INSERT INTO `accounts` (name, pass, Money, Score, Health) VALUES (\'anorennia\', \'1234\', 3500, 201, 80.65)\"); // Egyetlen adatsor beszúrása
// Teszt:
cmd_login(0, \"1234\");
 
return 1;
}
public
OnFilterScriptExit()
{
db_close(USERDB);
return 1;
}
CMD:login(playerid, params[])
{
if(isnull(params)) SendClientMessage(playerid, -1, \"Használat: /login password\");
else
{
new
   string[128],
   DBResult:qresult;
//      GetPlayerName(playerid, string, 128);
string = \"anorennia\";
printf(\"Felhasználó név:%s  Jelszó:%s\", string, params);
format(string, sizeof string, \"SELECT * FROM accounts WHERE name=\'%s\' AND pass=\'%s\'\", string, params);
qresult = db_query(USERDB, string);
 
if(db_num_rows(qresult) == 1) // Ellenõrzés létezik-e adatsor
{
   db_get_field_assoc(qresult, \"Money\", string, 128);
   PlayerInfo[playerid][Money] = strval(string);
   db_get_field_assoc(qresult, \"Score\", string, 128);
   PlayerInfo[playerid][score] = strval(string);
   db_get_field_assoc(qresult, \"Health\", string, 128);
   PlayerInfo[playerid][Health] = floatstr(string);
   print(\" \");
   printf(\"DB teszt: Money: %d, Score: %d Health: %f\", PlayerInfo[playerid][Money], PlayerInfo[playerid][score], PlayerInfo[playerid][Health]);
   print(\" \");
} else {
   print(\"Nincs ilyen adatsor\");
//         SendClientMessage(playerid, -1, \"Nem vagy regisztrálva, vagy rossz jelszót adtál meg\");
}
db_free_result(qresult);
}
return 1;
}

MySQL
« Válasz #10 Dátum: 2013. július 02. - 22:26:52 »
0 Show voters
Ez alap SAMP SQL v DB vagy minek hívják?:O
Mert én nem erre gondolok :/

MySQL
« Válasz #11 Dátum: 2013. július 02. - 22:27:50 »
0 Show voters
Ez alap sa-mp.
Hát akkor nem kellene ezt írni:
 
Abban tudnál segíteni, hogy kiolvasok DB-bõl egy sort \"SELECT * FROM accounts WHERE password=\'1234\'\"[/quote]
Edit:
Amúgy mire gondoltál akkor?
« Utoljára szerkesztve: 2013. július 02. - 22:52:58 írta ɐʞzssǝlosz »

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
MySQL
« Válasz #12 Dátum: 2013. július 03. - 00:32:04 »
0 Show voters
Az a problémája, hogy nem érti a mySQL plugin r7-es verziójának használatát.

MySQL
« Válasz #13 Dátum: 2013. július 03. - 12:11:25 »
0 Show voters
A DB az adatbázist jelent tudtommal, de ha nem így van cáfolj meg :|

MySQL
« Válasz #14 Dátum: 2013. július 03. - 21:56:14 »
0 Show voters
De azt jelenti, csak hogy a samp SQLite verziója .db kiterjesztést használ adatbázisoknál ezért a DB kifejezés leginkább arra vonatkozik. (database.file vagyis DB fájl) ( ha nem hiszed nézd meg a windows mit ír ki típusként a fentebb szereplõ példában a ../scriptfiles/users.db fájlnál)
Mysql-nél sehol nincs ilyen rövidítés használva az egyszerûen, mysql adatbázis.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal