Вопросы

Решил сделать команду чисто для теста, отвечает она за регистрацию 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

Отредактировано пользователем Умелец

Поделиться сообщением


Ссылка на сообщение

13 ответов на этот вопрос

  • 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, " ", " ", " ", "");
	}
}

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Screenshot_44.png

Отредактировано пользователем Умелец

Поделиться сообщением


Ссылка на сообщение
  • 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);

попробуйте

 

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Screenshot_45.png

Screenshot_46.png

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

@20th century Стоит

Screenshot_48.png

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 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, " ", " ", " ", "");
  }

}

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Узбек
      От Узбек
      Всем добрый вечер ребят! 
      Я начинающий, сегодня я вам сливаю команду 2(шт) на технические работы
      Ловите 
       
    • nazpol9
      От nazpol9
      Привет всем.

      У меня имеется мод для самп сервера и VPS с Ubuntu, на котором я пытаюсь его запустить.

      В чем суть проблемы: при запуске samp03svr, сервер запускается, но на версии 0.3.DL R-1. Когда я пытаюсь запустить этот же мод локально на Windows, сервер работает на версии 0.3.7 и я могу зайти на него без клиента 0.3.DL.

      Для решения этой проблемы я уже пробовал заменять инклуды и исполнительные файлы теми, что есть в архивах на официальном сайте сампа, перекомпилировал мод, и ничего не изменилось.
       
      #include <a_samp> #include <a_mysql> #include <foreach> #include <Pawn.RakNet> #include <streamer> #include <sscanf2> #include <float2> #include <crashdetect> #include <fmt> #include <a_http> #include <Pawn.CMD> #include <Pawn.Regex> #include <requests> #include <callbacks> #include <MD5> #include <mxdate> #include <TOTP> #include <gvar> #include <md-sort> #include <nex-ac> #include <weapon-config> #include <discord-connector> #include <3DTryg> #include <textdraw-streamer>  
      plugins crashdetect.so streamer.so textdraw-streamer.so sscanf.so pawnraknet.so pawncmd.so mysql.so requests.so profiler.so pawnregex.so TOTP.so gvar.so discord-connector.so

      Если у кого-то будут какие-либо догадки, прошу ими поделиться, если понадобится больше информации - я постараюсь её предоставить.