Skocz do zawartości

Ranking


Popularna zawartość

Zawartość, która uzyskała najwyższe oceny od 08.06.2016 uwzględniając wszystkie działy

  1. 4 punkty
    639

    LS-RP | Los Santos RolePlay - Powraca!

    Tak samo powraca jak i community roleplay powróciło. Domena podobna do oryginału Wam nie pomoże. PS. Gdyby administracja LS-RP.net była wścibska mogłaby Was pozwać za naruszenie praw autorskich dot. logo. Nie jest identyczne, ale każdy w temacie wie, że takie podobieństwo wystarczy to skasowania Was na kilka stów.
  2. 4 punkty
    Beata_Szydlo_2015

    Pawn a przyszłość

    pawn != przyszłość.
  3. 2 punkty
    Beata_Szydlo_2015

  4. 2 punkty
    TS3 i prosta strona na nginx - zużycie ramu na poziomie 70mb, CPU 0.5-5%. Co by tu postawić? Klan z WoTa nie wykorzysta potencjału tego VPS'a.
  5. 2 punkty
    Bartcislaw

    LS-RP | Los Santos RolePlay - Powraca!

    I wy chcieliście współpracować z Compton? Porażka.
  6. 2 punkty
    PrzMas

    .ini kolejno w folderze (dfile) / losowanie

    W OnFilterScriptInit() sprawdź czy istnieje plik info0.ini, zawierający wartość dla ostatnio zapisanego pliku - jeśli nie istnieje to go utwórz i zapisz do niego wartość 0; Przy uruchomieniu skryptu wczytaj do zmiennej globalnej wartość z pliku info0.ini; Przy tworzeniu nowego pliku ustaw dla jego nazwy wartość zmiennej +1, następnie zapisz ją do pliku info0.ini.
  7. 2 punkty
    PrzMas

    random z bazy danych

    Jeśli już to: if (response) { mysql_query( "SELECT * FROM `bays`;"); mysql_store_result(); new idx= random(mysql_num_rows()); // idx to indeks wylosowanego pola mysql_free_result(); } W pluginie, którego używam da się pobierać rekordy i pola po indeksie, a w StrickenKid-ie nie da się inaczej jak po nazwie pola. SELECT * FROM bays ORDER BY RAND() LIMIT 1; SELECT * FROM table WHERE id >= (SELECT FLOOR(MAX(id)*RAND()) FROM table) ORDER BY id LIMIT 1; Powyższe dwa zapytania zwrócą tylko jeden wylosowany rekord z tabeli. Ta druga kwerenda jest dla tabeli z kluczem głównym.
  8. 1 punkt
    michalek97

    Panel Administratora w GUI!

    Witam, Mam do zaprezentowania panel administratora w GUI Dziala tylko jak jestesmy zalogowani na RCONie. KOD PWN: #include <a_samp> #pragma tabsize 0 public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp("/adminpanel", cmdtext, true)) {if(IsPlayerAdmin(playerid)) { ShowPlayerDialog(playerid, 1, 2, "Panel Administratora", "Dodaj 100 hp \nDodaj armor \nTeleportuj na norm. spawn \nNapraw ten pojazd \nZrob GMX \nZrob burze \nZrob sloneczna pogode \nDodaj sobie miniguna \nWylacz server \nDodaj sobie noz", "Ok", "Anuluj"); } return 1; } return 0; } //------------------------------------------------------------------------------ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 1 && response) { switch(listitem) { //------------------------------------------------------------------------------ case 0: { SetPlayerHealth(playerid, 100); } case 1: { SetPlayerArmour(playerid, 100.0); } case 2: { SetPlayerPos(playerid, 2231.80,2156.27,10.82); } case 3: { RepairVehicle(GetPlayerVehicleID(playerid)); } case 4: { SendRconCommand("gmx"); } case 5: { SetWeather(15); } case 6: { SetWeather(1); } case 7: { GivePlayerWeapon(playerid, 38, 20000); } case 8: { SendRconCommand("exit"); } case 9: { GivePlayerWeapon(playerid, 4, 1); } } } return 1; } Po wpisaniu /adminpanel pojawia się GUI, w którym są rózne opcje. Jest ich 10. Lista opcji: Dodaj 100 hp - Daje nam pelne zycie Dodaj armor - Daje nam pelny armor Teleportuj na norm. spawn - TUTAJ SPAWN SERVERA I-RP PL!!! Napraw ten pojazd - Naprawia pojazd w ktorym aktualnie jestes Zrob GMX - Restartuje server Zrob burze - Zmienia pogode na burze Zrob sloneczna pogode - Zmienia pogode na sloneczna Dodaj sobie miniguna - Daje Ci miniguna Wylacz server - Wylacza server Dodaj sobie noz - Daje Ci nóż Pozdrawiam. Komentujcie. Zycze milego administratorowania serverem. Jest to moj 1 skrypt w PAWNO :)
  9. 1 punkt
    Wojtek020699

    Lista hostingów SA-MP / MTA

    Lista hostingów SA-MP / MTA @last update: 26-06-2016r. Servhost.pl SA-MP: TAK MTA: TAK Lokalizacja: Polska - Olsztyn Cennik Publiczny SA-MP: 0,50 zł / slot Publiczny MTA: 0,60 zł / slot Prywatny SA-MP: nie dostępne. Prywatny MTA: nie dostępne. Hosting oferuje - Backup danych (usługa darmowa) (SA-MP: TAK | MTA: TAK) - Bazę danych MySQL (usługa darmowa) (SA-MP: TAK | MTA: TAK) - Reklamę na SA-MP.pl (koszt usługi: 10 zł) (SA-MP: TAK | MTA: NIE) - Serwer WWW (usługa darmowa) (SA-MP: TAK | MTA: TAK) - Sub-domenę SA-MP.pl (usługa darmowa) (SA-MP: TAK | MTA: NIE) - Usługę hosted (koszt usługi: 85 zł) (SA-MP: TAK | MTA: NIE) - Serwer Mumble (usługa darmowa) (SA-MP: TAK | MTA: TAK) - Serwer testowy 24 godziny (usługa darmowa) (SA-MP: TAK | MTA: TAK) Sprzęt hostingu ServerProject.pl SA-MP: TAK MTA: TAK Lokalizacja: Polska - Warszawa Polska - Olsztyn Francja Cennik Publiczny SA-MP Warszawa: 0,35 zł / slot Publiczny MTA Warszawa: 0,50 zł / slot Prywatny SA-MP Warszawa: 0,28 zł / slot Prywatny MTA Warszawa: 0,40 zł / slot Publiczny SA-MP Olsztyn: 0,25 zł / slot Publiczny MTA Olsztyn: 0,40 zł / slot Prywatny SA-MP Olsztyn: 0,20 zł / slot Prywatny MTA Olsztyn: 0,32 zł / slot Publiczny SA-MP Francja: 0,25 zł / slot Publiczny MTA Francja: 0,40 zł / slot Prywatny SA-MP Francja: 0,20 zł / slot Prywatny MTA Francja: 0,32 zł / slot Hosting oferuje - Bazę danych MySQL (Warszawa: 3 zł | Olsztyn oraz Francja: 1,99 zł ) (SA-MP: TAK | MTA: TAK) - Usługę hosted (koszt usługi: 87,99 zł) (SA-MP: TAK | MTA: NIE) - Serwer Mumble (cena indywidualna, w zależności od lokalizacji oraz ilości slotów) - Unikalny adres IP + dowolny port (Warszawa: 15 zł | Olsztyn oraz Francja: 12 zł) Sprzęt hostingu brak podanych specyfikacji przez hosting. Pukawka.pl SA-MP: TAK MTA: NIE Lokalizacja: Polska - Warszawa (ATMAN) Cennik Publiczny SA-MP: 0,28 zł / slot Prywatny SA-MP: 0,24 zł / slot Hosting oferuje - Backup danych (usługa darmowa) (SA-MP: TAK | MTA: NIE) - Bazę danych MySQL (usługa darmowa) (SA-MP: TAK | MTA: NIE) - Serwer Mumble (usługa darmowa) (SA-MP: TAK | MTA: NIE) - Serwer testowy 24 godziny (usługa darmowa) (SA-MP: TAK | MTA: NIE) Uwaga: Hosting Pukawka.pl posiada trzy dostępne pakiety, powyższe informację mogą być nie zgodne z wybranym pakietem. Wybierając pakiet EU nasz serwer będzie zlokalizowany w Niemczech. Należy dobrze przeczytać ofertę przed wybraniem serwera! Także jeżeli minie okres ważności serwera, otrzymujemy czternaście dni na przedłużenie ważności, w przeciwnym wypadku zostanie on usunięty. Sprzęt hostingu Jest to pewna lista hostingów, możecie podać mi hostingi jakie znacie. Temat może zawierać błędy z cenami ponieważ ceny mogą co jakiś czas ulegać zmianie w danej firmie. i btw. Wiem że to jest tak jak by ten sam temat co ten http://bit.ly/1egXaf4 lecz jest to odświeżony temat, tamten został napisany w 2010. Hostingi wymienione wyżej są hostingami pewnymi i raczej nie powinny upaść z dnia na dzień. Pozdrawiam i życzę miłych zakupów.
  10. 1 punkt
    Tak jak w temacie. Piszę skrypt od zera, będzie strona Internetowa połączona z serwerem, więc będzie można zarządzać kontem. Mam parę innowacyjnych pomysłów, poszukuję osób, które będą zainteresowane beta testami a w przyszłości pełnieniem funkcji w organizacjach i administrowania. Osoby zainteresowane proszę o kontakt na skype: alluhanzo , a jeśli będę nie dostępny to na adres email mcartick @ gmail . com
  11. 1 punkt
    PrzMas

    Pojazdy

    Trailer to jest przyczepa, a on chce przyczepić pojazd od pojazdu.
  12. 1 punkt
    xBBBay ☆

    W mysql nie tworzą się tabele

    To już nie wina tabelek mysql, nativechecker, crashdetect, pawno -d3 i pokaż logi.
  13. 1 punkt
    DaGaXeR

    Odległość Koordynatów

    No przecież jest napisane Float z początku, tak? :v
  14. 1 punkt
    PrzMas

    [ROZWIĄZANY]Czas, GUI i zmiana koloru w środku zdania

    Zastąp symbole \n (LF) i \t (HT) jakimiś pojedynczymi znakami, których wiesz, że nie będziesz używał w tekście (np | i >) po czym prześlij całość do bazy danych, natomiast po pobraniu zamień z powrotem w pętli odpowiednio na \n i \t. stock mysql_spchrp(str[], str_sz= sizeof str) // mysql special chars replace { for(new i= 0; i < str_sz; i++) { if (str[i] == 0x00) break; // NULL, end of string else if (str[i] == '>') str[i]= 0x09; // HT else if (str[i] == '|') str[i]= 0x0a; // LF else if (str[i] == 0x09) str[i]= '>'; else if (str[i] == 0x0a) str[i]= '|'; } }
  15. 1 punkt
    Pr0f3ssi0n4LisT.

    .ini kolejno w folderze (dfile) / losowanie

    CMD:nowyplik(playerid) { new str[25],i; for(i = 1; i < MAX_PLIKOW; i++) { format(str,sizeof(str),"/folder/info%d.ini",i); if(!fexist(str)) { i = _:fopen(str, io_write); // if(!File:i) continue; fwrite(File:i,"Pawno.PL\r\n"); fclose(File:i); i = MAX_PLIKOW; } } if(i < MAX_PLIKOW) SendClientMessage(playerid,-1,"Juz jest max plikow w tym folderze ziomus."); else { // utworzono plik ktorego nazwa jest w tablicy str } return 1; } CMD:losuj(playerid) { new num[MAX_PLIKOW], cnt; new str[25],idx; for(idx = 1; idx < MAX_PLIKOW; idx++) { format(str,sizeof(str),"/folder/info%d.ini",idx); if(!fexist(str)) continue; num[cnt++] = idx; } if(cnt == 0) SendClientMessage(playerid,-1,"Nie ma zadnego pliku w tym folderze."); else { format(str,sizeof(str),"/folder/info%d.ini",num[random(cnt)]); cnt = _:fopen(str, io_read); while(fread(File:cnt, str)) { // pobieranie linijka po linijce } fclose(File:cnt); } return 1; } Chyba cos takiego o ile dobrze zrozumialem
  16. 1 punkt
    DaGaXeR

    Czy ten VPS wystarczy?

    Skoro stawiasz forum na IP Board gdzie wydałeś 175$ nie wiem dlaczego chcesz oszczędzać 15zł. "Czy wystarczy" zależy od wielu czynników. Chociażby ilość graczy, Twoje aplikacje na forum itd.
  17. 1 punkt
    DaGaXeR

    Liczba graczy ipboard

    Chociażby taką zamiast tego. Gdzie później za </php> wstawiasz w szablon to swoje <p> uzywajac zmiennych $players & $slots echo "<p>Aktualny stan slotów: ". $row["graczy"] ."/". $row["slotow"] ."</p>" $players = $row['graczy']; $slots = $row['slotow'];
  18. 1 punkt
    Zrób tak: format(sData[playerid][Nazwa], 16, "Tampa");
  19. 1 punkt
    Pokaż jeszcze OnDialogResponse -> dialogid = 15
  20. 1 punkt
    CeKa

    Obrazek ze zmienną treścią.

    http://php.net/manual/en/function.imagejpeg.php Są tam przykłady
  21. 1 punkt
    Może jest jakieś "MAX_GROUPS_TYPES" ?
  22. 1 punkt
    Jaev

    Problem z BW

    OnPlayerDeath GetPlayerPos SetPlayerPos SetTimerEx ustaw animacje :))
  23. 1 punkt
    PrzMas

    Wychodzenie z gry.

    Ok, na podstawie niezałączonego kodu źródłowego, o którym mowa w niniejszym temacie, wnioskuję, że jest w nim jakiś błąd, dlatego nie wykonuje się do końca W celu uzyskania dogłębniejszych informacji na temat występującego problemu proszę o kontakt. Temat do zamknięcia.
  24. 1 punkt
    Adrian Górski

    [KUPIĘ] PANEL GRACZA IPB (RP)

    Dokładnie chcę to komuś zlecić. Rozumiem, że chodzi CI o to, że nie są uniwersalne bo pisze się je pod każdego gamemoda.
  25. 1 punkt
    Kaz

    MySQL - poradnik.

    Poradnik dotyczący MySQL Spis treści: 1). Wprowadzenie 2). Wymagania 3). Transakcje: - omówienie - polecenia 3). Tworzenie tabel 4). Typy pól 5). Łączenie z bazą 6). Wysyłanie zapytania 7). Omówienie kilku funkcji dot. MySQL 8). Obsługa danymi: - stworzenie rekordu - pobranie rekordu - zapisanie danych 9). Rady, zakończenie Wprowadzenie: MySQL to inaczej wolnodostępny system zarządzania bazą danych. Jest obsługiwany przez wiele systemów, dzięki czemu nie mamy problemu z utrzymaniem kompatybilności. Dodatkowo jest wydany wersji źródłowej, co umożliwia skompilowanie go dla dowolnej platformy systemowej. Istnieje kilka typów mechanizmów każdy z nich służy do innego zastosowania: - MyISAM - domyślny mechanizm (nie obsługuje transakcji ani kluczy obcych, umożlwia wyszukiwanie pełnotekstowe) - InnoDB - także domyślna opcja (obsługuje transakcje, klucze obce oraz zakładanie blokad na poziomie wierszy) Jest jeszcze kilka typów, ale nimi się nie będziemy interesować, ponieważ zostały wycofane. Wymagania(informacje dla osób chcących założyć hosting baz mysql): Co prawda MySQL nie potrzebuje dużych wymagań z takiego powodu iż sam w trakcie wykonywania procesów, stara się je sam optymalizować. To także dotyczy się tabel oraz baz danych. Z doświadczenia nauczyłem się, że w teorii bazy potrzebują dużo pamięci RAM i szybkie dyski, można też trafić na to, że procesory też są brane pod uwagę. Głównie MySQL opiera się na cache'ch, bo ponad 90% wykonywanych zapytań trafia właśnie tam. Konfiguracja dla osób, które chcą w przyszłości otworzyć firmę oferująca bazy danych: - Procesor: sempron 3000+ - Pamięć: 2 GM RAM - Dysk twardy (główny): 2x250 GB (RE, 16 MB cache) z RAID - Dysk twardy (poboczny): 1x400 GB (wolniejsze dyski, dla przeprowadzanych backup'ów) Druga konfiguracja "optymalna" dla użytkownika: - Procesor: 1000+ - Pamięć: 256/512 MB RAM - Dysk twardy: 20 GB z (RE, 16 MB cache i RAID) Transakcje: Transakcja - co to w ogóle jest? Otóż jest to zbiór operacji na bazie danych, które stanowią w istocie pewną całość i jako takie powinny być wykonane wszystkie lub żadna z nich. Przykładem takiej transakcji jest bankowa - przelew. Muszą zostać spełnione 2 operacje - zabranie pieniędzy z jednego konta oraz dopisanie ich do drugiego. W przypadku niepowodzenia żadna z tych operacji nie powinna być zatwierdzona, gdyż zajście tylko jednej powodowałoby nieprawidłowości w bazie danych (pojawienie się lub zniknięcie pieniędzy). Transakcja składa się z trzech elementów: rozpoczęcia wykonania zamknięcia W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej, ponieważ równolegle może być dokonywanych wiele transakcji. Każdy etap transakcji jest logowany, dzięki czemu w razie awarii systemu można odtworzyć stan bazy danych sprzed transakcji, która nie została zamknięta. Transakcje w SQL W systemach baz danych realizujących standard SQL następujące polecenia dotyczą transakcji: BEGIN lub BEGIN WORK - rozpoczęcie transakcji; COMMIT - zatwierdzenie zmian wykonanych w obrębie transakcji; ROLLBACK - odrzucenie zmian wykonanych w obrębie transakcji; SAVEPOINT nazwa - zdefiniowanie punktu pośredniego o określonej nazwie; RELEASE SAVEPOINT nazwa - skasowanie punktu pośredniego; ROLLBACK TO SAVEPOINT nazwa - wycofanie transakcji do stanu zapamiętanego; Tworzenie tabel: Jest to główny proces obsługi naszej bazy, wymaga utworzenia bazy i połączenia się, ale o łączeniu w następnym rozdziale. Możemy zacząć wprowadzać dane, najpierw jednak trzeba utworzyć tabele, robimy to według następującego schematu: CREATE TABLE nazwa_tabeli (nazwa_pola1 typ_pola1 [atrybuty], nazwa_pola2 typ_pola2 [atrybuty], nazwa_pola3 typ_pola3 [atrybuty], PRIMARY KEY(nazwa_polaX)) Przykład: CREATE TABLE NBA (id int NOT NULL AUTO_INCREMENT, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id)) Każda tabela musi posiadać co najmniej jedno pole, dodatkowo co najmniej jedno pole, które będzie jednoznacznie identyfikuje wiersz w tabeli - tak zwany klucz główny. Jeśli jest masa danych, a Ty znasz klucz główny jednego z wierszy wtedy możesz bez problemu dostać się do tego wiersza. W naszym przypadku kluczem głównym jest pole pierwsze - id. Przeważnie nadaje jako klucz główny określa się pierwsze pole tabeli. Dodatkowo klucz główny posiada dwa atrybuty: pierwszy - NOT NULL - oznaczający, że wartość tego pola nigdy nie może być pusta; drugi - AUTO_INCREMENT* - oznaczający, że wartość pola będzie automatycznie zwiększania przez bazę danych przy dodaniu rekordu; * Atrybut AUTO_INCREMENT - możemy stosować tylko do pól typu całkowitoliczbowego. Typy pól: Dostępnych jest wiele typów pól, najpopularniejsze poniżej: - CHAR(x) / VARCHAR(x) - ciąg znaków o maksymalnej dł. X, gdzie X nie może być większy od 255; - BLOB - binarny ciąg znaków o dł. ograniczonej przez pamięc Twojego serwera; - TINYINT(ilość znaków) - liczby z zakresu od -128 do 127 lub liczby dodatnie od 0 do 255; - SMALLINT(ilość znaków) - liczby z zakresu od -32768 do 32767 lub liczby dodatnie od 0 do 65535; - MEDIUMINT(ilość znaków) - liczby z zakresu od -8388608 do 8388607 lub liczby dodatnie od 0 do 16777215; - INTEGER / INT - liczba całkowita z przedziału -2147483647 do 2147483647 lub liczby dodatnie od 0 do 4294967295; - TEXT - tekstowy ciąg znaków o dł. ograniczonej przez pamięć Twojego serwera; - DATE - data w formacie określonym przez ustawienia serwera; - ENUM - enumeracja (wyliczenie). W kolumnie może się znaleźć jedna z podanych wartości; - YEAR - rok, jeśli zostanie podany zły, jego wartość zmieni się w 0000; - DECIMAL(x, y) - liczba dziesiętna, gdzie X oznacza maksymalną liczbe cyfr, a Y maksymalną liczbę cyfr po przecinku; Łączenie z bazą: Za pomocą poniższego kodu połączymy się poprawnie z naszą bazą (plugin: MySQL StrickenKid): #define SQL_HOST "localhost" #define SQL_USER "user" #define SQL_PASSWORD "password" #define SQL_DB "datebase" new MySQL:sql_init; public OnFilterScriptInit() { sql_init = mysql_init(1); new sql_handle = mysql_connect(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, sql_init, .auto_reconnect=1); if (sql_handle) // mysql_connect jeśli nastąpi poprawne połączenie z bazą zwróci nam wynik "true" { // jeśli warunek się wykona printf("Połączono z bazą danych, gratulacje!"); } else { // jeśli warunek się nie wykona printf("Niepołączono z bazą danych!!!"); SendRconCommand("exit"); // zamykamy serwer } return 1; } public OnFilterScriptExit() return mysql_close(sql_init); I tak oto poprawnie połączyliśmy się z naszą bazą! Wysyłanie zapytania: W tym kroku nauczymy się wykonywać polecenia/zapytania, które wyślemy do naszej bazy. Dla przykładu pobierzemy z naszej przykładowej tabeli lata oraz punkty, którego wyszukamy za pomocą imienia. new buffer[127], playerNick[MAX_PLAYER_NAME]; GetPlayerName(playerid, playerNick, MAX_PLAYER_NAME); mysql_real_escape_string(playerNick, playerNick); // sprawdzamy, czy nie ma zadnych podejrzanych znakow, ktore moga naszej bazie zaszkodzic format(buffer, 127, "SELECT lata, punkty FROM NBA WHERE imie='%s'", playerNick); if (mysql_query(buffer)) mysql_ping(); // Ta linijka pozwoli nam podtrzymać nasze połączenie mysql_store_result(); // zapisujemy do pamięci if (mysql_num_rows() && mysql_fetch_row(buffer, "|")) { new lata, punkty; sscanf(buffer, "p<|>dd", lata, punkty); format(buffer, 127, "Masz %d punktów i %d lat.", punkty, lata); SendClientMessage(playerid, -1, buffer); } mysql_free_result(); // czyścimy pamięć Jeśli nasz rekord będzie istniał otrzymamy wiadomość np. Masz 14 punktów i 19 lat. Jak widzimy bardzo łatwo jest pobrać informacje posiadając jedno z nich - tutaj imię. Omówienie kilku funkcji dot. MySQL: Ogólnie w MySQL posiadamy bardzo dużo funkcji, które przydają się nam w różnych problemach można znaleźć rozwiązania dzięki nim. Podam tylko te związane z datą, które mogą posłużyć nam do stworzenia systemu Premium: ------------------------------------------------- | Funkcja | Przykład użycia | Opis | ------------------------------------------------- HOUR() | HOUR(kolumna) | Zwraca samą godzine, ze wskazanej daty MINUTE() | MINUTE(kolumna) | Zwraca same minuty, ze wskazanej daty. SECOND() | SECOND(kolumna) | Zwraca same sekundy, ze wskazanej daty. DAYNAME() | DAYNAME(kolumna) | Zwraca nazwę dnia tygodnia. DAYOFMONTH() | DAYOFMONTH(kolumna) | Zwraca sam dzień miesiąca, ze wskazanej daty (wyrażone liczbą). MONTHNAME() | MONTHNAME(kolumna) | Zwraca nazwę miesiąca występującego we wskazanej dacie. MONTH() | MONTH(kolumna) | Zwraca sam miesiąc ze wskazanej daty (wyrażony liczbą). YEAR() | YEAR(kolumna) | Zwraca sam rok ze wskazanej daty. ADDDATE() | ADDDATE(kolumna INTERVAL x typ) | Dodaje do daty przechowywanej w kolumnie x jednostek i zwraca wynik SUBDATE() | SUBDATE(kolumna INTERVAL x typ) | Odejmuje od daty przechowywanej w kolumnie x jednostek i zwraca wynik. UNIX_TIMESTAMP()| UNIX_TIMESTAMP(data) | Zwraca liczbę sekund jaka upłynęła od początku tzw. epoki unixa lub od wskazanej daty. Obsługa danymi: - stworzenie rekordu W życiu codziennej pracy MySQL, przyjdzie taka pora, że trzeba będzie stworzyć REKORD. A więc napiszmy taką, sugerując się wcześniejszą tabelą Przykład 1). INSERT INTO NBA (imie, punkty, lata, mistrzostwa) VALUES ('Imie', '17', '2', '1'); Przykład 2). INSERT INTO NBA SET imie='Imie', punkty='17', lata='2', mistrzostwa='1'; Przykład 3). INSERT INTO NBA ('Imie', '17', '2', '1'); Jak widzimy, można zrobić to na wiele sposobów. Najlepszym (według mnie) rozwiązaniem jest przykład drugi, ponieważ możemy łatwo zobaczyć co i jak ustawiamy. W pierwszym przykładzie jest to o tyle utrudnione, że wszystko "leci" po kolei, a w ostatnim nie wiemy, czy dobrze stworzyliśmy rekord. - pobranie rekordu Ten krok pozwoli się nam przyjrzeć jak powinno wyglądać poprawne pobranie rekordu. Stwórzmy sobie funkcje, która wyśle zapytanie, czy dane konto o nicku np. 'Polak' istnieje... public OnPlayerConnect(playerid) { if (SprawdzCzyKontoIstnieje(playerid)) { SendClientMessage(playerid, -1, "Twoje konto istnieje w bazie danych!"); } else { SendClientMessage(playerid, -1, "Twoje konto nie istnieje w bazie danych!"); } return true; } SprawdzCzyKontoIstnieje(graczid) { new buffer[127], nick[24], bool: istnieje = false; GetPlayerName(graczid, nick, MAX_PLAYER_NAME); mysql_real_escape_string(nick, nick); format(buffer, 127, "SELECT 1 FROM NBA WHERE imie='%s'", nick); if (mysql_query(buffer)) mysql_ping(); mysql_store_result(); if (mysql_num_rows()) istnieje=true; mysql_free_result(); return istnieje; // jeśli znalazlo konto otrzymamy wynik true, jesli nie, to false } Proste, prawda? Według mnie nie trzeba tutaj nic tłumaczyć. - zapisanie danych Przyszła pora na zapisanie/aktualizację danych gracza Użyjemy SEPARATORA "UPDATE": enum p_info { bool: logged, imie[24], punkty, lata, mistrzostwa }; new pInfo[MAX_PLAYERS][p_info]; public OnPlayerDisconnect(playerid, reason) { if (pInfo[playerid][logged]) // Sprawdzamy czy zalogowany jest { new buffer[127]; GetPlayerName(playerid, pInfo[playerid][imie], MAX_PLAYER_NAME); pInfo[playerid][punkty] = GetPlayerScore(playerid); format(buffer, 127, "UPDATE NBA SET punkty='%d', lata='%d', mistrzostwa='%d' WHERE imie='%s'", pInfo[playerid][punkty], pInfo[playerid][lata], pInfo[playerid][mistrzostwa], pInfo[playerid][imie]); mysql_query(buffer); } return true; } I tak oto, zapisaliśmy dane gracza, gdy opuścił serwer. Użyłem 2 przykładu omówionego w poprzednich podpunktach, ponieważ jest najprostszy. Zakończenie: Nadszedł koniec tego poradnika. Omówimy tutaj trochę informacji o bezpieczeństwie zapytań. Najlepszym rozwiązaniem dotyczącym bezpieczeństwa jest przeczytanie tego klik! Należy pamiętać o SQL Injection, można się przed tym zabezpieczyć stosując w formatach tj. '%s', '%d', '%f'; Podałem możliwe przykłady stosując do tego PAWN, aby było prościej zrozumieć ich znaczenie. Pamiętaj MySQL nie odnosi się tylko do PAWN, w ten sam sposób można go użyć do innych języków programowania! :) Przez to, że wiele języków programowania używa MySQL można z łatwością pobrać rekord z bazy danych w PHP, a wcześniej stworzyć go np. w PAWN. © 2012, Górniczek. Szczególną pomoc dedykuję AXV.
×