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

Wysłany: 2016-12-29, 22:26


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Wyt?umaczy kto? na danej wersji pluginu MySQL jak zrobi? prost? rejestracj??
Co znajd? tutorial, to zawsze jest pod inn? wersj?. O co prosz??

1) Sprawdzenie, czy konto istnieje, je?li nie to rejestracja -> stworzenie trzech r??nych przyk?ad?w: varchar(string), int i float, czyli np. nick, pieni?dze i ?ycie.
2) Je?li konto istnieje, to pobierze te trzy r??ne przyk?ady.

3) Zapisywanie statystyk.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-12-30, 11:26


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Najprostszy do ogarni?cia jest plugin StrickenKid'a, sam z niego korzystam. Najpierw sobie stw?rz tabel?, kt?ra b?dzie przechowywa? dane graczy, np. accountData.

Kod:

CREATE TABLE IF NOT EXISTS `accountData`
(
`nick` varchar(24),
`cash` int,
`health` decimal(4,1)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Dlaczego u?y?em decimal zamiast float? W?a?ciwie przy takiej kolumnie jak ?ycie gracza nie powinno mie? to ?adnego wp?ywu, ale kiedy? czyta?em, ?e kolumna typu float lubi nieco przekr?ca? dane - oczywi?cie nie chodzi mi o jakie? warto?ci z nieba wzi?te, np. z warto?ci 47.5206797 mo?e wyj?? 47.5206795, wi?c je?li potrzebujesz bardzo dok?adnych danych, to zalecam u?ywanie decimal. Teraz zapytanie do pobrania danych gracza.

Kod:

new s[100], n[24 + 1], cash, Float:health;
GetPlayerName(playerid, n, sizeof n);
format(s, sizeof s, "SELECT cash, health FROM accountData WHERE nick = '%s' LIMIT 1", n);
//nie bedziemy pobierac nicku, bo przeciez jest nam znany
//na koncu LIMIT 1, wystarczy nam tylko jeden rekord z danym nickiem gracza.
mysql_query(s);
mysql_store_result(); //funkcja potrzebna przy uzyciu kwerendy SELECT

if(mysql_num_rows() == 1) //pobieramy ilosc rekordow z bazy
{
//znalazlo jeden rekord, bo dalismy LIMIT 1 w zapytaniu, konto istnieje
mysql_fetch_row(s, " "); //funkcja rozdziela dane z rekordu do tablicy, czyli cash i health
sscanf(s, "if", cash, health); //przydzielenie pobranych wartosci do zmiennych
}
else
{
//konto nie istnieje, rejestracja
}
mysql_free_result(); //oprozniamy pamiec zapytania, bo go juz nie potrzebujemy


Rejestracj? zr?b sobie sam, skoro ju? wiesz kiedy konto jest zarejestrowane a kiedy nie. Zreszt? mo?esz pobra? m?j stary skrypt uG i zobaczy? jak tam to jest zrobione, bo te? korzysta?em z tego pluginu i nadal z niego korzystam.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-02, 21:44


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Jak mam sporo danych do zapisania/wczytania, to jak to najpro?ciej zapisa? tym sscanfem, ?eby nie wywali?o b??du za zbyt d?ug? linijk??

Jak zapisa? przyk?adowe dane?

PS nie pobra?em Twojego skryptu, bo google go blokuje :p

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-02, 22:11


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Sscanf jest pomocny przy pobieraniu danych, za? przy zapisywaniu nie da si? go w ?aden spos?b wykorzysta?. Je?li linijka jest za d?uga, to format zapytania mo?esz sobie przenie?? do nast?pnej linijki za pomoc? backslash'a

Kod:

format(s, sizeof s, "UPDATE tabela SET \
cos1 = %d \
cos2 = %d",
1,
2);


To mo?esz stosowa? zawsze, ale je?li format nie jest d?ugi, a d?ugie s? nazwy parametr?w, to wystarczy, ?e b?dziesz przenosi? do nowej linijki same parametry, a format zostawi? w jednej.

Kod:

format(s, sizeof s, "UPDATE tabela SET cos1 = %d cos2 = %d",
1,
2);


Tak dzia?a nie tylko format, ale wszystkie funkcje.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-03, 16:16


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Masz aktualn? paczk? tego pluginu? Linki na forum sampa pad?y.

Btw jak zapisa? przyk?adowe dane po wyj?ciu gracza z serwera?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-03, 22:17


WWilk1







Wiek: 30
Na forum: 4699 dni
Posty: 116
Nick w MP: eep.Wilk

Piwa: 147

Respekt: 130
Respekt: 130

https://www.sendspace.com/file/kmsw3h w paczce jest wersja pod windows i linux.

Kilka przyk?ad?w zapisu

Pawn
format(String128"UPDATE `players` SET `Nick` = '%s', `Score` = '%d', `Pos` = '%f', `Date` = '%04d-%02d-%02d' WHERE `Nick` = '%s' LIMIT 1"Nick[playerid], PunktyPosXYearMonthDayNick[playerid]);
mysql_query(String);


Polecam korzysta? z sprawdzenia po uID jest optymalniejszym sposobem ni? sprawdzenie po nicku

Pawn
format(String128"UPDATE `players` SET `Nick` = '%s', `Score` = '%d', `Pos` = '%f', `Date` = '%04d-%02d-%02d' WHERE `ID` = '%d' LIMIT 1"Nick[playerid], PunktyPosXYearMonthDayuID[playerid]);
mysql_query(String);

format(String94"UPDATE `players` SET `Vday` = `Vday` - 1 WHERE `ID` = '%d' LIMIT 1"uID[playerid]);
mysql_query(String);

format(String94"UPDATE `players` SET `Kills` = `Kills` + 1 WHERE `ID` = '%d' LIMIT 1"uID[playerid]);
mysql_query(String);

format(String102"UPDATE `players` SET `Bank` = `Bank` +%d WHERE `ID` = '%d' LIMIT 1"BankCashuID[playerid]);
mysql_query(String);

format(String102"UPDATE `players` SET `Bank` = `Bank` -%d WHERE `ID` = '%d' LIMIT 1"BankCashuID[playerid]);
mysql_query(String);


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 18:25


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Dlaczego przypisuj?c Email do inputtext, nie zapisuje si? on w bazie?
Jest jako puste pole.

Kod:

pGracz[playerid][Email] = strval(inputtext);







Dodam tylko, ?e podobnie zapisuj? has?o i IP i one si? dobrze zaspisa?y, ale email nie.

2) Jak pobiera? dane z bazy do konta gracza?
Zrobi?em co? takiego, ale ta funkcja chyba za to nie odpowiada.






Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 18:54


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

1. Strval - funkcja kt?ra zamienia string (tekst) na integer (liczba ca?kowita) https://wiki.sa-mp.com/wiki/Strval

Kod:

format(pGracz[playerid][Email], 32, "%s", inputtext);


2. Co do drugiego to nie wiem po co ta p?tla while, wystarczy sprawdzi? poprzez warunek czy s? jakie? rekordy i wtedy rozdzielasz pola poprzez mysql_fetch_row() i przez sscanf'a przypisujesz pola do zmiennych.

Pawn

if(mysql_num_rows())
{
    if(mysql_fetch_row(mstring"|"))
    {
        sscanf(mstring"s[32]s[32]s[16]"pGracz[playerid][Haslo], pGracz[playerid][Email], pGracz[playerid][IP], ...);
    }
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:09


WWilk1







Wiek: 30
Na forum: 4699 dni
Posty: 116
Nick w MP: eep.Wilk

Piwa: 147

Respekt: 130
Respekt: 130

Dodam jeszcze od siebie, ?e te 0 nie musisz wpisywa? w zapytaniu, wystarczy ?e w phpmyadmin w strukturze wybierzesz dane pole po czym edytuj nast?pnie "zdefiniuj nast?puj?co" i wpisujesz 0.
P??niej na ko?cu zapytania dodajesz tylko ?rednik np.
INSERT INTO `Players` (`Pass`, `Skin`) VALUES('%s', '%d');

Przyk?adowy odczyt:

Pawn
new AntiSQLInjection[18];
mysql_real_escape_string(inputtextAntiSQLInjection);
format(String128"SELECT `ID`, `Email`, `Money`, `xPos` FROM `players` WHERE `Nick` = '%s' AND `Pass` = '%s' LIMIT 1"PlayerName(playerid), AntiSQLInjection);
mysql_query(String);
mysql_store_result();
if(!mysql_num_rows())
{
    //Nie znaleziono konta lub b??dne has?o wpisa?
    mysql_free_result();
    return 1;
}
mysql_fetch_row(String"|");
sscanf(String"p<|>is[18]if"pPlayer[playerid][UID], pPlayer[playerid][Email], pPlayer[playerid][Money], pPlayer[playerid][X_Pos]);
mysql_free_result();


Zapisywanie tylu rzeczy w jednym momencie to z?o dla serwera(mo?e spowodowa? lag) nie poleca?bym Ci tego typu rzeczy stosowa?.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:13


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Czyli taki spos?b jak poda? Combacior, ok dzi?ki.

Kolejne pytania:
1) Czym mo?e by? spowodowany b??d w konsoli:
Kod:

[MySQL] Error (0): Failed to exeute query. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `Nick` = 'Nick' LIMIT 1' at line 1.


2) Jak sprawdzi?, czy has?o jest wpisane z?e, bo ten spos?b nie dzia?a:
Kod:

if(!strcmp(inputtext, pGracz[playerid][Haslo]))


3) Dlaczego nie pobiera danych z bazy, np. pozycji by teleportowa? do niej gracza, skoro przydzielamy te warto?ci sscanfem?

4) Dlaczego pokazuje w Mode: Unknown, mimo, ?e gamemode dzia?a?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:17


WWilk1







Wiek: 30
Na forum: 4699 dni
Posty: 116
Nick w MP: eep.Wilk

Piwa: 147

Respekt: 130
Respekt: 130

Pierwsze to gdzie? mog?e? zgubi? ` lub ' wyprintuj sobie zapytania, kt?re wykonujesz do bazy danych.

Drugie masz odpowied? powy?ej.

Trzecie poka? w jaki spos?b pobierasz.

Czwarte poka? logi.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:39


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

1) Czyli te zera usun?? i zapisa? w taki spos?b:





2) Error pokazuje si? dwa razy. W kodzie:





oraz





3) Jak pobra? te dane z bazy?

4) Unknown mode: logi





Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:43


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Brakuje jednego przecinka.

Kod:

format(Query, sizeof(Query), "INSERT INTO `Gracze` (`Nick`, `Haslo`, `Email`, `IP`, `Pieniadze`, `PunktyScore`, `Skin`, `PunktyKarne`, `Zlecen`, `Kanister`, `Kajdanki`, `Mute`, `MuteTime`, `Jail`, `JailTime`, `Blokada`, `CzasBlokady`, `AdminLVL`, `Police`, `PierwszaGra`, `X_Pos`, `Y_Pos`, `Z_Pos`, `A_Pos`) VALUES('%s', MD5('%s'), '%s', '%s')", PlayerName(playerid), pGracz[playerid][Haslo], pGracz[playerid][Email], pGracz[playerid][IP]);


Tam po IP, a w drugim to przed WHERE

Kod:


new string[1000];
format(string, sizeof(string), "UPDATE `Gracze` SET `Nick` = '%s', `Haslo` = '%s', `Email` = '%s' WHERE `Nick` = '%s' LIMIT 1", PlayerName(playerid), pGracz[playerid][Haslo], pGracz[playerid][Email], PlayerName(playerid));
print("1");
mysql_query(string);
print("2");


Ja si? jaki? czas temu przesiad?em na plugin od BlueG, fajnie bo jest aktualizowany ca?y czas i lepiej rozbudowany. Polecam orm-y.

Jeszcze co do has?a, to polecam SHA256 tak na przysz?o??, co by si? uchroni?.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 19:56


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

Tak tak, has?o b?dzie szyfrowane, lecz na pocz?tku wol? si? upewni? czy wszystko krok po kroku dzia?a.

OK, b??dy z mysql znikn??y. Lecz jak teraz pobra? dane z bazy na konto gracza? My?la?em, ?e ten sscanf przydzieli odpowiednie dane z rekord?w do tablic, ale niestety nie.

I nie mam poj?cia co z tym Unknown.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-04, 20:16


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Jak masz sscanfa, to musisz jeszcze w nim okre?li? w jaki spos?b pola s? rozdzielone,

Pawn

if(mysql_num_rows())
{
    mysql_fetch_row(mstring"|");
    mysql_free_result();
    
    sscanf(mstring"p<|>s[32]s[32]s[16]"pGracz[playerid][Haslo], pGracz[playerid][Email], pGracz[playerid][IP], ...);
}


A o co chodzi z unknown bo nic nie widz? w logach? Je?eli chodzi o Mode na SAMP-ie to chodzi o to ?e w gamemodzie nie poda?e? ?adnej nazwy i ustawia domy?ln?, aby to zmieni? wystarczy skorzysta? z funkcji (do OnGameModeInit)

Kod:

SetGameModeText("Nazwa GM");


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 w 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