Проблема с сохранением координат в БД[MySQL]
#1

При выходе не сохраняет позиции, в БД все по нулям. Что не так?
PHP код:
stock SaveAccount(playerid) { // Сохранение аккаунта. 
if(playerVariable[playerid][aLogged] == true) { // Проверка, если аккаунт авторизован. 
CheckMySQLConnection(); // Проверяем, подключена ли БД. 
new query[186]; 
new 
sqlname[MAX_PLAYER_NAME]; 
new 
sqlpass[64]; 
new 
Float:X
new 
Float:Y
new 
Float:Z
GetPlayerPos(playeridXYZ); 
mysql_real_escape_string(playerVariable[playerid][aName], sqlname); 
mysql_real_escape_string(playerVariable[playerid][aPassword], sqlpass); 
format(querysizeof(query), "UPDATE `"DATABASE"` SET `Nickname` = '%s', `Password` = '%s',`PosX` = %.f,`PosY` = %.f,`PosX` = %.f WHERE `ID` = '%i' "sqlnamesqlpassX,Y,Z,playerid); 
mysql_query(query); // Отправляем запрос 

return 
1

Reply
#2

Попробуй так:

PHP код:
format(querysizeof(query), "UPDATE `"DATABASE"` SET `Nickname`='%s', `Password`='%s',`PosX`='%.f',`PosY` ='%.f',`PosX`='%.f' WHERE `ID`='%i' "sqlnamesqlpassFloat:X,Float:Y,Float:Zplayerid); 
Reply
#3

Shurik01, не помогло.
Reply
#4

Странно. Что в логах пишет?

У меня сделано таким образом:
PHP код:
new Float:x,Float:y,Float:zinteriorquery[MAX_QUERY];
        
GetPlayerPos(playerid,x,y,z);    interior GetPlayerInterior(playerid);
        
format(query,sizeof(query),"UPDATE `"PlayerTable"` SET x='%0.1f', y='%0.1f', z='%0.1f', interior='%d', world='%d' WHERE (Username = '%s') LIMIT 1",
        
Float:x,Float:y,Float:zinteriorGetPlayerVirtualWorld(playerid), PlayerName2(playerid));
        
mysql_query(query); 
Работает без проблем.
Reply
#5

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
При выходе
из машины или с сервера?

Если с сервера то все функции типа GetPlayer... будут возвращать 0 или любую другую ерунду. Потому что игрока в этот момент уже нет на сервере.
Спасибо за внимание.
Reply
#6

Stepashka, с сервера.
Ну а как тогда узнать координаты игрока если не с помощью GetPlayerPos?
Reply
#7

Вот логи из дебуга
Код:
[18:08:10] >> mysql_connect( )

[18:08:10] CMySQLHandler::CMySQLHandler() - constructor called.

[18:08:10] CMySQLHandler::CMySQLHandler() - Connecting to "localhost" | DB: "registration" | Username: "root" ...

[18:08:10] CMySQLHandler::Connect() - Connection was successful.

[18:08:10] CMySQLHandler::Connect() - Auto-Reconnect has been enabled.

[18:08:10] >> mysql_ping( Connection handle: 1 )

[18:08:10] CMySQLHandler::Ping() - Connection is still alive.

[18:08:38] >> mysql_query( Connection handle: 1 )

[18:08:38] CMySQLHandler::Query(SELECT `ID` FROM `account` WHERE `Nickname` = 'Tester_Mckenzy') - Successfully executed.

[18:08:38] >> mysql_store_result( Connection handle: 1 )

[18:08:38] CMySQLHandler::StoreResult() - Result was stored.

[18:08:38] >> mysql_num_rows( Connection handle: 1 )

[18:08:38] CMySQLHandler::NumRows() - Returned 1 row(s)

[18:08:38] >> mysql_fetch_int( Connection handle: 1 )

[18:08:38] CMySQLHandler::FetchRow() - Return: 1

[18:08:38] >> mysql_free_result( Connection handle: 1 )

[18:08:38] CMySQLHandler::FreeResult() - Result was successfully free'd.

[18:08:43] >> mysql_real_escape_string( Connection handle: 1 )

[18:08:43] CMySQLHandler::EscapeString(123qwe); - Escaped 6 characters to 123qwe.

[18:08:43] >> mysql_query( Connection handle: 1 )

[18:08:43] CMySQLHandler::Query(SELECT * FROM `account` WHERE `Password` = '123qwe' AND `ID` = '1') - Successfully executed.

[18:08:43] >> mysql_store_result( Connection handle: 1 )

[18:08:43] CMySQLHandler::StoreResult() - Result was stored.

[18:08:43] >> mysql_num_rows( Connection handle: 1 )

[18:08:43] CMySQLHandler::NumRows() - Returned 1 row(s)

[18:08:43] >> mysql_fetch_row_format( Connection handle: 1 )

[18:08:43] CMySQLHandler::FetchRow() - Return: 1|Tester_Mckenzy|123qwe|0.000|0.000|0.000

[18:08:43] >> mysql_free_result( Connection handle: 1 )

[18:08:43] CMySQLHandler::FreeResult() - Result was successfully free'd.

[18:08:59] >> mysql_ping( Connection handle: 1 )

[18:08:59] CMySQLHandler::Ping() - Connection is still alive.

[18:08:59] >> mysql_real_escape_string( Connection handle: 1 )

[18:08:59] CMySQLHandler::EscapeString(Tester_Mckenzy); - Escaped 14 characters to Tester_Mckenzy.

[18:08:59] >> mysql_real_escape_string( Connection handle: 1 )

[18:08:59] CMySQLHandler::EscapeString(123qwe); - Escaped 6 characters to 123qwe.

[18:08:59] >> mysql_query( Connection handle: 1 )

[18:08:59] CMySQLHandler::Query(UPDATE `account` SET `Nickname`='Tester_Mckenzy', `Password`='123qwe',`PosX`='201.862014',`PosY` ='-79.030754',`PosX`='1.578125' WHERE `ID`='0' ) - Successfully executed.

[18:09:14] >> mysql_close( Connection handle: 1 )

[18:09:14] CMySQLHandler::~CMySQLHandler() - deconstructor called.

[18:09:14] CMySQLHandler::FreeResult() - The result is already empty.

[18:09:14] CMySQLHandler::Disconnect() - Connection was closed.
Reply
#8

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Stepashka, с сервера.
Ну а как тогда узнать координаты игрока если не с помощью GetPlayerPos?
сохранять их пока игрок на сервере.

PS огромный текст помещается в тег CODE
Reply
#9

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
сохранять их пока игрок на сервере
Так это же таймер, и скорее всего нефиговая нагрузка на сервер.
У меня было вообще так - в БД координаты сохраненные не отображались, а игрок спавнился где нужно.
Разнос от Варпа
Quote:

CheckMySQLConnection(); - на кой хер использовать проверку без проверки?

Вот тут немного не догнал.
Quote:

mysql_real_escape_string(playerVariable[playerid][aName], sqlname); - хотя бы смотрел назначение сий функции? На кой хер это нужно, если в нике можно использовать только A-Z 0-9 и пару символов с которыми бд прекрасно работает?

Т.е вот это и playerid в конце удалять? :C
Quote:

какой нахер playerid ?

Reply
#10

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
из машины или с сервера?

Если с сервера то все функции типа GetPlayer... будут возвращать 0 или любую другую ерунду. Потому что игрока в этот момент уже нет на сервере.
Спасибо за внимание.
GetPlayerName возвращает как надо, к примеру. Остальные не помню.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)