Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2016-04-09, 10:24


JotP







Wiek: 26
Na forum: 4822 dni
Posty: 217

Piwa: 1215

Respekt: 44,6

Ostrzeżeń: 40%
Cze??,
Tak z nud?w napisa?em sobie rejestracje w MySQL, ale mam problem xD.
A wi?c, jesli konto instnieje i wpisze sie tekst kt?r? zawiera has?o to system odczyta to jako poprawne has?o. Nie potrafie tego dok?adnie wyt?umaczy? wi?c macie przyk?ad:
Kod:

has?o to : umyjsie22
a ty wpiszesz: umyjsie2222

To system uzna to jako poprawne has?o.

Nast?pny problem to jesli si? ju? zalogujesz to nie wczytuje danych z bazy danych np. zapis kasy czy score.

Ostatni problem to taki ?e gdy stworzysz nowe konto, to gm wysy?a zapytanie do bazy danych ale w bazie nie ma ?ladu nowej tabeli.

kod:
Pawn
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    switch(dialogid)
    {
        //################################################################################## [MySQL] Login and Register system
        case DIALOG_ID_LOGIN:
        {
            if(strlen(inputtext) == 0)                                         //If the player didn't enter anything
            {
                ShowPlayerDialog(playeridDIALOG_ID_LOGINDIALOG_STYLE_PASSWORD"Zaloguj sie""Aby sie zalogowac, musisz wpisac jakies haslo ponizej.""Zaloguj""Wyjdz");
            }
            else                                        //If player did enter something
            {
                new EscapedPassword[50], query[80];
                mysql_real_escape_string(inputtextEscapedPassword);                                         //Save the inputted password in the variable

                format(query,sizeof(query),"SELECT * FROM `users` WHERE `username` = '%s' AND `password` = '%s';",playername(playerid),EscapedPassword);
                mysql_query(query);                                         //Send the query

                mysql_store_result();                                         //Store the results

                if(mysql_num_rows() != 0)                                         //If the password is correct
                {
                    SendClientMessage(playerid, -1"{FF0000}Zostales zalogowany!");
                    //########################################################## Load the player's stats
                    SystemLoadPlayerStats(playerid);
                }
                else                                         //If it isn't
                {
                    ShowPlayerDialog(playeridDIALOG_ID_LOGINDIALOG_STYLE_PASSWORD"Zaloguj sie""Aby sie zalogowac, musisz wpisac poprawne haslo ponizej.""Zaloguj""Wyjdz");
                }
                mysql_free_result();                                         //Free the results
            }
        }


        case DIALOG_ID_REGISTER:
        {
            if(strlen(inputtext) == 0)                                         //If the player didn't enter anything
            {
                ShowPlayerDialog(playeridDIALOG_ID_REGISTERDIALOG_STYLE_PASSWORD"Zaloz konto""Aby zalozyc nowe konto, musisz wpisac jakies haslo ponizej.""Rejestruj""Wyjdz");
            }
            else                                        //If player did enter something
            {
                new EscapedPassword[50], query[256];
                mysql_real_escape_string(inputtextEscapedPassword);                                        //Save the inputted password into a variable

                format(querysizeof(query), "INSERT INTO `users` (`username`, `password`, `money`, `score`) VALUES ('%s', '%s, '7000', '0');"playername(playerid), EscapedPassword);
                mysql_query(query);                                        //Send the query
                printf(query);

                SendClientMessage(playerid, -1"{FF0000}Zalozyles nowe konto!");

                GivePlayerMoney(playerid7000);
            }
        }
    }
    return 1;
}

Pawn

public SystemLoadPlayerStats(playerid)
{
    new query[80];
    format(querysizeof(query), "SELECT `money` AND `score` FROM `users` WHERE `username` = '%s';"playername(playerid));
    mysql_query(query);                                        //Send the query

    mysql_store_result();                                        //Store the results

    mysql_fetch_row_format(query"|");

    sscanf(query"e<p<|>ii>"PlayerInfo[playerid][Money], PlayerInfo[playerid][Score]);

    mysql_free_result();                                        //Free the results

    //##########################################################################################
    GivePlayerMoney(playeridPlayerInfo[playerid][Money]);
    SetPlayerScore(playeridPlayerInfo[playerid][Score]);
    return 1;
}


Podpis
3guzqx
Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-04-09, 11:55


Combacior







Wiek: 29
Na forum: 5796 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Kod:

SELECT * FROM `users` WHERE `username` = '%s' AND `password` = '%s';


Ten tekst ma 68 znak?w, a tablica, kt?rej u?ywasz do sformatowania tekstu ma limit 80 znak?w (tak dok?adnie to 79), wi?c gdzie tutaj zmie?ci? jeszcze nick gracza i wpisane has?o.

To po raz, po dwa - zapytanie SELECT raczej nie mo?e tak wygl?da?

Kod:

SELECT `money` AND `score` FROM `users` WHERE `username` = '%s';


Zawsze AND stosowa?em tylko i wy??cznie przy WHERE. Zamiast AND powinien by? przecinek, zawsze w logach mo?esz sprawdzi?, czy s? jakie? b??dy.

Po trzy, funkcja sscanf

Kod:

sscanf(query, "e<p<|>ii>", PlayerInfo[playerid][Money], PlayerInfo[playerid][Score]);


Chyba nie wiesz jak u?ywa? poszczeg?lnych znacznik?w, mo?esz o tym poczyta? na forum sampa, jest to tam bardzo dok?adnie opisane. Tymczasem naj?atwiejszy spos?b

Kod:

sscanf(query, "p<|>ii", PlayerInfo[playerid][Money], PlayerInfo[playerid][Score]);


Dodatkowo niezalecane jest przetrzymywanie hase? bez ?adnej metody hashowania, bo jak b?dzie jaki? wyciek, to kto? b?dzie w posiadaniu hase? graczy, kt?rzy w wi?kszo?ci has?o maj? jedno do wszystkiego. Kombinacja MD5 i SHA jest wystarczaj?ca na sampolka.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-04-09, 12:27


JotP







Wiek: 26
Na forum: 4822 dni
Posty: 217

Piwa: 1215

Respekt: 44,6

Ostrzeżeń: 40%
"Combacior" napisał/a:

Kod:

SELECT * FROM `users` WHERE `username` = '%s' AND `password` = '%s';


Ten tekst ma 68 znak?w, a tablica, kt?rej u?ywasz do sformatowania tekstu ma limit 80 znak?w (tak dok?adnie to 79), wi?c gdzie tutaj zmie?ci? jeszcze nick gracza i wpisane has?o.

To po raz, po dwa - zapytanie SELECT raczej nie mo?e tak wygl?da?

Kod:

SELECT `money` AND `score` FROM `users` WHERE `username` = '%s';


Zawsze AND stosowa?em tylko i wy??cznie przy WHERE. Zamiast AND powinien by? przecinek, zawsze w logach mo?esz sprawdzi?, czy s? jakie? b??dy.

Po trzy, funkcja sscanf

Kod:

sscanf(query, "e<p<|>ii>", PlayerInfo[playerid][Money], PlayerInfo[playerid][Score]);


Chyba nie wiesz jak u?ywa? poszczeg?lnych znacznik?w, mo?esz o tym poczyta? na forum sampa, jest to tam bardzo dok?adnie opisane. Tymczasem naj?atwiejszy spos?b

Kod:

sscanf(query, "p<|>ii", PlayerInfo[playerid][Money], PlayerInfo[playerid][Score]);


Dodatkowo niezalecane jest przetrzymywanie hase? bez ?adnej metody hashowania, bo jak b?dzie jaki? wyciek, to kto? b?dzie w posiadaniu hase? graczy, kt?rzy w wi?kszo?ci has?o maj? jedno do wszystkiego. Kombinacja MD5 i SHA jest wystarczaj?ca na sampolka.


Dzieki stary! Mia?em rok przerwy od sampa i pawn. ?ap piwko i respekt

Podpis
3guzqx
Postaw piwo autorowi tego posta
 

 
Tagi: rejestracja :: mysql
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN » Rejestracja MySQL Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku