MySQL: Что то с сохранением аккаунтов в таблицу
#1

Собственно такие дела. Что то с сохранением аккаунтов в таблицу. Ид начинается не с нуля, а либо с 1, или с 5, вообщем как вздумается. Так же, не записывает координаты, хотя если зайти на сервер не перезапуская его, то игрок появится где нужно. Пароль тоже сохраняет через раз, хотя при авторизации все номарльно (человек вводит свой пароль и его авторизует). Произошло все после того, как сделал сохранение позиций игрока при выходе. Ошибок и варнингов соответственно нет, код пересматривал 100 раз, что то убирал, редактировал, нихера. Вот лог из дебага:
PHP код:
[23:24:01] >> mysql_queryConnection handle)
[
23:24:01CMySQLHandler::Query(SELECT FROM `playersWHERE `name` = 'Tester_Mckenzy' LIMIT 1) - Successfully executed.
[
23:24:01] >> mysql_store_resultConnection handle)
[
23:24:01CMySQLHandler::StoreResult() - Result was stored.
[
23:24:01] >> mysql_fetch_row_formatConnection handle)
[
23:24:04] >> mysql_queryConnection handle)
[
23:24:04CMySQLHandler::Query(INSERT INTO `players` (`Name`,`Pass`) VALUES ('Tester_Mckenzy','123qwe')) - Successfully executed.
[
23:24:05] >> mysql_queryConnection handle)
[
23:24:05CMySQLHandler::Query(UPDATE players SET Name 'Tester_Mckenzy',Pass '',Sex 1,Money 0,Reg 0,PosX 0.000000,PosY 0.000000,PosZ 0.000000WHERE ID=0) - Successfully executed.
[
23:24:06] >> mysql_queryConnection handle)
[
23:24:06CMySQLHandler::Query(UPDATE players SET Name 'Tester_Mckenzy',Pass '',Sex 1,Money 0,Reg 1,PosX 0.000000,PosY 0.000000,PosZ 0.000000WHERE ID=0) - Successfully executed.
[
23:24:19] >> mysql_queryConnection handle)
[
23:24:19CMySQLHandler::Query(UPDATE players SET Name 'Tester_Mckenzy',Pass '',Sex 1,Money 0,Reg 1,PosX 2778.801269,PosY 1264.778930,PosZ 10.750000WHERE ID=0) - Successfully executed.
[
23:24:25] >> mysql_closeConnection handle)
[
23:24:25CMySQLHandler::~CMySQLHandler() - deconstructor called.
[
23:24:25CMySQLHandler::FreeResult() - Result was successfully free'd.
[23:24:25] CMySQLHandler::Disconnect() - Connection was closed. 
Сток сейва:
PHP код:
stock SaveAccount(playerid)
{
    
GetPlayerPos(playeridPlayerInfo[playerid][pPos][0], PlayerInfo[playerid][pPos][1], PlayerInfo[playerid][pPos][2]);
    
format(queryStringsizeof(queryString), "UPDATE players SET \
     Name = '%s',\
      Pass = '%s',\
       Sex = %d,\
       Money = %d,\
      Reg = %d,\
       PosX = %f,\
       PosY = %f,\
       PosZ = %f,\
    WHERE ID=%d"
,
     
     
PlayerInfo[playerid][pName],
      
PlayerInfo[playerid][pPass],
    
PlayerInfo[playerid][pSex],
       
PlayerInfo[playerid][pMoney],
       
PlayerInfo[playerid][pReg],
       
PlayerInfo[playerid][pPos][0],
       
PlayerInfo[playerid][pPos][1],
       
PlayerInfo[playerid][pPos][2],
       
PlayerInfo[playerid][pID]);
    
mysql_query(queryString);
    return 
1;

Reply
#2

pawn Код:
PosZ = %f,\
    WHERE ID=%d
Яж писал на прусе... Убери запятую.
Reply
#3

Ты делаешь выборку по нику, сохранять нужно тоже по нику (Зигги надо быть невнимательнее к таким мелочам ) поэтому у тебя поехали ИД.
Из логов мускула видно что пароль вообще отсутствует в запросе, а это говорит о том что PlayerInfo[playerid][pPass] пуста. Отсюда резонный вопрос: ты дебаг делал?

PS хоть и на другом форуме ты утверждаешь что делал все возможное для исправления проблемы, я думаю дальше бесполезного просмотра лога дело не заходило. Потому что дебаг это первое что должен делать скриптер при не работающем коде.
Reply
#4

Кстати совет "убрать кавычки" абсолютно бесполезный, SQL синтаксис допускает кавычки у числовых значений, а в некоторых случаях даже рекомендует их наличие.

Так что я посоветую оставить запрос в первоначальном виде:
pawn Код:
format(queryString, sizeof(queryString),
        "UPDATE players SET \
            Name = '%s', \
            Pass = '%s', \
            Sex = '%d', \
            Money = '%d', \
            Reg = '%d', \
            PosX = '%.3f', \
            PosY = '%.3f', \
            PosZ = '%.3f' \
        WHERE Name='%s' \
        LIMIT 1"
,
        PlayerInfo[playerid][pName],
        PlayerInfo[playerid][pPass],//тебе нужно только выяснить почему тут пусто
        PlayerInfo[playerid][pSex],
        PlayerInfo[playerid][pMoney],
        PlayerInfo[playerid][pReg],
        PlayerInfo[playerid][pPos][0],
        PlayerInfo[playerid][pPos][1],
        PlayerInfo[playerid][pPos][2],
        PlayerInfo[playerid][pName]
    );
Reply
#5

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Ид начинается не с нуля, а либо с 1, или с 5, вообщем как вздумается.
В MySQL нет, ни когда не было, не может быть, и даже предположить нельзя наличие ID = 0.
Не как вздумается, а строго на один больше от предыдущего значения, даже если вы предыдущую запись удалили. Не пытайтесь этого менять или пытаться выстраивать записи по порядку!
Reply
#6

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Зигги надо быть невнимательнее к таким мелочам
Ну всё-равно запрос некорректен, в дебаг логе ваще "10.750000WHERE" и т.п..
Reply
#7

Эм...а возможно ли решить проблему с пустой переменной пароля вот таким вот способом:
PlayerInfo[playerid][pPass] = inputtext;
И как решить проблему со слетом ИД?
Reply
#8

(del)
Reply
#9

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Эм...а возможно ли решить проблему с пустой переменной пароля вот таким вот способом:
PlayerInfo[playerid][pPass] = inputtext;
нет. strcat(PlayerInfo[playerid][pPass], inputtext)
Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
И как решить проблему со слетом ИД?
для начала нужно разобраться, а слетели ли они вообще, потом разобраться, а нужны ли тебе идишнки если ты все время работаешь с никами?!
Reply
#10

Сейчас что то сделал, теперь такая херня: С регистрацией все нормально, все сохраняет (переменные, позицию игрока и т.д). Все видно в таблице. Если игрок перезаходит, то все, кроме позиций и ника с паролем слетает. Т.е значение переменных слетают. Хотя используется один и тот же сток.
Reply
#11

Появявился вопрос, можно ли использовать функцию mysql_real_escape_string(); следующим образом:
PHP код:
mysql_real_escape_string(PlayerInfo[playerid][pName], '%s'); 
Reply
#12

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Появявился вопрос, можно ли использовать функцию mysql_real_escape_string(); следующим образом:
PHP код:
mysql_real_escape_string(PlayerInfo[playerid][pName], '%s'); 
Учи матчасть. Боже, с такими "знаниями", и таким "желанием" читать документацию, лучше играть, и не тратить наше время попусту.
Reply
#13

Quote:
Originally Posted by Mckenzy
Посмотреть сообщение
Сейчас что то сделал, теперь такая херня: С регистрацией все нормально, все сохраняет (переменные, позицию игрока и т.д). Все видно в таблице. Если игрок перезаходит, то все, кроме позиций и ника с паролем слетает. Т.е значение переменных слетают. Хотя используется один и тот же сток.
А знаешь, почему всё слетает? Ты сохраняешь в БД НУЛЕВЫЕ значения, если используешь один и тот же сток. Чтобы получить данные, используется запрос SELECT. Поищи в википедии, что это такое и с чем его едят.

И вообще, правильно говорят люди, прежде чем писать - разберись сам. Так ты ничего никогда не поймешь, если все всё за тебя делать будут.
Reply
#14

Quote:
Originally Posted by A1taVista
Посмотреть сообщение
А знаешь, почему всё слетает? Ты сохраняешь в БД НУЛЕВЫЕ значения, если используешь один и тот же сток. Чтобы получить данные, используется запрос SELECT. Поищи в википедии, что это такое и с чем его едят.

И вообще, правильно говорят люди, прежде чем писать - разберись сам. Так ты ничего никогда не поймешь, если все всё за тебя делать будут.
Селект я использую при загрузке аккаунта.
Reply
#15

А зачем ты аккаунт сохраняешь при заходе, судя по твоим словам?
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)