Wysłany: 2017-02-23, 03:03
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
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 ( HOST , USER , PASS , DB );
return 1 ;
}
public OnPlayerConnect ( playerid )
{
new query [ 126 ];
GetPlayerName ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
format ( query , sizeof ( query ), "INSERT INTO bank (nick, hajs) VALUES('%s', '%d')" , Player [ playerid ][ pNick ], Player [ playerid ][ pHajs ]);
mysql_query ( query );
return 1 ;
}
public OnPlayerDisconnect ( playerid , reason )
{
new query [ 256 ];
GetPlayerName ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
format ( query , sizeof ( query ), "UPDATE bank SET hajs = '%d' WHERE nick = '%s'" , Player [ playerid ][ pHajs ], Player [ playerid ][ pNick ]);
mysql_query ( query );
return 1 ;
}
public OnPlayerSpawn ( playerid )
{
GivePlayerMoney ( playerid , Player [ playerid ][ pHajs ]);
return 1 ;
}
public OnPlayerCommandText ( playerid , cmdtext [])
{
dcmd ( bankomat , 8 , cmdtext );
return 0 ;
}
dcmd_bankomat ( playerid , params [])
{
#pragma unused params
if( IsPlayerInRangeOfPoint ( playerid , 10 , 2841.2163 , 1304.0361 , 11.3906 ))
{
ShowPlayerDialog ( playerid , D_BANK , DIALOG_STYLE_LIST , "Bankomat" , "Stan konta" , "Wybierz" , "Zamknij" );
}
return 1 ;
}
public OnDialogResponse ( playerid , dialogid , response , listitem , inputtext [])
{
if( dialogid == D_BANK )
{
new string [ 126 ];
format ( string , sizeof (string), "Twoj aktualny stan konta w banku wynosi %d" , Player [ playerid ][ pHajs ]);
if( response )
{
switch( listitem )
{
case 0 : ShowPlayerDialog ( playerid , D_STANKONTA , DIALOG_STYLE_MSGBOX , "Aktualny stan konta" , string , "OK" , "" );
}
}
return 1 ;
}
return 0 ;
}
Wysłany: 2017-02-23, 12:53
borsuk
Wiek: 17 Na forum: 3547 dni Posty: 468
Piwa : 15622
Wysłany: 2017-02-23, 15:13
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
Ziomalloo , tak, napisa??m wy?ej.
Mam tak:
nazwa - varchar(24)
hajs - int(9), ustawienie domyslne 1000
[ Dodano : 2017-02-23, 15:15 ]
Wysłany: 2017-02-23, 15:30
WWilk1
Wiek: 30 Na forum: 4700 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Serwer nie ??czy Ci si? z baz? danych, bo ?le przypisa?e? argumenty do funkcji.
Tak powinno wygl?da?:
Pawn mysql_connect ( HOST , USER , PASS , DB , MySQL : 0 , 1 );
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 ( HOST , USER , PASS , DB , MySQL : 0 , 1 );
if( ConnectDB )
{
print( "Polaczono z baza MySQL pomyslnie!" );
}
else
{
print( "Nie udalo sie polaczyc z baza MySQL" );
print( "Serwer zostal wylaczony" );
SendRconCommand ( "exit" );
}
Wysłany: 2017-02-23, 16:20
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
WWilk1 , wykona?em to, da?em to w OnGameModeInit.
Problem dalej jest, a do bazy wszystko sie ??czy.
Wysłany: 2017-02-23, 16:34
WWilk1
Wiek: 30 Na forum: 4700 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
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).
Wysłany: 2017-02-23, 17:37
Grace
Kierowca Pralki
Wiek: 24 Na forum: 3437 dni Posty: 168
Nick w MP: Grace
Piwa : 1031
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 ( HOST , USER , PASS , DB , MySQL : 0 , 1 );
AddPlayerClass ( 200 , 10 , 10 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
return 1 ;
}
public OnPlayerConnect ( playerid )
{
GetPlayerName ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
new query [ 256 ];
new data [ 256 ];
format ( query , sizeof ( 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 ( query , sizeof ( 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 ( playerid , reason )
{
new query [ 256 ];
GetPlayerName ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
format ( query , sizeof ( 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 ( playerid , Player [ playerid ][ pHajs ]);
return 1 ;
}
public OnPlayerRequestClass ( playerid , classid )
{
SpawnPlayer ( playerid );
return 1 ;
}
public OnPlayerCommandText ( playerid , cmdtext [])
{
dcmd ( konto , 5 , cmdtext );
return 0 ;
}
dcmd_konto ( playerid , params [])
{
#pragma unused params
new string [ 126 ];
GetPlayerName ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
format ( string , sizeof (string), "Stan konta %s wynosi %d" , Player [ playerid ][ pNick ], Player [ playerid ][ pHajs ]);
ShowPlayerDialog ( playerid , D_KONTO , DIALOG_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 ?
Wysłany: 2017-02-23, 18:22
WWilk1
Wiek: 30 Na forum: 4700 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
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 ( playerid , Player [ playerid ][ pNick ], MAX_PLAYER_NAME );
new query [ 256 ];
new data [ 256 ];
format ( query , sizeof ( 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 ( query , sizeof ( 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 ( playerid , reason )
{
new query [ 256 ];
format ( query , sizeof ( 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
Tagi: zapis :: mieniedzy :: mysql
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: