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

Wysłany: 2017-02-23, 03:03


Grace

Kierowca Pralki






Wiek: 24
Na forum: 3436 dni
Posty: 168
Nick w MP: Grace

Piwa: 1031

Respekt: 35,8

Witam. Na wstepie powiem, ze dopiero ucze sie MySQL wi?c za du?o nie wiem, ale szybko ?apie.

Ot?z tworze sobie system zapisywania pieniedzy w bazie danych z nickiem
(nick varchar(24), hajs int(9)).
Problem u mnie lezy w tym, ?e kompletnie nic sie nie zapisuje, a okienko z stanem konta (tym co w bazie jest) sie nie pokazuje.

Oto kod:
Pawn
#include <a_samp>
#include <mysql>
#include <dcmd>

#define HOST "localhost"
#define USER "samp"
#define PASS "samp"
#define DB "samp"

#define D_BANK 5
#define D_STANKONTA 6

main(){}

enum Gracz
{
    pNick[MAX_PLAYER_NAME],
    pHajs
};
new Player[MAX_PLAYERS][Gracz];

public OnFilterScriptInit()
{
    mysql_init(LOG_ONLY_ERRORS);
    mysql_connect(HOSTUSERPASSDB);
    return 1;
}

public OnPlayerConnect(playerid)
{
    new query[126];
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    format(querysizeof(query), "INSERT INTO bank (nick, hajs) VALUES('%s', '%d')"Player[playerid][pNick], Player[playerid][pHajs]);
    mysql_query(query);
    return 1;
}

public OnPlayerDisconnect(playeridreason)
{    
    new query[256];
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    format(querysizeof(query), "UPDATE bank SET hajs = '%d' WHERE nick = '%s'"Player[playerid][pHajs], Player[playerid][pNick]);
    mysql_query(query);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    GivePlayerMoney(playeridPlayer[playerid][pHajs]);
    return 1;
}

public OnPlayerCommandText(playeridcmdtext[])
{
    dcmd(bankomat8cmdtext);
    return 0;
}
dcmd_bankomat(playeridparams[])
{
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid102841.2163,1304.0361,11.3906))
    {
        ShowPlayerDialog(playeridD_BANK,  DIALOG_STYLE_LIST"Bankomat""Stan konta""Wybierz""Zamknij");
    }
    return 1;
}

public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(dialogid == D_BANK)
    {
        new string[126];
        format(stringsizeof(string), "Twoj aktualny stan konta w banku wynosi %d"Player[playerid][pHajs]);
        if(response)
        {
            switch(listitem)
            {
                case 0ShowPlayerDialog(playeridD_STANKONTADIALOG_STYLE_MSGBOX"Aktualny stan konta"string"OK""");
            }
        }
        return 1;
    }
    return 0;
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 12:53


borsuk







Wiek: 17
Na forum: 3547 dni
Posty: 468

Piwa: 15622

Respekt: 412
Respekt: 412

Ostrzeżeń: 80%
Masz stworzona tabele?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 15:13


Grace

Kierowca Pralki






Wiek: 24
Na forum: 3436 dni
Posty: 168
Nick w MP: Grace

Piwa: 1031

Respekt: 35,8

Ziomalloo, tak, napisa??m wy?ej.
Mam tak:

nazwa - varchar(24)
hajs - int(9), ustawienie domyslne 1000

[ Dodano: 2017-02-23, 15:15 ]


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 15:30


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

Serwer nie ??czy Ci si? z baz? danych, bo ?le przypisa?e? argumenty do funkcji.
Tak powinno wygl?da?:
Pawn
mysql_connect(HOSTUSERPASSDBMySQL:01);

http://wiki.sa-mp.com/wik...n#mysql_connect

Dorzu? sobie sprawdzenie czy w og?le ??czysz si? z baz? danych tak w logach zostaniesz poinformowany o po??czeniu:

Pawn
    new ConnectDB;
    mysql_init();
    ConnectDB mysql_connect(HOSTUSERPASSDBMySQL:01);

    if(ConnectDB)
    {
        print("Polaczono z baza MySQL pomyslnie!");
    }
    else
    {
         print("Nie udalo sie polaczyc z baza MySQL");
         print("Serwer zostal wylaczony");
        SendRconCommand("exit");
    }


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 16:20


Grace

Kierowca Pralki






Wiek: 24
Na forum: 3436 dni
Posty: 168
Nick w MP: Grace

Piwa: 1031

Respekt: 35,8

WWilk1, wykona?em to, da?em to w OnGameModeInit.
Problem dalej jest, a do bazy wszystko sie ??czy.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 16:34


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

Wejd? do phpmyadmin i w strukturze tabeli bank dodaj pole ID i ustaw jemu AUTO_INCREMENT oraz podstawowy klucz(wci?nij Podstawowy jest obok Usu? i Jednoznaczny).

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 17:37


Grace

Kierowca Pralki






Wiek: 24
Na forum: 3436 dni
Posty: 168
Nick w MP: Grace

Piwa: 1031

Respekt: 35,8

Kod:

[Thu Feb 23 17:31:39 2017] Connected (0) to samp @ localhost via TCP/IP.
[Thu Feb 23 17:31:39 2017] MySQL Server Version 5.5.5-10.1.13-MariaDB.
[Thu Feb 23 17:32:14 2017] Error (0): Failed to exeute query. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''Szymon.' at line 1.
[Thu Feb 23 17:32:14 2017] Error (0): Function: mysql_store_result called when no prior successful query executed. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''Szymon.' at line 1.
[Thu Feb 23 17:32:14 2017] Error (0): Function: mysql_store_result called when no result stored. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''Szymon.' at line 1.
[Thu Feb 23 17:34:15 2017] Error (0): Failed to exeute query. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''bank' SET 'hajs' = '0' WHERE nick = 'Szymon.'' at line 1.


Pawn
#include <a_samp>
#include <mysql>
#include <dcmd>
#include <sscanf>

#define HOST "localhost"
#define USER "samp"
#define PASS "samp"
#define DB "samp"

#define D_KONTO 5

main(){}

enum Gracz
{
    pUID,
    pNick[MAX_PLAYER_NAME],
    pHajs
};
new Player[MAX_PLAYERS][Gracz];

public OnGameModeInit()
{
    mysql_init(LOG_ONLY_ERRORS);
    mysql_connect(HOSTUSERPASSDBMySQL:01);

    AddPlayerClass(20010101000,00000);
    return 1;
}

public OnPlayerConnect(playerid)
{
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    new query[256];
    new data[256];
    format(querysizeof(query), "SELECT * FROM bank WHERE nick = '%s"Player[playerid][pNick]);
    mysql_query(query);
    
    mysql_store_result();
    if(mysql_fetch_row(data"|"))
    {
        sscanf(data"p<>ds[24]d"Player[playerid][pUID], Player[playerid][pNick], Player[playerid][pHajs]);
    }
    else
    {
        format(querysizeof(query), "INSERT INTO bank (uid, nick, hajs) VALUES('%d', '%s', '%d')"Player[playerid][pUID], Player[playerid][pNick], Player[playerid][pHajs]);
        mysql_query(query);
    }
    mysql_free_result();
    return 1;
}

public OnPlayerDisconnect(playeridreason)
{    
    new query[256];
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    format(querysizeof(query), "UPDATE 'bank' SET 'hajs' = '%d' WHERE nick = '%s' uid = '%d'"Player[playerid][pHajs], Player[playerid][pNick], Player[playerid][pUID]);
    mysql_query(query);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    GivePlayerMoney(playeridPlayer[playerid][pHajs]);
    return 1;
}

public OnPlayerRequestClass(playeridclassid)
{
    SpawnPlayer(playerid);
    return 1;
}
public OnPlayerCommandText(playeridcmdtext[])
{
    dcmd(konto5cmdtext);
    return 0;
}
dcmd_konto(playeridparams[])
{
    #pragma unused params
    new string[126];
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    format(stringsizeof(string), "Stan konta %s wynosi %d"Player[playerid][pNick], Player[playerid][pHajs]);
    ShowPlayerDialog(playeridD_KONTODIALOG_STYLE_MSGBOX"STAN KONTA"string"OK""");
    return 1;
}


Teraz sie dodaje do bazy tak jakby "nowe konto", ale s? takie errory.

[ Dodano: 2017-02-23, 17:51 ]
I teraz jak zrobi?, ?e zamiast zrobi? to "nowe konto" ?e da si? nam nowe UID, ale nick bedzie ten sam, a hajsu 0, to wczyta nam si? to, co juz jest ?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-02-23, 18:22


WWilk1







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

Piwa: 147

Respekt: 130
Respekt: 130

Zgubi?e? ' w zapytaniu
Pawn
SELECT FROM bank WHERE nick '%s


Powinno by? tak
Pawn
SELECT FROM bank WHERE nick '%s' LIMIT 1


Dzi?ki LIMIT 1 po znalezieniu jednego rekordu przestaje szuka? dalej.

Jak raz pobierzesz nick w OnPlayerConnect, to p??niej nie musisz bo ju? masz przypisane do tablicy. ;)

Pawn
public OnPlayerConnect(playerid)
{
    GetPlayerName(playeridPlayer[playerid][pNick], MAX_PLAYER_NAME);
    new query[256];
    new data[256];
    format(querysizeof(query), "SELECT * FROM `bank` WHERE `nick` = '%s' LIMIT 1"Player[playerid][pNick]);
    mysql_query(query);
    mysql_store_result();
    
    if(mysql_num_rows())
    {
        mysql_fetch_row(data"|");
        sscanf(data"p<|>ds[24]d"Player[playerid][pUID], Player[playerid][pNick], Player[playerid][pHajs]);
        mysql_free_result();
    }
    else
    {
        mysql_free_result();
        //Jak masz ustawione AUTO_INCREMENT to mo?esz po dodaniu pola pobra? uID jakie ma w bazie danych i wtedy przypisa? do Player[playerid][pUID]
        //Wtedy zapytanie do dodania konta b?dzie wygl?da? w ten spos?b INSERT INTO `bank` (`nick`, `hajs`) VALUES('%s', '%d');
        format(querysizeof(query), "INSERT INTO `bank` (`uid`, `nick`, `hajs`) VALUES('%d', '%s', '%d')"Player[playerid][pUID], Player[playerid][pNick], Player[playerid][pHajs]);
        mysql_query(query);
    }
    return 1;
}

public OnPlayerDisconnect(playeridreason)
{    
    new query[256];
    format(querysizeof(query), "UPDATE `bank` SET `hajs` = '%d' WHERE `uid` = '%d' LIMIT 1"Player[playerid][pHajs], Player[playerid][pUID]);
    mysql_query(query);
    return 1;
}


Tutaj wspomnia?em jak pobra? jedn? warto?? pola bez u?ycia sscanfa http://gtao.pl/dane-z-mysql-vt108236.htm#689126

Postaw piwo autorowi tego posta
 

 
Tagi: zapis :: mieniedzy :: 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 » Zapis mieniedzy 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