Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Помогите с SQLite
cssv70 Дата: Суббота, 08.11.2014, 11:27:04 | Сообщение # 1
Сообщений: 10
Репутация: 0 [ +/- ]
Всем привет . Помогите с SQLite . Просмотр и запись работает
Код
decl String:steamid[64];
  GetClientAuthString(client, steamid, 32);
   
  new String:query[255];
  Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid);
  new Handle:hquery = SQL_Query(g_SQL, query);     
  if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery))     
  {     
    
   PrintToChat(client, "\x04 Вы уже в базе!");
   SQL_TQuery(g_SQL, SQL_DefCallback, query);
   return Plugin_Handled;
  }

Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 600);  
  PrintToChat(client, "\x04 Фаил записался.");
  SQL_TQuery(g_SQL, SQL_DefCallback, query);



Не получается сделать удаление из базы по истечению времени timestamp

Код
Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid);
  PrintToChat(client, "\x04 Удалены из базы.");
  SQL_TQuery(g_SQL, SQL_DefCallback, query);


Я новичок
 
king(rus) Дата: Суббота, 08.11.2014, 16:19:30 | Сообщение # 2
Сообщений: 109
Репутация: 2 [ +/- ]
Цитата cssv70 ()
SQL_DefCallback

Где обработка? Давай весь код SQL.
 
cssv70 Дата: Вторник, 11.11.2014, 14:59:08 | Сообщение # 3
Сообщений: 10
Репутация: 0 [ +/- ]
Код
public OnPluginStart()    
{    
    if (!SQL_CheckConfig("MySection"))
    {
     SetFailState("Секция \"MySection\" не найдена в databases.cfg");
     return;
    }

    decl String:error[256];
    g_SQL = SQL_Connect("MySection", true, error, 256);
    if (g_SQL == INVALID_HANDLE)
    {
     LogError(error);
     SetFailState("Не удалось установить SQL соединение");
     return;
    }

      
    new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15);
       
    LogMessage("Установлено %s соединение",  "SQLite");

      
    if (g_SQL)
       
    {
     SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL,  `timestamp` varchar(20) NOT NULL, \
      PRIMARY KEY (`steamid`))", 0);    
       
    }

       

}

public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data)
{
    if (hndl == INVALID_HANDLE) LogError(error);
       
}
public Action:Command_(client, args)  
{  
  decl String:steamid[64], timestamp;
  GetClientAuthString(client, steamid, 32);
   
  new String:query[255];
  Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid);
  new Handle:hquery = SQL_Query(g_SQL, query);     
  if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery))     
  {     
    
   PrintToChat(client, "\x04Вы уже зарегестрированы!");
   SQL_TQuery(g_SQL, SQL_DefCallback, query);
   return Plugin_Handled;
  }

   
   
  Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 60);  
  PrintToChat(client, "\x04Фаил записался.");
  SQL_TQuery(g_SQL, SQL_DefCallback, query);

   
   
   
   
   
   
   
   

   
   
   
   
  return Plugin_Handled;
   

}  

Добавлено (09.11.2014, 11:58:20)
---------------------------------------------
Исправьте ошибку

Код
decl String:sSteam[64], timestamp;
  GetClientAuthString(client, sSteam, sizeof(sSteam));
  Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", timestamp);
  if(SQL_Query(g_SQL, sSteam))
  {
   timestamp = SQL_Query(g_SQL, "timestamp", 0);     
   if (timestamp > 0)  
   {
    if(GetTime() > timestamp)
    {
    Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid);
    PrintToChat(client, "\x04Удалены из базы.");
    SQL_TQuery(g_SQL, SQL_DefCallback, query)
    return Plugin_Handled;
    }
   }
   
   
  }

Добавлено (11.11.2014, 14:59:08)
---------------------------------------------
Хоть бы кто отписался, может бы подсказал ? zloy



Сообщение отредактировал cssv70 - Воскресенье, 09.11.2014, 10:28:52
 
king(rus) Дата: Вторник, 11.11.2014, 15:17:59 | Сообщение # 4
Сообщений: 109
Репутация: 2 [ +/- ]
Код
Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", timestamp);

Для начала вот тут твоя ошибка. Ты ищешь по стим ид, а переменная timestamp.
 
cssv70 Дата: Вторник, 11.11.2014, 15:36:15 | Сообщение # 5
Сообщений: 10
Репутация: 0 [ +/- ]
В базе прописал steamid, timestamp время
Код
  Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 60);   
   PrintToChat(client, "\x04Фаил записался.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query);

как по истечению времени timestampсделать удаление из базы
Код
Format(query, sizeof(query), "DELETE FROM my_tab WHERE steamid ='%s'", steamid);  
     PrintToChat(client, "\x04Удалены из базы.");  
     SQL_TQuery(g_SQL, SQL_DefCallback, query)
 
dron216 Дата: Вторник, 11.11.2014, 19:13:30 | Сообщение # 6
Сообщений: 151
Репутация: 18 [ +/- ]
Код
Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time);   
      PrintToChat(client, "\x04Удалены из базы.");   
      SQL_TQuery(g_SQL, SQL_DefCallback, query)
 
cssv70 Дата: Вторник, 11.11.2014, 20:52:40 | Сообщение # 7
Сообщений: 10
Репутация: 0 [ +/- ]
Полностью код
Код
#include <sourcemod>  

new Handle:g_SQL = INVALID_HANDLE  

public Plugin:myinfo =  
{
  name = "test",
  author = "Unknown",
  description = "<- Description ->",
  version = "1.0",
  url = "<- URL ->"
}

public OnPluginStart()  
{  
  if (!SQL_CheckConfig("MySection"))
  {
   SetFailState("Секция \"MySection\" не найдена в databases.cfg");
   return;
  }

  decl String:error[256];
  g_SQL = SQL_Connect("MySection", true, error, 256);
  if (g_SQL == INVALID_HANDLE)
  {
   LogError(error);
   SetFailState("Не удалось установить SQL соединение");
   return;
  }

   
  new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15);
   
  LogMessage("Установлено %s соединение",  "SQLite");

   
  if (g_SQL)
   
  {
   SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL,  `timestamp` varchar(20) NOT NULL, \
    PRIMARY KEY (`steamid`))", 0);  
   
  }

  RegConsoleCmd("sm_test", Command_test);

}  

public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data)
{
  if (hndl == INVALID_HANDLE) LogError(error);
   
}

public Action:Command_test(client, args)  
{  
  new String:steamid[64];
  GetClientAuthString(client, steamid, 32);
   
  new String:query[255];
  Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid);
  new Handle:hquery = SQL_Query(g_SQL, query);     
  if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery))     
  {     
    
   PrintToChat(client, "\x04Вы уже зарегестрированы!");
   SQL_TQuery(g_SQL, SQL_DefCallback, query);
   return Plugin_Handled;
  }

  GetClientAuthString(client, steamid, sizeof(steamid));
   
   
  Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10);  
  PrintToChat(client, "\x04Фаил записался.");
  SQL_TQuery(g_SQL, SQL_DefCallback, query);

   
  // Проверка времени и удаление  
   
   
  new String: Time;
  Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time);
  PrintToChat(client, "\x04Удалены из базы.");
  SQL_TQuery(g_SQL, SQL_DefCallback, query)  
    
   
   
  return Plugin_Handled;
   

}  



Цитата
dron216
не работает
 
dron216 Дата: Вторник, 11.11.2014, 21:50:40 | Сообщение # 8
Сообщений: 151
Репутация: 18 [ +/- ]
Time числовая переменная, в неё внеси необходимое время... (например, у игрока timestamp 2, в Time ставишь 2, и его удалит...)
 
Tokami Дата: Вторник, 11.11.2014, 22:12:09 | Сообщение # 9
Сообщений: 238
Репутация: 19 [ +/- ]
Не знаю странно ты берешь инфу из базы я делаю так у меня все норм работает
Код

SELECT * FROM bans_players WHERE steamid='%s' AND (time = '0' OR time > UNIX_TIMESTAMP())
 
cssv70 Дата: Среда, 12.11.2014, 13:35:43 | Сообщение # 10
Сообщений: 10
Репутация: 0 [ +/- ]
dron216, извени я новичке не мог бы ты написать полностью кода то я не догоняю

Здесь я прописал время 10 секунд GetTime() + 10
Код
Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10);   
   PrintToChat(client, "\x04 Фаил записался.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query);


где здесь записать Time 10
Код
new String: Time;  
   Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time);  
   PrintToChat(client, "\x04Удалены из базы.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query)  
 
dron216 Дата: Среда, 12.11.2014, 15:16:53 | Сообщение # 11
Сообщений: 151
Репутация: 18 [ +/- ]
Код
new Time = 10;

а не
Код
new String: Time;

В sql запросе также можно использовать < (меньше) и > (больше)


Сообщение отредактировал dron216 - Среда, 12.11.2014, 15:18:55
 
cssv70 Дата: Среда, 12.11.2014, 17:01:44 | Сообщение # 12
Сообщений: 10
Репутация: 0 [ +/- ]
dron216, не работает grust

Код
#include <sourcemod>   

new Handle:g_SQL = INVALID_HANDLE   

public Plugin:myinfo =   
{  
   name = "test",  
   author = "Unknown",  
   description = "<- Description ->",  
   version = "1.0",  
   url = "<- URL ->"  
}  

public OnPluginStart()   
{   
   if (!SQL_CheckConfig("MySection"))  
   {  
    SetFailState("Секция \"MySection\" не найдена в databases.cfg");  
    return;  
   }  

   decl String:error[256];  
   g_SQL = SQL_Connect("MySection", true, error, 256);  
   if (g_SQL == INVALID_HANDLE)  
   {  
    LogError(error);  
    SetFailState("Не удалось установить SQL соединение");  
    return;  
   }  

     
   new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15);  
     
   LogMessage("Установлено %s соединение",  "SQLite");  

     
   if (g_SQL)  
     
   {  
    SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL,  `timestamp` varchar(20) NOT NULL, \  
     PRIMARY KEY (`steamid`))", 0);   
     
   }  

   RegConsoleCmd("sm_test", Command_test);  

}   

public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data)  
{  
   if (hndl == INVALID_HANDLE) LogError(error);  
     
}  

public Action:Command_test(client, args)   
{   
   new String:steamid[64];  
   GetClientAuthString(client, steamid, 32);  
     
   new String:query[255];  
   Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid);  
   new Handle:hquery = SQL_Query(g_SQL, query);      
   if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery))      
   {      
      
    PrintToChat(client, "\x04Вы уже зарегестрированы!");  
    SQL_TQuery(g_SQL, SQL_DefCallback, query);  
    return Plugin_Handled;  
   }  

   GetClientAuthString(client, steamid, sizeof(steamid));  
     
     
   Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10);   
   PrintToChat(client, "\x04Фаил записался.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query);  

     
   // Проверка времени и удаление   
     
     
   new Time = 10;
   Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time);  
   PrintToChat(client, "\x04Удалены из базы.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query)   
      
     
     
   return Plugin_Handled;  
     

}  
 
king(rus) Дата: Среда, 12.11.2014, 20:34:45 | Сообщение # 13
Сообщений: 109
Репутация: 2 [ +/- ]
Цитата cssv70 ()
dron216, не работает

Код
#include <sourcemod>   

new Handle:g_SQL = INVALID_HANDLE   

public Plugin:myinfo =   
{  
   name = "test",  
   author = "Unknown",  
   description = "<- Description ->",  
   version = "1.0",  
   url = "<- URL ->"  
}  

public OnPluginStart()   
{   
   if (!SQL_CheckConfig("MySection"))  
   {  
    SetFailState("Секция \"MySection\" не найдена в databases.cfg");  
    return;  
   }  

   decl String:error[256];  
   g_SQL = SQL_Connect("MySection", true, error, 256);  
   if (g_SQL == INVALID_HANDLE)  
   {  
    LogError(error);  
    SetFailState("Не удалось установить SQL соединение");  
    return;  
   }  

     
   new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15);  
     
   LogMessage("Установлено %s соединение",  "SQLite");  

     
   if (g_SQL)  
     
   {  
    SQL_TQuery(g_SQL, SQL_DefCallback, "CREATE TABLE my_tab( 'steamid' VARCHAR(52) NOT NULL,  `timestamp` varchar(20) NOT NULL, \  
     PRIMARY KEY (`steamid`))", 0);   
     
   }  

   RegConsoleCmd("sm_test", Command_test);  

}   

public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data)  
{  
   if (hndl == INVALID_HANDLE) LogError(error);  
     
}  

public Action:Command_test(client, args)   
{   
   new String:steamid[64];  
   GetClientAuthString(client, steamid, 32);  
     
   new String:query[255];  
   Format(query, sizeof(query), "SELECT * FROM my_tab WHERE steamid ='%s'", steamid);  
   new Handle:hquery = SQL_Query(g_SQL, query);      
   if (hquery != INVALID_HANDLE && SQL_FetchRow(hquery))      
   {      
      
    PrintToChat(client, "\x04Вы уже зарегестрированы!");  
    SQL_TQuery(g_SQL, SQL_DefCallback, query);  
    return Plugin_Handled;  
   }  

   GetClientAuthString(client, steamid, sizeof(steamid));  
     
     
   Format(query, sizeof(query), "INSERT INTO my_tab(steamid, timestamp) VALUES('%s', '%i')", steamid, GetTime() + 10);   
   PrintToChat(client, "\x04Фаил записался.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query);  

     
   // Проверка времени и удаление   
     
     
   new Time = 10;
   Format(query, sizeof(query), "DELETE FROM my_tab WHERE timestamp ='%i'", Time);  
   PrintToChat(client, "\x04Удалены из базы.");  
   SQL_TQuery(g_SQL, SQL_DefCallback, query)   
      
     
     
   return Plugin_Handled;  
     

}  


Разбери код логически. Если не сможешь, пиши в ЛС. Дам свой скайп
 
dron216 Дата: Среда, 12.11.2014, 22:43:28 | Сообщение # 14
Сообщений: 151
Репутация: 18 [ +/- ]
Во первых, у тебя занесение и удаление срабатывают по одной команде, даже если тебя нет, тебя занесет и тут же проверит вышло ли время...
Во вторых, почитай что такое GetTime() - https://sm.alliedmods.net/api/
В третьих, при проверке лучше используй UNIX_TIMESTAMP (в самом sql запросе) и никах доп. переменных не надо
Код
DELETE FROM my_tab WHERE timestamp < UNIX_TIMESTAMP()


Сообщение отредактировал dron216 - Четверг, 13.11.2014, 14:41:05
 
  • Страница 1 из 1
  • 1
Поиск: