Добавление записи в mysql

JumPixX

Админ. CSSRUS.ru
Сообщения
94
Реакции
14
0wn3r, Я считаю что это не особо правильно... Так как мы делаем проверку присутствует ли в базе игрок или нет...
А отсылать обратно на сервер список всех игроков которые в базе это будет жирно... я бы вообще сделал что-то вроде этого:
C-подобный:
SELECT `SteamID` FROM `steam` WHERE `SteamID` = '%s' LIMIT 1
чтобы он не считал всех в базе... а просто взял 1 ячейку и вернул...

JumPixX, не меняй в коде ничего, просто пиши что тебе нужно, так как ты не разбираешься в этом,
иначе ты просто еще сильнее людей запутываешь которые здесь пытаются тебе помочь...

к примеру взять замену OnClientPostAdminCheck(client) на OnClientPutInServer(client)
конечно база будет пустая, wS тебе объяснил...

maverick1660, OnClientPostAdminCheck(client) это не проверка на админ или нет, это событие
пост проверки флагов и.т.д клиента, как сказал semjef.

Работало не из-за OnClientPutInServer, а из-за запроса.
И ты чуток не правильно сказал про запрос
PHP:
SELECT * FROM `steam` WHERE `SteamID` = '%s'
Как бы если подставить за место %s стимайди, и его в базе нет, то ничего не выведет (ответ будет пуст). А если он найдется в базе, то выведет только одну ячейку с этим steamid.
---------------------
А в запросе
PHP:
SELECT COUNT(*) FROM `steam` WHERE `SteamID` = '%s' LIMIT 1
еще проще.
Если есть такой SteamID в базе, то выведет 1. А если нету, то 0
 

0wn3r

Участник
Сообщения
184
Реакции
53
COUNT использовать не желательно, поскольку мы делаем это силами соурсмода. Даже если считать нужно только один раз.
LIMIT 1 так же не нужно, поскольку результат запроса будет только один, а не несколько поскольку 2 одинаковых стим айди в данном случае быть не может.
 

maverick1660

Проект DeathLine.ru
Сообщения
187
Реакции
93
Если бы ты делал проверку if (GetUserAdmin(client) != INVALID_ADMIN_ID) в OnClientAuthorized или в OnClientPutInServer - возвращало бы всегда INVALID_ADMIN_ID (нет прав), т.к. это слишком рано, чтобы проверять, есть ли у него права. Так что событие OnClientPostAdminCheck гарантирует, что все флаги доступа уже были установлены игроку (если они у него есть, admins.cfg, admins_simple.ini).

Спасибо большое. Я был не внимателен, все что ты описал было написано в API :-D
 

JumPixX

Админ. CSSRUS.ru
Сообщения
94
Реакции
14
А кто нибудь подскажите как в GetTime из unix timestamp переделать в y-m-d. Тоесть год-месяц-день
 

wanted241

Real-Gamer.Ru
Сообщения
428
Реакции
161
decl String:thetime[55];
FormatTime(thetime, sizeof(thetime), "%d-%m-%Y");

Потом юзай как строку.
 

JumPixX

Админ. CSSRUS.ru
Сообщения
94
Реакции
14
decl String:thetime[55];
FormatTime(thetime, sizeof(thetime), "%d-%m-%Y");

Потом юзай как строку.

Спасибо большой, сделал уже именно так. Только формула %Y-%m-%d

Добавлено через 16 часов 26 минут
Может кто нибудь объяснить что этот код делает то?

PHP:
public SQLErrorCheckCallback(Handle:owner, Handle:hndl, const String:error[], any:data) 
{ 
    if (owner == INVALID_HANDLE) 
    { 
        LogError("SQL Error (owner): %s", error); 
        PrintToServer("SQL Error (owner): %s", error);
        return; 
    }
    if (hndl == INVALID_HANDLE) 
    { 
        LogError("SQL Error(hndl): %s", error); 
        PrintToServer("SQL Error(hndl): %s", error);
        return; 
    }
}
 

semjef

semjef.ru
Сообщения
993
Реакции
444
owner - ошибка подключения
hndl это вроде синтаксис и т.п.
 

JumPixX

Админ. CSSRUS.ru
Сообщения
94
Реакции
14
owner - ошибка подключения
hndl это вроде синтаксис и т.п.

А точнее. Ничего не понял, и что делает. Ошибка подключения же выше.

PHP:
        if (db == INVALID_HANDLE)
        {
            LogError("Failed to connect to database: %s", Error);
            PrintToServer("Failed to connect to database!");
        }
 

Slayerko

Участник
Сообщения
12
Реакции
0
Пишу маленький скрипт по добавление steamid моих игроков в базу.
И тут проблема :( Только на половину работает...
Нужно что бы человек заходил на сервер и его SteamID добавлялся мне в базу, а если он уже есть в базе то игнорилось. (в скрипте это уже почти реализовано).

Код:
PHP:
#pragma semicolon 1

#include <sourcemod>

#define PLUGIN_VERSION "1.0"

new Handle:g_SQL = INVALID_HANDLE, bool:MYSQL,conte; 

public Plugin:myinfo =
{
	 name = "Injection",
	 description = "123",
	 author = "123",
	 version = PLUGIN_VERSION,
	 url = "123"
};

public OnPluginStart() 
{ 
	 new Handle:kv = CreateKeyValues("injection");
	 KvSetString(kv, "driver", "mysql");
	 KvSetString(kv, "host", "mysql.***.ru");
	 KvSetString(kv, "database", "injection");
	 KvSetString(kv, "user", "spawn");
	 KvSetString(kv, "pass", "f0sU7OFK");
	 KvSetString(kv, "port", "3306");
	
	 decl String:error[255];
	 g_SQL = SQL_ConnectCustom(kv, error, 255, true); 
	 CloseHandle(kv);
	 
	 new String:driver[15];
	 SQL_ReadDriver(g_SQL, driver, 15); 
	 MYSQL = StrEqual(driver, "mysql", false);
	 LogMessage("Установлено %s соединение", MYSQL ? "MYSQL" : "SQLite");
	 
	 decl String:steamid[64];
	 GetClientAuthString(client, steamid, 64);
	 
     conte = SQL_TQuery(g_SQL, SQL_DefCallback, "SELECT COUNT(*) FROM `steam` WHERE `SteamID` = '%s' LIMIT 1", steamid); 
	 
     if(conte != 0) 
  { 
     SQL_TQuery(g_SQL, SQL_DefCallback, "INSERT INTO `steam` (`SteamID`) VALUES ('%s')", steamid); 
  }
	 
}

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

Ах, да. Ошибка:

new client = GetClientOfUserId(GetEventInt(event, "userid"));
 

semjef

semjef.ru
Сообщения
993
Реакции
444
DoK_1997, забей, парень чтото очень сильно перепутал
 
Сверху Снизу