MySql R8 Можно ли так делать? -
James_Braga - 11.07.2013
Можно ли использовать это так?
То есть внутри public`а обработки запроса, отправлять ещё несколько запросов?
PHP код:
format(query, sizeof(query), "SELECT `Bank` FROM `players` WHERE `Name` = '%s'", Biznes2Info[i][b2Owner]);
mysql_function_query(g_CH, query, true, "ArrestAZSNEXT", "dd", i,ppay);
forward ArrestAZSNEXT(i,ppay);
public ArrestAZSNEXT(i,ppay)
{
static rows, fields;
cache_get_data(rows, fields);
if(rows)
{
new banksumm = cache_get_field_int(rows, "Bank", g_CH);
banksumm += ppay;
format(query, sizeof(query),"UPDATE `players` SET `Bank`= '%i',`Biz2`= '-1',`SellMesage2`= 1 WHERE `Name`='%s'",banksumm,Biznes2Info[i][b2Owner]);
mysql_function_query(g_CH, query, false, "", "");//Запрос в базу
Biznes2Info[i][b2Cash] = 0,mysql_biz_update_int(i,"Cash",Biznes2Info[i][b2Cash]);//Запрос в базу
strdel(Biznes2Info[i][b2Owner],0,MAX_PLAYER_NAME),Biznes2Info[i][b2Owned] = 0;
Biznes2Info[i][b2Colonca][0] = 1244,Biznes2Info[i][b2Colonca][1] = 1244;
Biznes2Info[i][b2Colonca][2] = 1244,Biznes2Info[i][b2Colonca][3] = 1244;
Biznes2Info[i][b2Colonca][4] = 1244,Biznes2Info[i][b2Colonca][5] = 1244;
Biznes2Info[i][b2Cenapokupki] = 0,Biznes2Info[i][b2Cash] = 0;
UpdateBiz2(i);
SaveBiznes2(i);//Запрос в базу
}
return true;
}
Re: MySql R8 Можно ли так делать? -
Stepashka - 11.07.2013
Можно.
Re: MySql R8 Можно ли так делать? -
Den_Bellik - 11.07.2013
PHP код:
static rows, fields;
cache_get_data(rows, fields);
зачем тебе каждый раз оставлять данные? а не обнулять их через new?
Re: MySql R8 Можно ли так делать? -
James_Braga - 11.07.2013
Спасибо, вот ещё одна проблема, вроде бы всё перевёл, стопарнулся на проверке паролей, если введёный (password) == полученному результату из базы (tmp) то продолжаем, но проблема в том что cache_get_field_content(rows,"Password", tmp, g_CH, 32); возвращает не пароль а NULL, что делать?
PHP код:
stock OnPlayerLogin(playerid,password[])
{
new query2[2000];
format(query2,sizeof(query2),"SELECT * FROM `players` WHERE Name = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(g_CH, query2, true, "OnPlayerLoginPASS", "ds", playerid,password);
return true;
}
PHP код:
forward OnPlayerLoginPASS(playerid,password[]);
public OnPlayerLoginPASS(playerid,password[])
{
new rows, fields,tmp[32],change;
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(rows,"Password", tmp, g_CH, 32);
if(strcmp(tmp,password, true ) == 0)
{
Re: MySql R8 Можно ли так делать? -
XemyL - 11.07.2013
Потому что ты вытаскиваешь не из той строки. rows - это количество найденных строк, а ты используешь это значение в качестве строки. Если аккаунт один, то номер строки всегда будет 0.
cache_get_field_content(0,"Password", tmp, g_CH, 32);
Re: MySql R8 Можно ли так делать? -
Den_Bellik - 11.07.2013
Quote:
Originally Posted by James_Braga
Спасибо, вот ещё одна проблема, вроде бы всё перевёл, стопарнулся на проверке паролей, если введёный (password) == полученному результату из базы (tmp) то продолжаем, но проблема в том что cache_get_field_content(rows,"Password", tmp, g_CH, 32); возвращает не пароль а NULL, что делать?
PHP код:
stock OnPlayerLogin(playerid,password[])
{
new query2[2000];
format(query2,sizeof(query2),"SELECT * FROM `players` WHERE Name = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(g_CH, query2, true, "OnPlayerLoginPASS", "ds", playerid,password);
return true;
}
PHP код:
forward OnPlayerLoginPASS(playerid,password[]);
public OnPlayerLoginPASS(playerid,password[])
{
new rows, fields,tmp[32],change;
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(rows,"Password", tmp, g_CH, 32);
if(strcmp(tmp,password, true ) == 0)
{
|
Выше есть ответ на твой вопрос, но я об остальном хочу тебе сказать:
1. Зачем сток? Можно просто задефайнить.
PHP код:
#define OnPlayerLogin(%0,%1) new query2[40+25]; mysql_format(id подключение,query2, sizeof(query2),"SELECT * FROM `players` WHERE Name = '%e'",PlayerInfo[%0][pName]); mysql_function_query(g_CH, query2, true, "OnPlayerLoginPASS", "ds", %0, %1)
2. Зачем 2000 масива? Когда у нас запрос 40 масива + 25 ник итог
PHP код:
new query2[40+25];
3. Почему нету иньекции? Выше привел пример в дефайне, тебе только нужно указать ид подключение, и что нужно только изменять в mysql_format %s на %e и указывать ид подключенния ( переменная = mysql_connect.... )
4. Зачем узнавать пароль, а потом его проверять? Не проще?
PHP код:
"SELECT * FROM `players` WHERE Name = '%e' AND Password = `%e`",PlayerInfo[%0][pName], %1);
И тогда будет:
PHP код:
if(rows)
{
//верно, выгружаем данные
}
else
{
//не верный пароль
}
5. rows - мы узнаем сколько получили данных под этим запросом, то есть если в твоем случаи мы получили 1 акк rows будет равно 1, можно так же сделать проверку - если аккаунтов больше 1-го xD - то что то делаем.
- Но чтобы юзать, сколько мы получили данных если у нас rows = 1, то чтобы использувать нам нужно -1, т.е юзать 0.
PHP код:
forward OnPlayerLoginPASS(playerid,password[]);
public OnPlayerLoginPASS(playerid,password[])
{
new rows, fields,tmp[32],change;
cache_get_data(rows, fields);
if(rows > 1)
{
// kod
}
if(rows)
{
Вот и все
Re: MySql R8 Можно ли так делать? -
Tumba - 14.07.2013
Quote:
Originally Posted by Den_Bellik
Выше есть ответ на твой вопрос, но я об остальном хочу тебе сказать:
1. Зачем сток? Можно просто задефайнить.
PHP код:
#define OnPlayerLogin(%0,%1) new query2[40+25]; mysql_format(id подключение,query2, sizeof(query2),"SELECT * FROM `players` WHERE Name = '%e'",PlayerInfo[%0][pName]); mysql_function_query(g_CH, query2, true, "OnPlayerLoginPASS", "ds", %0, %1)
2. Зачем 2000 масива? Когда у нас запрос 40 масива + 25 ник итог
PHP код:
new query2[40+25];
3. Почему нету иньекции? Выше привел пример в дефайне, тебе только нужно указать ид подключение, и что нужно только изменять в mysql_format %s на %e и указывать ид подключенния ( переменная = mysql_connect.... )
4. Зачем узнавать пароль, а потом его проверять? Не проще?
PHP код:
"SELECT * FROM `players` WHERE Name = '%e' AND Password = `%e`",PlayerInfo[%0][pName], %1);
И тогда будет:
PHP код:
if(rows)
{
//верно, выгружаем данные
}
else
{
//не верный пароль
}
5. rows - мы узнаем сколько получили данных под этим запросом, то есть если в твоем случаи мы получили 1 акк rows будет равно 1, можно так же сделать проверку - если аккаунтов больше 1-го xD - то что то делаем.
- Но чтобы юзать, сколько мы получили данных если у нас rows = 1, то чтобы использувать нам нужно -1, т.е юзать 0.
PHP код:
forward OnPlayerLoginPASS(playerid,password[]);
public OnPlayerLoginPASS(playerid,password[])
{
new rows, fields,tmp[32],change;
cache_get_data(rows, fields);
if(rows > 1)
{
// kod
}
if(rows)
{
Вот и все
|
1. Тебя на п-и так "оптимизировать" научили?Полнейший бред
3.Нет инъекции??Мб защиты от нее, плюс там она не нужна
Re: MySql R8 Можно ли так делать? -
Den_Bellik - 14.07.2013
Quote:
Originally Posted by Tumba
1. Тебя на п-и так "оптимизировать" научили?Полнейший бред
3.Нет инъекции??Мб защиты от нее, плюс там она не нужна
|
Полный бред то что ты написал. Так как здесь помогают, а если ты в теме только умеешь критиковать и даже не можешь указать мои ошибки - тогда я вообще не вижу смысла в твоем посте. Я думаю не важно где и как меня учили, так как научили так и делаю. И да, защита от иньекция в mysql r8 есть, нужно юзать или mysql_real_escape_string или mysql_format. Так же не вижу дальнейшей дискуссии, здесь.
Извините за оффтоп.