Szerző Téma: Mysql kiválasztás hiba  (Megtekintve 1071 alkalommal)

Mysql kiválasztás hiba
« Dátum: 2014. április 20. - 23:11:32 »
0 Show voters
Sziasztok, nem tudom mi lehet a baja a kiválasztásomnak, megcsináltam a felhasználót, de azt írja, hogy nincs ilyen felhasználó.
Kód:
 
      format(Query, sizeof(Query), \"SELECT * from `felhasznalok` WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
   format(Query, sizeof(Query), \"SELECT * from `felhasznalok` WHERE jelszo = \'%s\'\", FInfo[playerid][Jelszo]);
   mysql_query(Query);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
      SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
   }
   else
   {
      SendClientMessage(playerid, -1, \"Hibás jelszó!\");
   }
}
else
{
   SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Enum:
 
enum FelhasznaloInfo
{
Felhasznalonev,
Jelszo,
};
new FInfo[MAX_PLAYERS][FelhasznaloInfo];

 
Ahogy beállítom a változókat:
 
FInfo[playerid][Felhasznalonev] = strval(inputtext);
FInfo[playerid][Jelszo] = strval(inputtext);
« Utoljára szerkesztve: 2014. április 21. - 13:39:06 írta Campe3r »

Nem elérhető Erik3333

  • 945
  • SMF | phpBB | TS3 | PHP | HTML | CSS | JS | PAWN | JAVA
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #1 Dátum: 2014. április 21. - 12:18:16 »
+1 Show voters
Próbáld meg ezzel:
 
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
}
else
{
SendClientMessage(playerid, -1, \"Hibás jelszó!\");
}
}
else
{
SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Ez ugyanaz, csak egybevettem a két lekérdezést.
 
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
}
else
{
SendClientMessage(playerid, -1, \"Hibás felhasználónév vagy jelszó!\");
}
mysql_free_result();

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #2 Dátum: 2014. április 21. - 13:03:04 »
+1 Show voters
Néhány észrevétel: a FROM-ot mysql utasításban csupa nagy betûvel szokás írni. (Ki tudja, még lehet ez is a hiba oka, bár nem hiszem. De azért használd csak nagy betûkkel!) Az enumban a felhasználónév változója integer. Vagyis egész szám. Oda mégis hogy a jó életbe akarsz stringet menteni? Ehhez kapcsolódik a következõ probléma: a felhasználónevet strval függvénnyel mi a fenéért alakítod át számmá? Vagy talán azt a szót, hogy \"Nevem\" számként akarod tárolni? Sok sikert hozzá... Ugyanezek vannak a jelszóval is. És ezzel rá is jöttünk a hiba okára: a feltételben valamilyen szám szerepel, pl. a felhasznalonev = 74749264, pedig te ne ezt szeretnéd. De ez szerepel, mert a forráskódban ezt adtad meg, szóval gyakorlatilag a kód nem hibás, csupán azt csinálja, amit megadtál neki. Ráadásul jelenleg az a változó integer, azaz egész szám típusú, de te a lekérdezésnél stringként, azaz karakterláncként, %s jellel adod meg. De ez tök mindegy, ha egyszer a változó értéke nem a szükséges felhasználónév és nem is a szükséges jelszó. Arról nem is beszélve, hogy a lekérdezés sem megfelelõ, még ha az értékek jók is lennének benne. Aztán ha ezen felül még van probléma, az már a te dolgod, ugyanis én már nem igazán vágom az elavult R6-ot, csak a legújabb R38-at, bocsi. Megírtam neked jól (format helyett trükköztem és egy másik függvényt használtam, remélem, nem nagy baj):
 
      format(Query, sizeof(Query), \"SELECT * FROM felhasznalok WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
   format(Query, sizeof(Query), \"SELECT * FROM felhasznalok WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);
   mysql_query(Query);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
      SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
   }
   else
   {
      SendClientMessage(playerid, -1, \"Hibás jelszó!\");
   }
}
else
{
   SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Enum:
 
enum FelhasznaloInfo
{
Felhasznalonev[32], // Nem tudom, hoy hány karakter lehet nálad, de most lesz 32
Jelszo[32] // Nem tudom, hoy hány karakter lehet nálad, de most lesz 32 - amúgy ide már nem kell vesszõ, ha ez a legutolsó \'tagja\' az enumnak.
};
new FInfo[MAX_PLAYERS][FelhasznaloInfo];

 
A karakterláncoo enumos változókba való eltárolása:
 
strins([code=pawn]FInfo[playerid][Felhasznalonev, inputtext, 0)
strins(FInfo[playerid][Jelszo], inputtext, 0);

 
Amúgy lehet, hogy alapból a stringnek üresnek kell lennie, de sztem az egész stringet felülírja a függvény. Nem tudom, nem nagyon használtam. Ha s*@r, még üres alap stringgel is, akkor használj simán formatot!


Huh! Tabletrõl írtam, többet is, mint amennyit akartam. De finish. Ha még ezen felül is találok hibákat, leírom rájuk a megoldást, vagy ha még így sem mükszik a dolog, szólj róla, hátha tudok még segíteni.
:)

Mysql kiválasztás hiba
« Válasz #3 Dátum: 2014. április 21. - 13:31:50 »
0 Show voters
Köszi ez mûködik, csak annyi a problémám, hogy ha nem relogolok akkor nem átalakítja a stringet, ha beírok valami msát hanem hozzáadja
Példa: beírom felhasználónévhez elõször, hogy: teszt, akkor jó, de ha átváltoztatom teszt2-re, akkor tesztteszt2 lesz a változó értéke. Hogyan tudnám ezt megcsinálni?

Dupla hozzászólás automatikusan összefûzve. ( 2014. április 21. - 13:38:57 )

Megoldottam úgy, hogy elötte kitörölje a string-et, majd utána írja csak be. Köszönöm a segítséget, megy a +
« Utoljára szerkesztve: 2014. április 21. - 13:38:57 írta Campe3r »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #4 Dátum: 2014. április 21. - 19:26:55 »
0 Show voters
Az azért egy kicsit nagyon zavaró volt, hogy a kisebb kérdések témában leírtam, hogy ne hallgass mások hülyeségére, hanem csináld így (vagy formattal), ennek ellenére te számmá alakítottad az inputtextet és csodálkoztál, hogy nem mûködik.
[mod]A dupla hozzászólásokra pedig figyelj oda! Nem egyszer szóltam már rád emiatt. Használd a szerkesztés funkciót![/mod]

Mysql kiválasztás hiba
« Válasz #5 Dátum: 2014. április 20. - 23:11:32 »
0 Show voters
Sziasztok, nem tudom mi lehet a baja a kiválasztásomnak, megcsináltam a felhasználót, de azt írja, hogy nincs ilyen felhasználó.
Kód:
 
      format(Query, sizeof(Query), \"SELECT * from `felhasznalok` WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
   format(Query, sizeof(Query), \"SELECT * from `felhasznalok` WHERE jelszo = \'%s\'\", FInfo[playerid][Jelszo]);
   mysql_query(Query);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
      SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
   }
   else
   {
      SendClientMessage(playerid, -1, \"Hibás jelszó!\");
   }
}
else
{
   SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Enum:
 
enum FelhasznaloInfo
{
Felhasznalonev,
Jelszo,
};
new FInfo[MAX_PLAYERS][FelhasznaloInfo];

 
Ahogy beállítom a változókat:
 
FInfo[playerid][Felhasznalonev] = strval(inputtext);
FInfo[playerid][Jelszo] = strval(inputtext);
« Utoljára szerkesztve: 2014. április 21. - 13:39:06 írta Campe3r »

Nem elérhető Erik3333

  • 945
  • SMF | phpBB | TS3 | PHP | HTML | CSS | JS | PAWN | JAVA
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #6 Dátum: 2014. április 21. - 12:18:16 »
0 Show voters
Próbáld meg ezzel:
 
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
}
else
{
SendClientMessage(playerid, -1, \"Hibás jelszó!\");
}
}
else
{
SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Ez ugyanaz, csak egybevettem a két lekérdezést.
 
format(Query, sizeof(Query), \"SELECT felhasznalonev from `felhasznalok` WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);//felhasznalonev, * helyett -> biztonság
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
}
else
{
SendClientMessage(playerid, -1, \"Hibás felhasználónév vagy jelszó!\");
}
mysql_free_result();

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #7 Dátum: 2014. április 21. - 13:03:04 »
0 Show voters
Néhány észrevétel: a FROM-ot mysql utasításban csupa nagy betûvel szokás írni. (Ki tudja, még lehet ez is a hiba oka, bár nem hiszem. De azért használd csak nagy betûkkel!) Az enumban a felhasználónév változója integer. Vagyis egész szám. Oda mégis hogy a jó életbe akarsz stringet menteni? Ehhez kapcsolódik a következõ probléma: a felhasználónevet strval függvénnyel mi a fenéért alakítod át számmá? Vagy talán azt a szót, hogy \"Nevem\" számként akarod tárolni? Sok sikert hozzá... Ugyanezek vannak a jelszóval is. És ezzel rá is jöttünk a hiba okára: a feltételben valamilyen szám szerepel, pl. a felhasznalonev = 74749264, pedig te ne ezt szeretnéd. De ez szerepel, mert a forráskódban ezt adtad meg, szóval gyakorlatilag a kód nem hibás, csupán azt csinálja, amit megadtál neki. Ráadásul jelenleg az a változó integer, azaz egész szám típusú, de te a lekérdezésnél stringként, azaz karakterláncként, %s jellel adod meg. De ez tök mindegy, ha egyszer a változó értéke nem a szükséges felhasználónév és nem is a szükséges jelszó. Arról nem is beszélve, hogy a lekérdezés sem megfelelõ, még ha az értékek jók is lennének benne. Aztán ha ezen felül még van probléma, az már a te dolgod, ugyanis én már nem igazán vágom az elavult R6-ot, csak a legújabb R38-at, bocsi. Megírtam neked jól (format helyett trükköztem és egy másik függvényt használtam, remélem, nem nagy baj):
 
      format(Query, sizeof(Query), \"SELECT * FROM felhasznalok WHERE felhasznalonev = \'%s\'\", FInfo[playerid][Felhasznalonev]);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
   format(Query, sizeof(Query), \"SELECT * FROM felhasznalok WHERE felhasznalonev = \'%s\' AND jelszo = \'%s\'\", FInfo[playerid][Felhasznalonev], FInfo[playerid][Jelszo]);
   mysql_query(Query);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
      SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\");
   }
   else
   {
      SendClientMessage(playerid, -1, \"Hibás jelszó!\");
   }
}
else
{
   SendClientMessage(playerid, -1, \"Nem létezõ felhasználó!\");
}
mysql_free_result();

 
Enum:
 
enum FelhasznaloInfo
{
Felhasznalonev[32], // Nem tudom, hoy hány karakter lehet nálad, de most lesz 32
Jelszo[32] // Nem tudom, hoy hány karakter lehet nálad, de most lesz 32 - amúgy ide már nem kell vesszõ, ha ez a legutolsó \'tagja\' az enumnak.
};
new FInfo[MAX_PLAYERS][FelhasznaloInfo];

 
A karakterláncoo enumos változókba való eltárolása:
 
strins([code=pawn]FInfo[playerid][Felhasznalonev, inputtext, 0)
strins(FInfo[playerid][Jelszo], inputtext, 0);

 
Amúgy lehet, hogy alapból a stringnek üresnek kell lennie, de sztem az egész stringet felülírja a függvény. Nem tudom, nem nagyon használtam. Ha s*@r, még üres alap stringgel is, akkor használj simán formatot!


Huh! Tabletrõl írtam, többet is, mint amennyit akartam. De finish. Ha még ezen felül is találok hibákat, leírom rájuk a megoldást, vagy ha még így sem mükszik a dolog, szólj róla, hátha tudok még segíteni.
:)

Mysql kiválasztás hiba
« Válasz #8 Dátum: 2014. április 21. - 13:31:50 »
0 Show voters
Köszi ez mûködik, csak annyi a problémám, hogy ha nem relogolok akkor nem átalakítja a stringet, ha beírok valami msát hanem hozzáadja
Példa: beírom felhasználónévhez elõször, hogy: teszt, akkor jó, de ha átváltoztatom teszt2-re, akkor tesztteszt2 lesz a változó értéke. Hogyan tudnám ezt megcsinálni?

Dupla hozzászólás automatikusan összefûzve. ( 2014. április 21. - 13:38:57 )

Megoldottam úgy, hogy elötte kitörölje a string-et, majd utána írja csak be. Köszönöm a segítséget, megy a +
« Utoljára szerkesztve: 2014. április 21. - 13:38:57 írta Campe3r »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Mysql kiválasztás hiba
« Válasz #9 Dátum: 2014. április 21. - 19:26:55 »
0 Show voters
Az azért egy kicsit nagyon zavaró volt, hogy a kisebb kérdések témában leírtam, hogy ne hallgass mások hülyeségére, hanem csináld így (vagy formattal), ennek ellenére te számmá alakítottad az inputtextet és csodálkoztál, hogy nem mûködik.
[mod]A dupla hozzászólásokra pedig figyelj oda! Nem egyszer szóltam már rád emiatt. Használd a szerkesztés funkciót![/mod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal