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

Wysłany: 2017-01-06, 16:49


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

Rejestracja ju? pi?knie dzia?a, ale mam kilka jeszcze pyta?.

1) Mam tablic? pGracz[playerid][AdminLVL]. oraz w MySQL dan? 'AdminLVL'
W jaki spos?b sprawdzi?, czy gracz w bazie ma ustawiony 'AdminLVL' na 1 lub 2 i przypisa? do pGracz[playerid][AdminLVL]?

2) Zrobi?em te? pGracz[playerid][CzasBlokady].
Chc? stworzy? komend? /blokada [idgracza] [czas_w_dniach]
i tam da?:
Kod:

pGracz[playerid][Blokada] = 1;
pGracz[playerid][CzasBlokady] = ilo??_dni;


W jaki spos?b sprawdza? ile zosta?o tych dni do zdj?cia blokady? Za???my nadaj? blokad? dzisiaj o 17.00 na 3 dni i minie ona dopiero w poniedzia?ek. Wtedy te dane b?d? si? zerowa?.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 17:05


Mac







Wiek: 28
Na forum: 4136 dni
Posty: 133
Nick w MP: Mac

Piwa: 27

Respekt: 130
Respekt: 130

1) Po zalogowaniu nie mo?esz wczyta? warto?ci z bazy danych do pGracz[playerid][AdminLVL]? P??niej tylko w komendach czy te? innych warunkach masz:
Pawn

if(pGracz[playerid][AdminLVL] == 1)
     print("Gracz posiada 1 level admina");
else if(pGracz[playerid][AdminLVL] == 2)
     print("Gracz posiada 2 level admina");
else
     print("Gracz nie posiada admina");


2) Lepiej skorzysta? z czasu uniksowego. Czyli, przy komendzie /blokada [idgracza] [czas _w_dniach] da?:
Pawn

pGracz[playerid][CzasBlokady] = gettime() + (ilo?? dni 86400); // czemu 86400? Bo tyle sekund ma doba


Zapisa? warto?? z pGracz[playerid][CzasBlokady] do bazy danych, a p??niej przy wej?ciu wczytywa? i sprawdzanie czy blokada min??a:
Pawn

if(pGracz[playerid][CzasBlokady] > gettime())
{
     // Blokada jeszcze wa?na
}
else
{
     // Blokada zdj?ta
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 17:16


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

1. Do pobrania jednej lub dw?ch rzeczy nie ma po co u?ywa? sscanfa.

Pawn
    format(str128"SELECT `AdminLVL` FROM `twojatabela` WHERE `nick` = '%s' AND `AdminLVL` > 0"PlayerName(playerid));
    mysql_query(str);
    mysql_store_result();
    
    if(!mysql_num_rows())
    {
        mysql_free_result();
        //Nie znaleziono
        return 1;
    }
    new aLvl[4];
    mysql_fetch_field("AdminLVL"aLvl);
    mysql_free_result();
    pGracz[playerid][AdminLVL] = strval(aLvl);    


Co do drugiego to b?dzie zakaz wej?cia gracza na serwer? Mo?na w?a?nie za pomoc? czasu unixowego oraz odpowiedniego zapytania po wej?ciu gracza na serwer.

Taka ma?a podpowied? co do czasu unixowego:

Pawn
#define UNIX_DAY (86400) //<<<<----Podpowied? ile dzie? wynosi w czasie Unix.
#define UNIX_HOUR (3600) //<<<<----Podpowied? ile godzina wynosi w czasie Unix.
#define UNIX_MINUTE (60) //<<<<----Podpowied? ile minuta wynosi w czasie Unix.


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 17:43


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

Ok super, powoli dzia?am xD

Og?lnie to jak edytowa? jakikolwiek rekord w phpmyadmin? Albo jestem ?lepy, albo nie mog? znale?? ?adnej funkcji.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 17:50


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Kod:

UPDATE nazwa_tabeli SET cos1 = '%d', cos2 = '%d' WHERE name = '%s'



#Edit: My bad, ?le zrozumia?em poprzedni post :P

Ostatnio zmieniony przez Wafelowski 2017-01-06, 18:12, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 17:50


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

Wejd? w dan? tabele i masz edytuj, kopiuj, usu?, to wybierasz edytuj.
Po modyfikacji naciskasz wykonaj.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 18:10


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

W?a?nie nie mam takich opcji, mo?liwe ?e ServerProject je zablokowa? :(

Btw. Jak sformatowa? dat? w phpmyadmin? Da?em jako int(10) (xD) i wychodzi takie co?:
http://imgur.com/uDuO3Ml

Kod:

secs = hours*3600;
unbants = gettime()+ secs;


Podobnie robi si? w GUI, gdy dam:
Kod:

Data nadania: %02d\nData wyga?ni?cia: %02d.


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 18:16


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

http://i.imgur.com/2I1hwKN.png - Nie masz czego? takiego edytuj obok rekordu? Je?eli masz serwer na dom?wce to zainstaluj sobie xamppa i na localho?cie dzia?aj. :P


Je?eli chodzi o t? dat? to zapisujesz j? jako czas unix i musisz sobie j? w skrypcie zamieni? na dat?. Na forum SAMP'a s? funkcje kt?re zamieniaj? unix na dat? np.

http://gtao.pl.com/showpo...8&postcount=973


Mo?esz te? np. w zapytaniu u?y? from_unixtime()

http://stackoverflow.com/...ate-using-mysql

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 18:46


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

Na serwerze ?adnie ju? si? zapisuje (np. 2017-01-06), ale w bazie danych ju? nie. Powr?ci?em do uniksowego czasu i mam taki kod:
Pawn
     secs hours*3600;
     unbants gettime()+ secs;

    format(querysizeof(query), "INSERT INTO `BANY` (Nick, IP, Admin, Powod, Kiedy, Do_Kiedy) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
     bannedipbannerreasongettime(), unbants);
    mysql_query(query);


Jak przerobi? go, ?eby w bazie pokazywa? normalny format daty?

a je?li chodzi o edytowanie rekord?w, to sp?jrz:


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-06, 19:48


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

Stw?rz sobie w bazie danych pole(np. Time), kt?re ma INT(11) i warto?? domy?ln? 0. Do tego pole(np. DateBan), kt?re b?dzie date.

Miejsce w kt?rym dajesz bana(przyk?adowo):

Pawn
getdate(YearMonthDay);
format(str128"INSERT INTO `bans` (`Nick`, `Admin`, `DateBan`, `Time`) VALUES('%s', '%s', '%04d-%02d-%02d', '%d');"PlayerName(GetID), PlayerName(playerid), YearMonthDaygettime() + UNIX_DAY DayBan);
mysql_query(str);



w OnPlayerConnect:

Pawn
    format(str178"SELECT `Nick`, `Admin`, `DateBan`, `Time` FROM `bans` WHERE `Nick` = '%s' OR `IP` = '%s'"PlayerName(playerid), PlayerIP(playerid));
    mysql_query(str);
    mysql_store_result();

    if(mysql_num_rows())
    {
        new NickB[MAX_PLAYER_NAME], NickA[MAX_PLAYER_NAMEDate[16], TimesBan;
          mysql_fetch_row(str"|");
        sscanf(str"p<|>s[24]s[24]s[16]d"NickBNickADateTimesBan);
        mysql_free_result();
        
        if(TimesBan gettime())
        {
            new DayBanHourBanMinuteBan;
            TimesBan TimesBan gettime();
            ConvertUnixTime(TimesBanDayBanHourBanMinuteBan);
            format(DialogString388"Nick: %s - Admin: %s - Wyga?nie za: %d Dni %02d Godzin %02d Minut - Data nadania: %s"NickBNickADayBanHourBanMinuteBanDate);
            SendClientMessage(playerid, -1str);
            Kick(playerid); //jak tak dasz to nie wy?wietli jemu info(trzeba da? timer)
            return 0;
        }
        else
        {
            format(str138"DELETE FROM `bans` WHERE `Nick` = '%s' OR `IP` = '%s'"PlayerName(playerid), PlayerIP(playerid));
            mysql_query(str);
            SendClientMessage(playerid, -1"Tw?j ban wygas?!");
        }
    }
    else
        mysql_free_result();


No i funkcja, kt?ra rozk?ada czas uniksowy na dni, godziny i minuty:

Pawn
ConvertUnixTime(UnixTime, &Day, &Hour, &Minute)
{
    Day UnixTime 86400;
    UnixTime -= Day 86400;
    Hour UnixTime 3600;
    UnixTime -= Hour 3600;
    Minute UnixTime 60;
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-07, 09:23


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

1) Nie bardzo rozumiem to:
Kod:

gettime() + UNIX_DAY * DayBan);]

Co z tym UNIX_DAY?

2) Robi? okienko gui z informacjami dot. bana i nie bardzo wiem jak przekonwertowa? dat? wyga?ni?cia bana.
Pawn
    format(stringsizeof(string), "Uwaga! Twoje Konto zosta?o zbanowane!\n\nInformacje:\n{a9c4e4}Zbanowany/a przez: {FFFFFF}%s\n{a9c4e4}Pow?d: {FFFFFF}%s\n{a9c4e4}Twoje IP: {FFFFFF}%s\n{a9c4e4}Data nadania: {FFFFFF}%04d-%02d-%02d\n{a9c4e4}Data wyga?ni?cia: {FFFFFF}%d.\n\n{a9c4e4}Je?li uwa?asz, ?e ban jest nies?uszny,\nz??? apelacj? na naszym forum.\n{D70000}Zr?b zdj?cie (F8) tego okna!"bannerreasonipYearMonthDaygettime() + 3600 hours);
    ShowPlayerDialog(bannedidBanInfoDialogDIALOG_STYLE_MSGBOX"Blokada Konta!"string"Zamknij""");


3) Zapisuj? takie co? w bazie:
Pawn

    format(querysizeof(query), "INSERT INTO `BANY` (`Nick`, `IP`, `Admin`, `Powod`, `Kiedy`, `Do_Kiedy`) VALUES('%s', '%s', '%s', '%s', '%04d-%02d-%02d', '%d');"bannedipbannerreasonYearMonthDaygettime() + 3600 hours);
    mysql_query(query);


ale w bazie pokazuje si? w Kiedy zamiast ca?ej daty to tylko rok, a Do_kiedy - Unix.

4) w Data nadania pokazuje tylko rok.:
Pawn
            new DayBanHourBanMinuteBan;
            TimesBan TimesBan gettime();
            ConvertUnixTime(TimesBanDayBanHourBanMinuteBan);
            format(ssizeof(s), "Nick: %s. Ban wyga?nie za: %d Dni %02d Godzin %02d Minut - Data nadania: %s, pow?d: %s"NickBDayBanHourBanMinuteBanDateReason);
            SendClientMessage(playerid, -1s);


Postaw piwo autorowi tego posta
 

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


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Wszystko co potrzebujesz, znalaz?by? w moim starym skrypcie uG. Do bazy danych zapisuj czas uniksowy, bo z nim mo?na zrobi? dos?ownie wszystko w bardo ?atwy spos?b. Jak zamieni? czas uniksowy na normaln? dat?? Kto? ju? tutaj wspomnia? o zastosowaniu rozwi?zania FROM_UNIXTIME

Kod:

SELECT FROM_UNIXTIME(time, '%H:%i %d.%m.%Y') FROM tabela WHERE ...


Mo?esz sobie ustawi? co ma by? wy?wietlane najpierw, w aktualnym formacie jest - godzina:minuta dzie?.miesi?c.rok - mo?esz sobie zmieni? to, np. doda? spacje zamiast kropek, wtedy rozdzielisz sobie wszystko sscanfem. Tych format?w jest sporo, wszystkie znajdziesz tutaj: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-01-07, 19:21


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

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

//Edit - zrobi?em.

Postaw piwo autorowi tego posta
 

 
Tagi: dane :: 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 » Dane z 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