MySql R8 Можно ли так делать?
#6

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_CHquery2true"OnPlayerLoginPASS""ds"playerid,password);
    return 
true;

PHP код:
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 код:
#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 
rowsfields,tmp[32],change
    
cache_get_data(rowsfields); 
    if(
rows 1
    {
    
// kod
    
}
    if(
rows
    { 
Вот и все
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)