MySQL Setname
#1

Problem: When I use the setname, samp-server.exe stops working, and it doesn't work.

What I'm trying to do: Set the players name in-game, change the current name of player in the user database to the new name.


pawn Код:
CMD:setname(playerid, params[])
{
    if(GetPlayerLevel(playerid) >= 3)
    {
        new target, newname[128];
        if(sscanf(params, "us[128]", target, newname)) return SendClientMessage(playerid, -1, ""DARKRED"USAGE: /setname [playername] [newname]");
        if(strlen(newname) < 4)
        {
            SendClientMessage(playerid,-1,""DARKRED"Please enter a username GREATER than 3 characters.");
            return 1;
        }
        SetPlayerName(target, newname);
        new query[200];
        format(query, sizeof(query), "UPDATE `users` SET `Name` = '%s' WHERE `Name` = '%s'", newname, target);
        mysql_function_query(cHandle, query, false, "", "s", target);
        SendClientMessageEx(playerid, -1, ""GREEN"You have edited %s's name. New Password: %s", target, newname);
    }
    else return NotAllowed(playerid);
    return 1;
}
}
I think the problem is with
pawn Код:
mysql_function_query(cHandle, query, false, "", "s", target);
Reply
#2

Try this:
pawn Код:
CMD:setname(playerid, params[])
{
    if(GetPlayerLevel(playerid) >= 3)
    {
        new targetid, newname[128];
        if(sscanf(params, "us[128]", targetid, newname)) return SendClientMessage(playerid, -1, ""DARKRED"USAGE: /setname [playername] [newname]");
        if(strlen(newname) < 4)
        {
            SendClientMessage(playerid,-1,""DARKRED"Please enter a username GREATER than 3 characters.");
            return 1;
        }
        SetPlayerName(targetid, newname);
        new query[200];
        format(query, sizeof(query), "UPDATE `users` SET `Name` = '%s' WHERE `Name` = '%s'", newname, targetid);
        mysql_function_query(cHandle, query, false, "", "d", targetid);
        SendClientMessageEx(playerid, -1, ""GREEN"You have edited %s's name. New Password: %s", targetid, newname);
    }
    else return NotAllowed(playerid);
    return 1;
}
Reply
#3

Worked, thanks lol.

Stupid of me for not changing that. Rep'd.

Edit; The name is not changed in the database.
Reply
#4

Try setting the name after the query execution?
Reply
#5

Quote:
Originally Posted by Affan
Посмотреть сообщение
Worked, thanks lol.

Stupid of me for not changing that. Rep'd.

Edit; The name is not changed in the database.
You don't need anything in the mysql_function_query since its just an UPDATE clause and does not require any callback so you leave other parameters empty, would be better also if you use the latest version which is r39 so you can use mysql_tquery.

pawn Код:
mysql_function_query(cHandle, query, false, "", "");
Reply
#6

pawn Код:
format(query, sizeof(query), "UPDATE `users` SET `Name` = '%s' WHERE `Name` = '%s'", newname, target);
target is integer and not the old name and use mysql_format because you can be victim of SQL Injection.

pawn Код:
CMD:setname(playerid, params[])
{
    if(GetPlayerLevel(playerid) < 3)  return NotAllowed(playerid);
    new target, newname[MAX_PLAYER_NAME];
    if(sscanf(params, "us[24]", target, newname)) return SendClientMessage(playerid, -1, ""DARKRED"USAGE: /setname [playername] [newname]");
    if(!IsPlayerConnected(target)) return SendClientMessage(playerid, -1, "Not connected");
    if (!(3 <= strlen(newname) <= 20)) return SendClientMessage(playerid,-1,""DARKRED"Please enter a username with 3-20 characters");
    new oldname[MAX_PLAYER_NAME];
    GetPlayerName(target, oldname, MAX_PLAYER_NAME);
    if (SetPlayerName(target, newname) != 1) return SendClientMessage(playerid,-1,"it's in use, too long or has invalid characters");
    new query[100];
    // Use mysql_format instead of format. I don't edit the line because the parameters differ from R7 and latest versions. Use '%e' instead of '%s' too.
    format(query, sizeof(query), "UPDATE `users` SET `Name` = '%s' WHERE `Name` = '%s'", newname, oldname);
    mysql_function_query(cHandle, query, false, "", "");
    SendClientMessageEx(playerid, -1, ""GREEN"You have edited %s's name. New Name: %s", oldname, newname);
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)