• 0
Умелец

Почему не сохраняются данные в БД

Question

Решил сделать команду чисто для теста, отвечает она за регистрацию PIN-кода у админа, вроде все шло четко, но он не хочет сохранятся в базу данных

 

Спойлер

case DLG_REGADMIN:
		{
			if(response)
			{
				if(!strlen(inputtext))
				{
					ShowAdminReg(playerid);
					return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}Придумайте PIN-код");
				}
				if(strval(inputtext) < 1000 || strval(inputtext) > 9999)
				{
					ShowAdminReg(playerid);
					return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}PIN-код должен состоять из 4 цифр!");
				}
				else
				{
					strmid(player_info[playerid][ADMINPASS], inputtext, 0, strlen(inputtext), 5);
					SCM(playerid, COLOR_WHITE, "Вы успешно зарегистрировали админ аккаунт");
				}
			}
			else
			{
				SPD(playerid, -1, 0, " ", " ", " ", "");
			}
		}
Спойлер


static const fnt_query[] = "INSERT INTO `users` (`adminpassword`) VALUES ('%s')";
new query[sizeof(fnt_query)+(-2+4)];
format(query, sizeof(query), fnt_query, player_info[playerid][ADMINPASS]);
mysql_query(dbHandle, query);

 

 

 

Screenshot_43.png

Screenshot_42.png

Edited by Умелец

Share this post


Link to post

13 answers to this question

  • 0
2 часа назад, Умелец сказал:

new sql_query[128];
      format(sql_query, sizeof(sql_query), "UPDATE `users` SET `adminpassword` = '%d' WHERE `id` = '%d'", player_info[playerid][ADMINPASS], player_info[playerid][ID]);
      mysql_query(dbHandle, sql_query);
      strmid(player_info[playerid][ADMINPASS], inputtext, 0, strval(inputtext));

 

Вы в базу данных загружаете старое значение переменной и лишь затем обновляете содержимое переменной. И вообще это странно, что компилятор позволил использовать функцию strmid для переменной player_info[playerid][ADMINPASS].

 

Спойлер

case DLG_REGADMIN:
{
	if(response)
	{
		if(!strlen(inputtext))
		{
			ShowAdminReg(playerid);
			return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}Придумайте PIN-код");
		}
		
		new value = strval(inputtext);
		
		if(value < 1000 || value > 9999)
		{
			ShowAdminReg(playerid);
			return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}PIN-код должен состоять из 4 цифр!");
		}
		
		player_info[playerid][ADMINPASS] = value;
			
		new sql_query[128];
		format(sql_query, sizeof(sql_query), "UPDATE `users` SET `adminpassword` = '%d' WHERE `id` = '%d'", player_info[playerid][ADMINPASS], player_info[playerid][ID]);
		mysql_query(dbHandle, sql_query);
		
		SCM(playerid, COLOR_WHITE, "Вы успешно зарегистрировали админ аккаунт");
	}
	else
	{
		SPD(playerid, -1, 0, " ", " ", " ", "");
	}
}

 

 

Share this post


Link to post
  • 0

Если это PIN-Code, зачем хранить его как строку?
Создай переменную целочисленного значения, и записывать легче, и хранить, и извлекать.

Share this post


Link to post
  • 0

@20th century спасибо, попробую

Share this post


Link to post
  • 0

@20th century Ну не знаю, в консоль выводит значение переменной но в базу не записывает, 2002 это PIN-код

Screenshot_44.png

Edited by Умелец

Share this post


Link to post
  • 0

@Умелец 



new sql_query[128];
format(sql_query, sizeof(sql_query), "UPDATE `users` SET `adminpassword` = '%d' WHERE `id` = '%d'", player_info[playerid][ADMINPASS], player_info[playerid][ID]/*(ID на своё)*/);
mysql_query(dbHandle, query);

попробуйте

 

Share this post


Link to post
  • 0

@keyl1337 Теперь записывает кривовато

Screenshot_45.png

Screenshot_46.png

Share this post


Link to post
  • 0

@Умелец, а покажите-ка объявление переменной, в которой храните PIN.

Share this post


Link to post
  • 0

Вы забыли поменять VARCHAR на INTEGER в таблице.

Share this post


Link to post
  • 0

Ещё раз дай весь код абсолютно, всё что связано с пин-кодом.

Share this post


Link to post
  • 0

@20th century 

Спойлер

stock ShowAdminReg(playerid)
{
	new dialog[38+(-2+MAX_PLAYER_NAME)];
	format(dialog, sizeof(dialog),
		"{FFFFFF}Придумайте Пин-Код для админки");
	SPD(playerid, DLG_REGADMIN, DIALOG_STYLE_INPUT, "{F6B352}Sand Role Play", dialog, "Далее", "Выход");
}

 

Спойлер

case DLG_REGADMIN:
{
  if(response)
  {
    if(!strlen(inputtext))
    {
      ShowAdminReg(playerid);
      return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}Придумайте PIN-код");
    }
    if(strval(inputtext) < 1000 || strval(inputtext) > 9999)
    {
      ShowAdminReg(playerid);
      return SCM(playerid, COLOR_RED, !"[Ошибка] {FFFFFF}PIN-код должен состоять из 4 цифр!");
    }
    else
    {
      new sql_query[128];
      format(sql_query, sizeof(sql_query), "UPDATE `users` SET `adminpassword` = '%d' WHERE `id` = '%d'", player_info[playerid][ADMINPASS], player_info[playerid][ID]);
      mysql_query(dbHandle, sql_query);
      strmid(player_info[playerid][ADMINPASS], inputtext, 0, strval(inputtext));
      printf("%d", player_info[playerid][ADMINPASS]);
      SCM(playerid, COLOR_WHITE, "Вы успешно зарегистрировали админ аккаунт");
    }
  }
  else
  {
    SPD(playerid, -1, 0, " ", " ", " ", "");
  }

}

 

 

Share this post


Link to post
  • 0

@odosenok Огромное спасибо, сам не мог понять этого :D

Share this post


Link to post
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Asminov
      By Asminov
      Здравствуйте, хотел сделать систему домов, но что-то пошло не так, пытался сделать что угодно. Проще говоря проблема в том что когда покупаешь дом, пикап меняется на этот, также в папке сохранения вместо None "владельца дома до покупки", появляется пустая строка. Помогите исправить