Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8

Тема: MYSQL

  1. #1
    Аватар для grc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.02.2017
    Сообщений
    12
    Репутация:
    0 ±

    MYSQL

    PHP код:
    CMD:offban(playeridparams[])
    {
        if(!
    pInfo[playerid][pAdmin]) return 1;
        if(
    sscanf(params"s[24]is[30]"params[0], params[1], params[2])) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Используйте: /offban [имя игрока] [кол-во дней] [причина]");
        if(
    params[1] < || params[1] > 30) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Количество дней может быть от 1 до 30");
        new 
    format_string[200];
        
    format(format_string200"SELECT * FROM `ban_list` WHERE `name` = '%s'"params[0]);
        return 
    mysql_tquery(connectionHandleformat_string"Offban""iiss"playeridparams[1], params[0], params[2]);

    PHP код:
    forward Offban(playeriddaysstr[], tmp[]);
    public 
    Offban(playeriddaysstr[], tmp[])
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(
    rows) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Данный аккаунт уже заблокирован");
        new 
    format_string[200];
        
    format(format_string140"Администратор %s оффлайн забанил игрока %s на %i дней. Причина: %s"pInfo[playerid][pName], strdaystmp);
        
    SendClientMessageToAll(COLOR_LIGHTREDformat_string);
        
    format(format_string200"INSERT INTO `ban_list` (`name`, `date`, `reason`, `unbandate`, `aname`) VALUES ('%s', NOW(), '%s', %i, '%s')"strtmpgettime() + 86400 dayspInfo[playerid][pName]);
        return 
    mysql_tquery(connectionHandleformat_string"""");

    В итоге смешивается str и tmp и в имени игрока получается что-то вроде *первая буква str пробел tmp*

    К примеру:
    // Введенные данные: params[0] = test, params[1] = 1, params[2] = Бан
    // Вывод в SendClientMessageToAll -> "Администратор name забанил игрока t Бан на 1 дней. Причина: Бан
    // Ну и соответственно в имя игрока в таблицу выводится t Бан

    С чем это связано? Как решить эту проблему?

  2. #2
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    С таймером похожий баг был. Лучше передавай текст PVar-ом или переменной

    //DeimoS: Да, проблема именно в таймере. Не умеет он нормально передавать несколько строк

    //Seviel: Вот так ошибаются люди, я не прав.
    Последний раз редактировалось Seviel; 23.02.2017 в 20:32.

  3. #3
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Не слушай бред выше. Вроде уже много раз обсуждалось, что использование params[0], params[1], ничем не оправдывает себя, только запутывает код, да и доступ к одному массиву проигрывает в скорости. Так по поводу одного массива - как ты хочешь в одном массиве записать две текстовые переменные?

    Код команды должен быть примерно таким:

    PHP код:
    CMD:offban(playeridparams[]) 

        if(!
    pInfo[playerid][pAdmin])
            return 
    1;
            
        
    extract params -> new string:user[24+1], daysstring:reason[144]; else 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Используйте: /offban [имя игрока] [кол-во дней] [причина]");
            
        if(
    days || days 30
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Количество дней может быть от 1 до 30");
            
        new 
    format_string[42+24+1]; 
        
    format(format_stringsizeof(format_string), "SELECT * FROM `ban_list` WHERE `name` = '%s'"user); 
        return 
    mysql_tquery(connectionHandleformat_string"Offban""iiss"playeriddaysuserreason); 


  4. #4
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Не слушай бред выше. Вроде уже много раз обсуждалось, что использование params[0], params[1], ничем не оправдывает себя, только запутывает код, да и доступ к одному массиву проигрывает в скорости. Так по поводу одного массива - как ты хочешь в одном массиве записать две текстовые переменные?

    Код команды должен быть примерно таким:

    PHP код:
    CMD:offban(playeridparams[]) 

        if(!
    pInfo[playerid][pAdmin])
            return 
    1;
            
        
    extract params -> new string:user[24+1], daysstring:reason[144]; else 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Используйте: /offban [имя игрока] [кол-во дней] [причина]");
            
        if(
    days || days 30
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Количество дней может быть от 1 до 30");
            
        new 
    format_string[42+24+1]; 
        
    format(format_stringsizeof(format_string), "SELECT * FROM `ban_list` WHERE `name` = '%s'"user); 
        return 
    mysql_tquery(connectionHandleformat_string"Offban""iiss"playeriddaysuserreason); 

    А exctract ни как не запутывает код?
    И что в твоем варианте изменилось что у него заработает код, кроме как ты обращение сделал к объявленным массивам, а не params[0], params[1]?
    Я бы тоже параметры лучше передавал PVar'ами

  5. #5
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  6. #6
    Аватар для grc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.02.2017
    Сообщений
    12
    Репутация:
    0 ±
    Я не знал в чем корень проблемы, как я мог найти данную тему?
    Разве форумы не созданы для того, чтобы люди могли указывать на корень проблемы и ее решение?

    Спасибо за указанную тему, премного благодарен.

  7. #7
    Аватар для grc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.02.2017
    Сообщений
    12
    Репутация:
    0 ±
    Мммде уж, прикол в том, что ничего не изменилось

  8. #8
    Аватар для grc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.02.2017
    Сообщений
    12
    Репутация:
    0 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Не слушай бред выше. Вроде уже много раз обсуждалось, что использование params[0], params[1], ничем не оправдывает себя, только запутывает код, да и доступ к одному массиву проигрывает в скорости. Так по поводу одного массива - как ты хочешь в одном массиве записать две текстовые переменные?

    Код команды должен быть примерно таким:

    PHP код:
    CMD:offban(playeridparams[]) 

        if(!
    pInfo[playerid][pAdmin])
            return 
    1;
            
        
    extract params -> new string:user[24+1], daysstring:reason[144]; else 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Используйте: /offban [имя игрока] [кол-во дней] [причина]");
            
        if(
    days || days 30
            return 
    SendClientMessage(playeridCOLOR_GREY, !"[Ошибка] Количество дней может быть от 1 до 30");
            
        new 
    format_string[42+24+1]; 
        
    format(format_stringsizeof(format_string), "SELECT * FROM `ban_list` WHERE `name` = '%s'"user); 
        return 
    mysql_tquery(connectionHandleformat_string"Offban""iiss"playeriddaysuserreason); 

    Использование отдельных переменных для каждого из params позволило решить данную проблему. Спасибо за подсказку.

    Тему можно закрывать.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •