Szerző Téma: MySQL bejelentkezés ->minden jelszót rossznak érzékel.  (Megtekintve 878 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Dátum: 2013. május 31. - 15:27:08 »
0 Show voters
Sziasztok,a fent említett problémám van.
Elõre is köszönöm a segítséget.
 
CMD:bejelentkezes(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
new query[300]; //Creates our variables.
    GetPlayerName(playerid, nev, sizeof(nev)); //Gets the players name
    format(query, sizeof(query), \"SELECT IP FROM `felhasznalok` WHERE nev = \'%s\' LIMIT 1\", nev); //Formats the query, view above the code for a explanation
    mysql_query(query); //This is our query function to query the string
    mysql_store_result(); //We store the result.
    new rows = mysql_num_rows(); //We get how many rows the query returned.
    if(rows == 1)
    {
    new jelszo[128];
        if(sscanf(params,\"s[128]\",jelszo)) return SendClientMessage(playerid,-1,\"Használat: /bejelentkezes [Jelszó]\");
            new escapepass[100]; //
            mysql_real_escape_string(jelszo, escapepass); //We escape the inputtext to avoid SQL injections.
            format(query, sizeof(query), \"SELECT `nev` FROM felhasznalok WHERE nev = \'%s\' AND jelszo = SHA1(\'%s\')\", nev, escapepass);
            mysql_query(query);
            mysql_store_result();
            new numrows = mysql_num_rows();
            if(!numrows)
            {
                //This means that the password that the player
                //typed was incorrect and we will resend the dialog.
                new string[64];
                if(JelszoLehetosegek[playerid] > 1)
                {
                    JelszoLehetosegek[playerid] --;
                format(string,sizeof(string),\"Rossz jelszó,még ennyi lehetõséged van: %d\",JelszoLehetosegek[playerid]);
         SendClientMessage(playerid,-1,string);
         printf(\"%s elrontotta a jelszavát.\",nev);
         return 1;
      }
      else if(JelszoLehetosegek[playerid] == 1)
      {
          SendClientMessage(playerid,-1,\"Minden lehetõségedet elrontottad,ezért ki lettél rúgva!\");
          printf(\"%s ki lett rúgva mert háromszor rossz jelszót írt be.\",nev);
          Kick(playerid);
          return 1;
      }
            }
            else
            {
               new savingstring[20];
       GetPlayerName(playerid, nev, sizeof(nev));
       format(query, sizeof(query), \"SELECT * FROM felhasznalok WHERE nev = \'%s\'\", nev);
       //We only select the variables that we want to use.
       //We don\'t need things like the password string or the user string.
       mysql_query(query); //Queries the result
       mysql_store_result(); //Store a result because it\'s a SELECT statement.
       while(mysql_fetch_row_format(query,\"|\"))
       {
           //We use while so that it does a single query, not multiple
           //Especially when we have more variables. If there is more
           //Variables, you should just split the line with sscanf. To
           //Make it easier.
           mysql_fetch_field_row(savingstring, \"szint\"); Szint[playerid] = strval(savingstring);
           mysql_fetch_field_row(savingstring, \"xp\"); XP[playerid] = strval(savingstring);
           mysql_fetch_field_row(savingstring, \"perc\"); Perc[playerid] = strval(savingstring);
           mysql_fetch_field_row(savingstring, \"ora\"); Ora[playerid] = strval(savingstring);
           mysql_fetch_field_row(savingstring, \"penz\"); Penz[playerid] = strval(savingstring);
           //If you are wondering why I\'m using savingstring instead
           //Of a variable like using MoneyGiven right away, it\'s because
           //mysql_fetch_field_row requires a string.
       }
       mysql_free_result(); //We must always free a stored result
       SendClientMessage(playerid, -1, \"Sikeresen bejelentkeztél!\"); //Sends the client a message.
       Belepve[playerid] = 1; //Sets our logged in variable to one
       printf(\"%s bejelentkezett.\",nev);
       return 1;
            }
            //This means that there is a user in the database with the same
            //password that we typed, we now proceed by using the login function.
           
            mysql_free_result();
}
else SendClientMessage(playerid,-1,\"Még nem regisztráltál a szerverre!\");
}
return 1;
}

MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #1 Dátum: 2013. május 31. - 20:32:20 »
0 Show voters
Nem használod a mysql_free_result() eljárást miután használod a mysql_store_result().
http://wiki.sa-mp.com/wiki/MySQL#mysql_free_result

MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #2 Dátum: 2013. május 31. - 20:34:20 »
0 Show voters
Hát ilyen tabulátorozást meg káoszt jézusom.
Az egyik hiba itt lesz (hisz látszik az else if jóval bentebb van mint amire vonatkozna ergó elcsúszott a zárásod ha jól látom):
 
  if(!numrows)
            {
                //This means that the password that the player
                //typed was incorrect and we will resend the dialog.
                new string[64];
                if(JelszoLehetosegek[playerid] > 1)
                {
                    JelszoLehetosegek[playerid] --;
                        format(string,sizeof(string),\"Rossz jelszó,még ennyi lehetõséged van: %d\",JelszoLehetosegek[playerid]);
                                        SendClientMessage(playerid,-1,string);
                                        printf(\"%s elrontotta a jelszavát.\",nev);
                                        return 1;
                                }
                                else if(JelszoLehetosegek[playerid] == 1)
                                {
                                    SendClientMessage(playerid,-1,\"Minden lehetõségedet elrontottad,ezért ki lettél rúgva!\");
                                    printf(\"%s ki lett rúgva mert háromszor rossz jelszót írt be.\",nev);
                                    Kick(playerid);
                                    return 1;
                                }
            }

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #3 Dátum: 2013. május 31. - 20:42:13 »
0 Show voters
A tabulátorozás  a fórum hibája...Nem vagyok kezdõ,csak MySQL terén.
Igen,nagy eséllyel ez a gond.A teljes bejelentkezésben van free_result,de csak egy,így gondolom a store-olás után nem volt felszabadítás,mielõtt megint storeolná.(Röviden:csak a végén free-ztem.)
Még mindig nem fogadja el a jó jelszót.
Itt a teljes kód
« Utoljára szerkesztve: 2013. május 31. - 20:48:31 írta tudvari »

MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #4 Dátum: 2013. május 31. - 23:33:52 »
0 Show voters
Biztosan létrehozza az új felhasználót az INSERT INTO?
 
INSERT INTO felhasznalok(id, nev, jelszo, szint, penz, IP, xp, perc, ora, ban ) VALUES( 0,\'%s\', SHA1(\'%s\'), 1, 0, \'%s\', 0, 0, 0, false)[/quote]

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #5 Dátum: 2013. június 01. - 00:03:44 »
0 Show voters
Igen,megnéztem adatbázisban.

MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #6 Dátum: 2013. június 01. - 08:39:44 »
0 Show voters
És a másodikat is létrehozza?
Mivel korábban az `id` mezõre AUTO_INCREMENT beállítást kérdeztél és arra én azt írtam ne írj semmit, most meg ott szerepel egy nulla (0).
Egyébként meg nagyon rossz módból próbálod meg megírni sajátra ezt a dolgot.
Eleve OnPlayerConnect-nél lehetne ellenõrizni regisztrált-e a játékos, és mondjuk eltárolni egy változóban.
 
new bool:IsRegistered[MAX_PLAYERS];

 
Loginkor ezután már csak ennek a változónak az értékét kellene ellenõrizni akárhányszor írja be a parancsot, meg lehetne még egy változó ami a bejelentkezett állapotot tárolja, de látom van is de használva nincs.
Mikor ellenõrzõd van-e ilyen felhasználó már eleve az összes adatot lekérheted amire szükséged van/szüksége van a játékosnak így egyetlen mysql_query kéréssel el lehet intézni a bejelentkezést (login-t), és nincsen szükség további mysql_query-re.
Ez azért lenne fontos hogy ne 3 vagy több mysql_query legyen egyetlen egy parancsban (kicsit lassú), meg sok helyen a mysql_free_result is rossz helyre van írva, ha a mysql_debug-ot bekapcsolod mysql_debug(1), akkor készít egy fájlt (mysql_log.txt) minden mysql adatcserérõl abban lehet találsz pár hiba üzenetet aminek azért nem kellene ott lenni.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #7 Dátum: 2013. június 01. - 14:00:01 »
0 Show voters
http://pastebin.com/aHbVjJFW
Itt az új,de még mindig nem fogadja el a jó jelszót.Pedig az adatbázisban szépen el vannak tárolva az accok.ID is auto increment,jelszó is SHA1-ben van.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
MySQL bejelentkezés ->minden jelszót rossznak érzékel.
« Válasz #8 Dátum: 2013. június 04. - 18:08:48 »
0 Show voters
valaki?

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal