Ayuda registro MYSQL
#1

Hola, me encuentro creando un registro mysql. Solo da un error, no en el pawn si no al crear la cuenta.

pawn Код:
public OnPlayerConnect(playerid)
{
    LimpiarVariables(playerid);
    if(ExisteCuenta(playerid))
    {
        Registrado[playerid] = 1;
    }
    else
    {
        Registrado[playerid] = 1;
        new loginstring[128];
        new loginname[64];
        GetPlayerName(playerid,loginname,sizeof(loginname));
        format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu cuenta no estб registrada.\nRegistra tu contraseсa para crear dicha cuenta.",loginname);
        ShowPlayerDialog(playerid,1002,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");

    }
}
Dialog de registro

pawn Код:
if(dialogid == 1002)//Registrar una cuenta
    {
        if(response == 0)
        {
            Kick(playerid);
            return 1;
        }
        else
        {
            if(strlen(inputtext))
            {
                new tmppass[64];
                strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
                OnPlayerRegister(playerid,tmppass);
                return 1;
            }
            else
            {
                new loginstring[128];
                new loginname[64];
                GetPlayerName(playerid,loginname,sizeof(loginname));
                //TogglePlayerSpectating(playerid, 1);
                format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu cuenta no estб registrada.\nRegistra tu contraseсa para crear dicha cuenta.",loginname);
                ShowPlayerDialog(playerid,1002,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");
                return 1;
            }
        }
    }

OnPlayerRegister

pawn Код:
forward OnPlayerRegister(playerid, password[]);
public OnPlayerRegister(playerid, password[]) // v1.0 by Luk0r
{
    if(IsPlayerConnected(playerid))
    {
        MySQLConnect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
        new playername3[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername3, sizeof(playername3));
        new newaccountsqlid = MySQLCreateAccount(playername3, password);
        if (newaccountsqlid != 0)
        {
            ExisteCuenta(playerid);
            PlayerInfo[playerid][pSQLID] = newaccountsqlid;
            //PlayerInfo[playerid][pKey] = password;
        //  strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
            new loginname[64];
            GetPlayerName(playerid,loginname,sizeof(loginname));
            format(string,sizeof(string),"\n  Bienvenido de vuelta %s!\n\n  Escribe la contraseсa de tu cuenta:\n",pName(playerid));
            ShowPlayerDialog(playerid, 1001, DIALOG_STYLE_INPUT, ">> Iniciar sesiуn!", string, "Log-in", "Cancelar");
            return 1;
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Se ha producido un error al crear su cuenta. Usted ahora serб desconectado.");//Este es el error de siempre
            Kick(playerid);
            print(" Error al crear la cuenta");
            return 0;
        }
    }
    return 0;
}
El gm es base OSRP.

їAlguien me ayuda?
Reply
#2

Lo normal seria que esta linea estй en OnGameModeInt
pawn Код:
MySQLConnect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
Reply
#3

Y lo esta tambien, el error creo que esta en el guardado de la contraseсa. їAlguien me ayuda?
Reply
#4

que hay en la funciуn MySQLCreateAccount?
Reply
#5

Lo intente con este otro codigo pero me pasa igual

pawn Код:
#include <a_samp>
#include <a_mysql>
#define DIALOG_LOGIN 1111
#define DIALOGO_REGISTRO 1112


new strtokex_string[1500];
#define COLOR_RED 0xAA3333AA



enum infoj
{
    pSQLID,

   
};
new InfoJugador[MAX_PLAYERS][infoj];

forward MensajeCarga(playerid);
forward GuardarCuenta(playerid);
forward ConectarJugador(playerid, contra[]);
forward InsertarJugador(pname[], password[]);
forward RegistrarJugador(playerid, contra[]);
forward ExisteUsuario(nombre_jugador[]);

#if defined FILTERSCRIPT
#else

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

#endif
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_LOGIN)
    {
        if(response == 0)
        {
            Kick(playerid);
            return 1;
        }
        else
        {
            if(strlen(inputtext))
            {
                new tmppass[64];
                strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
                ConectarJugador(playerid,tmppass);
                return 1;
            }
            else
            {
                new loginstring[128];
                new loginname[64];
                GetPlayerName(playerid,loginname,sizeof(loginname));
                TogglePlayerSpectating(playerid, 1);
                format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
                ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
                return 1;
            }
        }
    }
    if(dialogid == DIALOGO_REGISTRO)//Registrar una cuenta
    {
        if(response == 0)
        {
            Kick(playerid);
            return 1;
        }
        else
        {
            if(strlen(inputtext))
            {
                new tmppass[64];
                strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
                RegistrarJugador(playerid,tmppass);
                return 1;
            }
            else
            {
                new loginstring[128];
                new loginname[64];
                GetPlayerName(playerid,loginname,sizeof(loginname));
                TogglePlayerSpectating(playerid, 1);
                format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick NO esta Registrado.\nIngresa la contra parar crear la cuenta:",loginname);
                ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");
                return 1;
            }
        }
    }
    return 0;
}


public RegistrarJugador(playerid, contra[])
{
    if(IsPlayerConnected(playerid))
    {
        new playername3[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername3, sizeof(playername3));
        new newaccountsqlid = InsertarJugador(playername3, contra);
        if (newaccountsqlid != 0)
        {
            InfoJugador[playerid][pSQLID] = newaccountsqlid;
            printf("Registrando Jugador: [%s]",playername3);
            new loginstring[128];
            new loginname[64];
            GetPlayerName(playerid,loginname,sizeof(loginname));
            TogglePlayerSpectating(playerid, 1);
            format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
            ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Ha ocurrido un error, desconectando.");
            Kick(playerid);
            return 0;
        }
    }
    return 0;
}



public ConectarJugador(playerid, contra[])
{
    new pName[MAX_PLAYER_NAME], query[256];
    GetPlayerName(playerid,pName,sizeof(pName));
    mysql_real_escape_string(pName,pName);
    mysql_real_escape_string(contra,contra);
    format(query,sizeof(query),"SELECT * FROM `players` WHERE usuario = '%s' AND Password = '%s' LIMIT 1",pName,contra);
    mysql_query(query);
    mysql_store_result();

    if(mysql_num_rows() != 0)
    {
        new Data[1024];
        new Field[64];
        new rcnt = 1;
        format(query,sizeof(query),"SELECT * FROM `players` WHERE usuario = '%s'",pName);
        mysql_query(query);
        mysql_store_result();
        mysql_fetch_row(Data);
        mysql_strtok(Field, "|", Data);
        while (mysql_strtok(Field, "|", "")==1)
        {
          //  if (rcnt == 3) InfoJugador[playerid][Dinero_Jugador]  = strval(Field);
          //  if (rcnt == 4) InfoJugador[playerid][Skin_Jugador]    = strval(Field);
            rcnt++;
        }
    }
    else
    {
        new loginstring[128];
        new loginname[64];
        GetPlayerName(playerid,loginname,sizeof(loginname));
        TogglePlayerSpectating(playerid, 1);
        format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
        ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
    }
    SpawnPlayer(playerid);
    SetPlayerPos(playerid, 409.4352,-1543.2668,32.2734);
    SetPlayerFacingAngle(playerid, 270.0);
    SetPlayerInterior(playerid,0);
    return 1;
}


public InsertarJugador(pname[], password[])
{
    new escapedname[ MAX_PLAYER_NAME ], escapedpass[ MAX_PLAYER_NAME ], query[ 200 ];
    mysql_real_escape_string( pname, escapedname );
    mysql_real_escape_string( password, escapedpass );
    format(query, sizeof(query), "INSERT INTO players (`Nombre`, `Password`) VALUES ('%s', '%s')", pname, password);
    mysql_query(query);

    new newplayersid = ExisteUsuario(pname);
    if (newplayersid != 0)
    {
        return newplayersid;
    }
    return 0;
}


mysql_strtok(dest[], delimiterstr[], source[])
{
    new delimiter = delimiterstr[0];
    if(strlen(source) > sizeof(strtokex_string))
    {
      print("[ERROR] strtokex: source too long");
      return 0;
    }

    if(strlen(source) > 0)
    {
      format(strtokex_string, sizeof(strtokex_string), "%s", source);
    }

    if(strlen(strtokex_string) == 0)
    {
      return 0;
    }

    new length = strlen(strtokex_string);
    new index = 0;
    while ((index < length) && (strtokex_string[index] != delimiter))
    {
        dest[index] = strtokex_string[index];
        index++;
    }
    dest[index] = 0;

    strmid(strtokex_string, strtokex_string, index+1, length);

    return 1;
}



public ExisteUsuario(nombre_jugador[])
{
    new escapedname[ MAX_PLAYER_NAME ], query[ 200 ];
    mysql_real_escape_string( nombre_jugador, escapedname );
    format( query, sizeof( query ), "SELECT id FROM `players` WHERE LOWER(usuario) = ('%s') LIMIT 1", escapedname );
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() == 0)
    {
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);
        intid = strval(strid);
        return intid;
    }
}

public OnPlayerConnect(playerid)
{
    SetTimerEx("MensajeCarga",100,false, "d", playerid);
    return 1;
}


public MensajeCarga(playerid)
{
    SetSpawnInfo( playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 26, 36, 28, 150, 0, 0 );
    new nombre_jugador[MAX_PLAYER_NAME];//,lstring[128];
    GetPlayerName(playerid, nombre_jugador,sizeof(nombre_jugador));
    new sqlaccountstatus = ExisteUsuario(nombre_jugador);
    if(sqlaccountstatus != 0)
    {
        new loginstring[128];
        new loginname[64];
        GetPlayerName(playerid,loginname,sizeof(loginname));
        TogglePlayerSpectating(playerid, 1);
        format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
        ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
        InfoJugador[playerid][pSQLID] = sqlaccountstatus;

    }
    else
    {
        new loginstring[128];
        new loginname[64];
        GetPlayerName(playerid,loginname,sizeof(loginname));
        TogglePlayerSpectating(playerid, 1);
        format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick NO esta Registrado.\nIngresa la contra parar crear la cuenta:",loginname);
        ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");
    }
    return 1;
}
Reply
#6

primero tenйs que tener una conecciуn a mysql, cosa que no vi en el script que generalmente va en OnGameModeInit(), segundo debes de tener la tabla players ya creada en la db y otra cosa es que en algunos querys usбs "Nombre" y en otros "usuario" al campo donde se guarda en nombre del jugador, tenйs que usar solo el que existe en la db si no no va a funcionar.
Reply
#7

Me lo soluciono un amigo por msn, de todas formas muchas gracias Daniel-92!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)