SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 11/07/2013, 05:03 AM   #1
James_Braga
Huge Clucker
 
James_Braga's Avatar
 
Join Date: Sep 2012
Posts: 223
Reputation: 9
Default MySql R8 Можно ли так делать?

Можно ли использовать это так?
То есть внутри public`а обработки запроса, отправлять ещё несколько запросов?

PHP Code:
format(querysizeof(query), "SELECT `Bank` FROM `players` WHERE `Name` = '%s'"Biznes2Info[i][b2Owner]);
mysql_function_query(g_CHquerytrue"ArrestAZSNEXT""dd"i,ppay);


forward ArrestAZSNEXT(i,ppay);
public 
ArrestAZSNEXT(i,ppay)
{
    static 
rowsfields;
    
cache_get_data(rowsfields);
    if(
rows)
    {
        new 
banksumm cache_get_field_int(rows"Bank"g_CH);
        
banksumm += ppay;
        
        
format(querysizeof(query),"UPDATE `players` SET `Bank`= '%i',`Biz2`= '-1',`SellMesage2`= 1 WHERE `Name`='%s'",banksumm,Biznes2Info[i][b2Owner]);
        
mysql_function_query(g_CHqueryfalse"""");//Запрос в базу
        
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;

James_Braga is offline   Reply With Quote
Old 11/07/2013, 06:09 AM   #2
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,463
Reputation: 131
Default Re: MySql R8 Можно ли так делать?

Можно.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 11/07/2013, 09:48 AM   #3
Den_Bellik
Big Clucker
 
Den_Bellik's Avatar
 
Join Date: Aug 2011
Location: Ukraine | City: Rovno
Posts: 79
Reputation: 1
Default Re: MySql R8 Можно ли так делать?

PHP Code:
    static rowsfields
    
cache_get_data(rowsfields); 
зачем тебе каждый раз оставлять данные? а не обнулять их через new?
Den_Bellik is offline   Reply With Quote
Old 11/07/2013, 11:31 AM   #4
James_Braga
Huge Clucker
 
James_Braga's Avatar
 
Join Date: Sep 2012
Posts: 223
Reputation: 9
Default Re: MySql R8 Можно ли так делать?

Спасибо, вот ещё одна проблема, вроде бы всё перевёл, стопарнулся на проверке паролей, если введёный (password) == полученному результату из базы (tmp) то продолжаем, но проблема в том что cache_get_field_content(rows,"Password", tmp, g_CH, 32); возвращает не пароль а NULL, что делать?
PHP Code:
stock OnPlayerLogin(playerid,password[])
{
    new 
query2[2000];
    
format(query2,sizeof(query2),"SELECT * FROM `players` WHERE Name = '%s'",PlayerInfo[playerid][pName]);
    
mysql_function_query(g_CHquery2true"OnPlayerLoginPASS""ds"playerid,password);
    return 
true;

PHP Code:
forward OnPlayerLoginPASS(playerid,password[]);
public 
OnPlayerLoginPASS(playerid,password[])
{
    new 
rowsfields,tmp[32],change;
    
cache_get_data(rowsfields);
    if(
rows)
    {
        
cache_get_field_content(rows,"Password"tmpg_CH32);
        if(
strcmp(tmp,passwordtrue ) == 0)
        { 
James_Braga is offline   Reply With Quote
Old 11/07/2013, 12:11 PM   #5
XemyL
Huge Clucker
 
XemyL's Avatar
 
Join Date: Nov 2012
Posts: 342
Reputation: 3
Default Re: MySql R8 Можно ли так делать?

Потому что ты вытаскиваешь не из той строки. rows - это количество найденных строк, а ты используешь это значение в качестве строки. Если аккаунт один, то номер строки всегда будет 0.

cache_get_field_content(0,"Password", tmp, g_CH, 32);
XemyL is offline   Reply With Quote
Old 11/07/2013, 09:22 PM   #6
Den_Bellik
Big Clucker
 
Den_Bellik's Avatar
 
Join Date: Aug 2011
Location: Ukraine | City: Rovno
Posts: 79
Reputation: 1
Default Re: MySql R8 Можно ли так делать?

Quote:
Originally Posted by James_Braga View Post
Спасибо, вот ещё одна проблема, вроде бы всё перевёл, стопарнулся на проверке паролей, если введёный (password) == полученному результату из базы (tmp) то продолжаем, но проблема в том что cache_get_field_content(rows,"Password", tmp, g_CH, 32); возвращает не пароль а NULL, что делать?
PHP Code:
stock OnPlayerLogin(playerid,password[])
{
    new 
query2[2000];
    
format(query2,sizeof(query2),"SELECT * FROM `players` WHERE Name = '%s'",PlayerInfo[playerid][pName]);
    
mysql_function_query(g_CHquery2true"OnPlayerLoginPASS""ds"playerid,password);
    return 
true;

PHP Code:
forward OnPlayerLoginPASS(playerid,password[]);
public 
OnPlayerLoginPASS(playerid,password[])
{
    new 
rowsfields,tmp[32],change;
    
cache_get_data(rowsfields);
    if(
rows)
    {
        
cache_get_field_content(rows,"Password"tmpg_CH32);
        if(
strcmp(tmp,passwordtrue ) == 0)
        { 
Выше есть ответ на твой вопрос, но я об остальном хочу тебе сказать:

1. Зачем сток? Можно просто задефайнить.
PHP Code:
#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 Code:
new query2[40+25]; 
3. Почему нету иньекции? Выше привел пример в дефайне, тебе только нужно указать ид подключение, и что нужно только изменять в mysql_format %s на %e и указывать ид подключенния ( переменная = mysql_connect.... )

4. Зачем узнавать пароль, а потом его проверять? Не проще?
PHP Code:
"SELECT * FROM `players` WHERE Name = '%e' AND Password = `%e`",PlayerInfo[%0][pName], %1); 
И тогда будет:
PHP Code:
if(rows)
{
//верно, выгружаем данные
}
else 
{
//не верный пароль 

5. rows - мы узнаем сколько получили данных под этим запросом, то есть если в твоем случаи мы получили 1 акк rows будет равно 1, можно так же сделать проверку - если аккаунтов больше 1-го xD - то что то делаем.
  • Но чтобы юзать, сколько мы получили данных если у нас rows = 1, то чтобы использувать нам нужно -1, т.е юзать 0.

PHP Code:
forward OnPlayerLoginPASS(playerid,password[]); 
public 
OnPlayerLoginPASS(playerid,password[]) 

    new 
rowsfields,tmp[32],change
    
cache_get_data(rowsfields); 
    if(
rows 1
    {
    
// kod
    
}
    if(
rows
    { 
Вот и все
Den_Bellik is offline   Reply With Quote
Old 14/07/2013, 01:26 PM   #7
Tumba
Little Clucker
 
Join Date: Dec 2012
Posts: 41
Reputation: 0
Default Re: MySql R8 Можно ли так делать?

Quote:
Originally Posted by Den_Bellik View Post
Выше есть ответ на твой вопрос, но я об остальном хочу тебе сказать:

1. Зачем сток? Можно просто задефайнить.
PHP Code:
#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 Code:
new query2[40+25]; 
3. Почему нету иньекции? Выше привел пример в дефайне, тебе только нужно указать ид подключение, и что нужно только изменять в mysql_format %s на %e и указывать ид подключенния ( переменная = mysql_connect.... )

4. Зачем узнавать пароль, а потом его проверять? Не проще?
PHP Code:
"SELECT * FROM `players` WHERE Name = '%e' AND Password = `%e`",PlayerInfo[%0][pName], %1); 
И тогда будет:
PHP Code:
if(rows)
{
//верно, выгружаем данные
}
else 
{
//не верный пароль 

5. rows - мы узнаем сколько получили данных под этим запросом, то есть если в твоем случаи мы получили 1 акк rows будет равно 1, можно так же сделать проверку - если аккаунтов больше 1-го xD - то что то делаем.
  • Но чтобы юзать, сколько мы получили данных если у нас rows = 1, то чтобы использувать нам нужно -1, т.е юзать 0.

PHP Code:
forward OnPlayerLoginPASS(playerid,password[]); 
public 
OnPlayerLoginPASS(playerid,password[]) 

    new 
rowsfields,tmp[32],change
    
cache_get_data(rowsfields); 
    if(
rows 1
    {
    
// kod
    
}
    if(
rows
    { 
Вот и все
1. Тебя на п-и так "оптимизировать" научили?Полнейший бред

3.Нет инъекции??Мб защиты от нее, плюс там она не нужна
Tumba is offline   Reply With Quote
Old 14/07/2013, 06:30 PM   #8
Den_Bellik
Big Clucker
 
Den_Bellik's Avatar
 
Join Date: Aug 2011
Location: Ukraine | City: Rovno
Posts: 79
Reputation: 1
Default Re: MySql R8 Можно ли так делать?

Quote:
Originally Posted by Tumba View Post
1. Тебя на п-и так "оптимизировать" научили?Полнейший бред

3.Нет инъекции??Мб защиты от нее, плюс там она не нужна
Полный бред то что ты написал. Так как здесь помогают, а если ты в теме только умеешь критиковать и даже не можешь указать мои ошибки - тогда я вообще не вижу смысла в твоем посте. Я думаю не важно где и как меня учили, так как научили так и делаю. И да, защита от иньекция в mysql r8 есть, нужно юзать или mysql_real_escape_string или mysql_format. Так же не вижу дальнейшей дискуссии, здесь.

Извините за оффтоп.
Den_Bellik is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Можно ли объединить 2 таблицы в одну? x_O Русский/Russian 7 24/11/2012 12:58 PM
Проблема с модом. Alexander_Petrov Русский/Russian 1 02/07/2012 10:21 AM
Скрины не сохраняются? Что делать? JageR<3 Русский/Russian 18 25/04/2012 08:25 PM
Можно туториал по public OnUnoccupiedVehicleUpdate safari Русский/Russian 3 13/03/2012 03:58 PM


All times are GMT. The time now is 05:38 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.