Another problem[MySQL R34]
#1

Well, My unban command isn't working properly.

pawn Код:
CMD:unban(playerid, params[])
{
    new target[24],query[200];
    if(!IsPlayerAdmin(playerid) || Player[playerid][Admin] >= 3) return SendClientMessage(playerid, -1, "SERVER:You're not admin!");
    if(sscanf(params,"s[24]",target)) return SendClientMessage(playerid, -1, "SERVER:/unban [Name]");
    mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `username` = '%s' LIMIT 1", target);
    mysql_tquery(SQL, query, "OnUnbanCheck","d",playerid);
    return 1;
}


forward OnUnbanCheck(playerid);
public OnUnbanCheck(playerid)
{
    if(cache_num_rows() > 0)
    {
        cache_get_field_content(0, "bannedby", Player[playerid][BannedBy], SQL, 24);
        cache_get_field_content(0, "reason", Player[playerid][BanReason], SQL, 20);
        Player[playerid][Banned] = cache_get_field_content_int(0, "banned");
        UpdateBans(playerid);
    }
    return 1;
}

stock UpdateBans(playerid, params[])
{
    new target[MAX_PLAYER_NAME], str[128], query[200];
    if(Player[playerid][Banned] == 1)
    {
        mysql_format(SQL,query, sizeof(query),"UPDATE `players` SET `banned` = '0' WHERE `username` = '%s' LIMIT 1", target);
        mysql_tquery(SQL, query, "", "");
        print(query);
        SendClientMessage(playerid, -1, "SERVER:Done!");
    }
    else
    {
        format(str, 128,"[MySQL]:This player is not registered.");
        SendClientMessage(playerid, -1, str);
    }
    return 1;
}

It runs the query, But the username is empty. So, how do I get it to unban what I type.

Код:
UPDATE `players` SET `banned` = '0' WHERE `username` = '' LIMIT 1
That's what I mean about the username being empty.
Reply
#2

The name is empty because you don't get it with GetPlayerName
pawn Код:
stock UpdateBans(playerid, params[])
{
    new target[MAX_PLAYER_NAME], str[128], query[200];
    GetPlayerName(playerid,target,sizeof(target));
    if(Player[playerid][Banned] == 1)
    {
        mysql_format(SQL,query, sizeof(query),"UPDATE `players` SET `banned` = '0' WHERE `username` = '%s' LIMIT 1", target);
        mysql_tquery(SQL, query, "", "");
        print(query);
        SendClientMessage(playerid, -1, "SERVER:Done!");
    }
    else
    {
        format(str, 128,"[MySQL]:This player is not registered.");
        SendClientMessage(playerid, -1, str);
    }
    return 1;
}
Reply
#3

That doesn't work. That would make the target the same as my name. I don't want to unban myself. Thanks for your input though. It's appreciated.
Reply
#4

Escape string in unban cmd
pawn Код:
@OnUnbanCheck(playerid, name[]);
@OnUnbanCheck(playerid, name[])
{
    if(cache_num_rows() > 0)
    {
        if(cache_get_field_content_int(0, "banned"))
        {
            new query[128];
            mysql_format(SQL,query,sizeof(query),"UPDATE `players` SET `banned` = 0 WHERE `username` = '%s' LIMIT 1", name);
            mysql_tquery(SQL,query,"","");
            print(query);
            SendClientMessage(playerid, -1, "SERVER:Done!");
        }//else not banned
    }
    else
        SendClientMessage(playerid, -1, "[MySQL]:This player is not registered.");

    return;
}

CMD:unban(playerid, params[])
{
    if(!IsPlayerAdmin(playerid) || Player[playerid][Admin] >= 3) SendClientMessage(playerid, -1, "SERVER:You're not admin!");
    else if(isnull(params)) SendClientMessage(playerid, -1, "SERVER:/unban [Name]");
    else if(!(2 < strlen(params) < 21)) SendClientMessage(playerid, -1, "ERROR: Name must be between 3-20 characters");
    else{
        new query[128];
        mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", params);
        mysql_tquery(SQL, query, "@OnUnbanCheck", "is", playerid, params);
    }
    return 1;
}
Reply
#5

Cheers mate. It works. I appreciate the help. I'll rep+ you if I can.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)