bug sql cuentas
#1
Bombilla 
Al momento de crear la cuenta va bien, Pero a la hora de intentar entrar de nuevo con la misma cuenta ya no sirve y me tira el siguiente error:


L 05/19/2018 - 23:26:15: [SQLITE] Invalid column: 3
L 05/19/2018 - 23:26:15: [AMXX] Displaying debug trace (plugin "mod.amxx")
L 05/19/2018 - 23:26:15: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 05/19/2018 - 23:26:15: [AMXX] [0] mod.sma:Gran sonrisaataHandler (line 1

Código PHP:
public ChequearCuenta(id){
        
    new 
Query[400],Data[2]
    
Data[0] = id;Data[1] = ChequearC
    
    formatex
(Query,charsmax(Query),"SELECT id FROM `%s` WHERE Nombre = ^"%s^"",TABLAg_playername[id])
    
SQL_ThreadQuery(Tuple,"DataHandler",Query,Data,2)
    
    return 
PLUGIN_HANDLED
}

/*===============================================================================?=====
                Hokeos
================================================================================?====*/
public message_VGUIMenuiMsgidiDestid ) {
    if( 
Estado[id] == ||  get_msg_arg_int) != 
        return 
PLUGIN_CONTINUE;
    
    
ChequearCuenta(id)
    return 
PLUGIN_HANDLED;
}

public 
message_ShowMenuiMsgidiDestid ) {
    if( 
Estado[id] == )
        return 
PLUGIN_CONTINUE;
    
    static 
sMenuCode33 ];
    
get_msg_arg_string4sMenuCodecharsmaxsMenuCode ) );
    
    if(
containi(sMenuCode"Team_Select" ) != -) {
        
ChequearCuenta(id)
        return 
PLUGIN_HANDLED;
    }
    if(
Estado[id] == ) {
        new 
tmp[32]
        
get_msg_arg_string(4tmp31)
        if(
contain(tmp"#Team_Select")==0){
            if(!
g_autojoin_team[id])
            return 
PLUGIN_CONTINUE
            g_autojoin_team
[id] = false
            g_autojoin_class
[id] = true
            client_cmd
(id"jointeam 5")
            return 
PLUGIN_HANDLED
        
}
        if(
contain(tmp"#CT_Select")==|| contain(tmp"#Terrorist_Select")==0){
            if(!
g_autojoin_class[id])
                return 
PLUGIN_CONTINUE
            
if(!task_exists(TID_HIDE_MENU+id))
            
set_task(0.1"hide_menu"TID_HIDE_MENU+id)
            
g_autojoin_class[id] = false
            client_cmd
(id"joinclass 5")
            
set_user_info(id"_vgui_menus"g_vgui_menus[id])
            return 
PLUGIN_HANDLED
        
}
        
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
hide_menu(tid){
    new 
id tid-TID_HIDE_MENU
    show_menu
(id0"^n"1)
    if(!
is_user_alive(id))
        
ExecuteHam(Ham_CS_RoundRespawnid)
}

public 
clcmd_changeteamid ) {
    if(
Estado[id] == ) {
        
RegistroMenuid );
        
        return 
PLUGIN_HANDLED;
    }
    else if(
Estado[id] == 1){
        
fw_Team_Select(id)
        
        return 
PLUGIN_HANDLED
    
}
    else if(
Estado[id] == 2){
        
        
Menu_Principal_Juego(id)
        return 
PLUGIN_HANDLED
    
}
    
    return 
PLUGIN_CONTINUE;
}

public 
fw_Team_Select(id)
{
    new 
menu menu_create("\yTeam Select""Handler_menu");

    
menu_additem(menu"Ingresar"""0); // case 0
    
menu_additem(menu"Configuracion"""0); // case 1

    
menu_setprop(menuMPROP_EXITMEXIT_ALL);

    
menu_display(idmenu0);

    return 
PLUGIN_HANDLED;
}

public 
Handler_menu(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_cancel(id);
        return 
PLUGIN_HANDLED;
    }

    new 
command[6], name[64], accesscallback;

    
menu_item_getinfo(menuitemaccesscommandsizeof command 1namesizeof name 1callback);
    
    
user_kill(id)
    
    switch(
item)
    {
        case 
:{
            
Estado[id] = 2
            engclient_cmd
(id,"jointeam","5")
            
engclient_cmd(id,"joinclass","5")
        }
        case 
:{
        }
    }
    

    
menu_destroy(menu);

    return 
PLUGIN_HANDLED;

/*===============================================================================?=====
                Menu Registro
================================================================================?====*/
public RegistroMenu(id){
        
    new 
iMenu menu_create("Menu de \yRegistro \d& \yLogueo","HandlerRegistro")
    
    
menu_additem(iMenu,"Crear cuenta.",_,_,menu_makecallback("RegistroCallBack"))
    
menu_additem(iMenu,"Loguear cuenta.",_,_,menu_makecallback("RegistroCallBack"))
    
    
menu_setprop(iMenu,MPROP_EXITMEXIT_NEVER )
    
    
menu_display(id,iMenu )
    
    return 
PLUGIN_HANDLED
}
public 
RegistroCallBack(id,menu,item){
    
    switch(
item){
        case 
0:if(RCallBack[id])return ITEM_DISABLED
        
case 1:if(!RCallBack[id])return ITEM_DISABLED
    
}
    return 
ITEM_ENABLED
}
public 
HandlerRegistro(id,menu,item){
    
    switch(
item){
        case 
MENU_EXIT:{
            
menu_destroy(menu)
            return 
PLUGIN_HANDLED
        
}
        case 
0:client_cmd(id,"messagemode CREAR_PASSWORD")
        case 
1:client_cmd(id,"messagemode LOGUEAR_PASSWORD")
    }
    return 
PLUGIN_HANDLED
}
/*===============================================================================?=====
                
================================================================================?====*/
public CrearPassword(id){
    
read_args(Password[id],charsmax(Password[]))
    
remove_quotes(Password[id]);trim(Password[id])
    
    new 
PassBuffer[34]
    
md5(Password[id],PassBuffer)
    
    new 
Query[400],Data[2]
    
Data[0] = id;Data[1] = RegistrarC
    
    formatex
(Query,charsmax(Query),"INSERT INTO `%s` (Nombre,Password) VALUES (^"%s^",^"%s^")"TABLA,g_playername[id],PassBuffer)
    
SQL_ThreadQuery(Tuple,"DataHandler",Query,Data,2)
    
    return 
PLUGIN_HANDLED
}
public 
LoguearPassword(id){
    
read_args(Password[id],charsmax(Password[]))
    
remove_quotes(Password[id]);trim(Password[id])
    new 
PassBuffer[34]
    
md5(Password[id],PassBuffer)
    
    new 
Query[400],Data[2]
    
Data[0] = id;Data[1] = LoguearC
    
    
/*
        Aca es donde cargas los datos,
        Si vas a cargar mas de 12 o 13 aumentale el numero
        de celdas a "Query"
    */
    
    
formatex(Query,charsmax(Query),"SELECT id,Nivel,Exp FROM `%s` WHERE Nombre = ^"%s^" AND Password = ^"%s^"",TABLAg_playername[id], PassBuffer)
    
SQL_ThreadQuery(Tuple,"DataHandler",Query,Data,2)
    
    return 
PLUGIN_HANDLED
}    

/*===============================================================================?=====
                
================================================================================?====*/
public DataHandlerfailstateHandle:Queryerror[ ], error2data[ ], datasizeFloat:time ) {
    static 
id;
    
id data[0];
    
    if(!
is_user_connected(id))
        return;

    switch(
failstate) {
        case 
TQUERY_CONNECT_FAILED: {
            
log_to_file("SQL_LOG_TQ.txt""Error en la conexion al MySQL [%i]: %s",error2,error);
            return;
        }
        case 
TQUERY_QUERY_FAILED:
        
log_to_file("SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s",error2,error);
    }
    
    switch(
data[1]){
        case 
ChequearC:{
            if(
SQL_NumResults(Query))RCallBack[id] = 1
            
else RCallBack[id] = 0
            
            RegistroMenu
(id)
        }
        case 
RegistrarC:{
            if(
failstate TQUERY_SUCCESS) {
                
chatcolor(id,"%s Error al crear la cuenta,porfavor intente nuevamente."Prefix)
                
client_cmd(id"spk buttons/button10.wav")
                
RegistroMenu(id)
            }
            else{
                
chatcolor(id,"%s Tu cuenta a sido creada correctamente."Prefix)
                
                new 
iQuery[300],iData[2]
                
iData[0] = id;iData[1] = CargarD
                
                
/* 
                Aca cargas los datos cuando se registra,
                es diferente a que cuando se loguear
            */
                
                
formatex(iQuery,charsmax(iQuery),"SELECT id,Nivel = %d,Exp = %d FROM `%s` WHERE Nombre = ^"%s^"",g_level[id], g_exp[id], TABLAg_playername[id])
                
SQL_ThreadQuery(Tuple,"DataHandler",iQuery,iData,2)
            }
        }
        case 
LoguearC:{
            if(
SQL_NumResults(Query)){
                
g_idid ] = SQL_ReadResultQuery);
                
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) ); 
                
                
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery);
                
                
func_login_success(id);
            }
            else {
                
chatcolor(id"%s La contraseña es incorrecta."Prefix)
                
client_cmd(id"spk buttons/button10.wav")
                
RegistroMenu(id)
            }
        }
        case 
CargarD:{
            if(
SQL_NumResults(Query)){
                
g_idid ] = SQL_ReadResultQuery);
                
                
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery);
                
                
func_login_success(id);
            }
            else{
                
chatcolor(id"Error al cargar los datos, intente nuevamente."Prefix)
                
RegistroMenu(id)
            }
        }
        case 
GuardarD: {
            if(
failstate TQUERY_SUCCESS)
            
console_print(id,"Error en el guardado de datos.")
            
            else
            
console_print(id,"Datos guardados.")
        }
    }
}

/*===============================================================================?=====
                
================================================================================?====*/
public func_login_success(id){
    new 
name[32];
    
get_user_name(idnamecharsmax(name))
    
    
Estado[id] = 1
    set_user_info
(id,"name",name)
}

public 
client_infochangedid ) {
    if( 
Estadoid ] == )
        return 
PLUGIN_CONTINUE;
    
    static 
name33 ];
    
get_user_infoid"name"namecharsmaxname ) );
    
    if( !
equalg_playernameid ], name ) ) {
        
set_user_infoid"name"g_playernameid ] );
        
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}


public 
GuardarDatos(id){
    new 
Query[1000],Data[2]
    
Data[0] = id;Data[1] = GuardarD
    
    formatex
(Query,charsmax(Query),"UPDATE `%s` SET Nivel = %d, Exp = %d, id='%d' WHERE Nombre = ^"%s^"",TABLA,g_level[id],g_exp[id],g_id[id],g_playername[id])
    
SQL_ThreadQuery(Tuple,"DataHandler",Query,Data,2)
    
    return 
PLUGIN_HANDLED
}        
/*===============================================================================?=====
                
================================================================================?====*/
public SQLx_Init()
{
    new 
get_type[12];
    
    
SQL_SetAffinity("sqlite");
    
    
SQL_GetAffinity(get_typesizeof get_type);
    
    if(!
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""Error de conexion" );
        return 
pause"a" );
    }
    static 
iLeniLen 0;
    
    
iLen += formatex(query[iLen], charsmax(query) - iLen"CREATE TABLE IF NOT EXISTS `%s` (`Nombre` VARCHAR NOT NULL UNIQUE, `Password` VARCHAR, `Nivel` INTEGER DEFAULT '0', `Exp` INTEGER DEFAULT '0', ",TABLA)
    
    
iLen += formatex(query[iLen], charsmax(query) - iLen"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)")
    
    
Tuple SQL_MakeDbTuple"""""""DataBase" );
    
    
SQL_ThreadQuery(Tuple"QueryCreateTable"query)
    
    return 
PLUGIN_CONTINUE
}

public 
QueryCreateTable(failstateHandle:queryerror[], errcodedata[], datasizeFloat:queuetime)
{
    
/*new Handle:g_Sql = Empty_Handle
    new errno;
    //g_Sql = SQL_Connect(g_sqltuple, errno, error, 127);
    
    if (g_Sql == Empty_Handle)
    {
        server_print("[SQL CONNECCION] SQL Error #%d - %s", errno, error);
        set_fail_state("")
        return;
    }*/
    
if(failstate == TQUERY_CONNECT_FAILED)
    {
        
set_fail_state("[SQL CONNECCION] No se pudo conectar a la database!")
    }
    else if(
failstate == TQUERY_QUERY_FAILED)
    {
        
set_fail_state("[SQL CONNECCION] Query Fallo!")
    }
    else if(
errcode)
    {
        
server_print("%s Error en la query: %s"Prefixerror)
    }
    else
    {
        
server_print("Se cargaron las cuentas correctamente ")

        for(new 
<= g_maxplayers i++)
        {
            if(!
is_user_connecting(i) && !is_user_connected(i))
                continue

            
ChequearCuenta(i)
        }
        
    }    
}
public 
plugin_end( )
    
SQL_FreeHandle(Tuple
Responder
#2
Donde creas la tabla, la columna id pasala antes de la columna nombre, así:
Código PHP:
iLen += formatex(query[iLen], charsmax(query) - iLen"CREATE TABLE IF NOT EXISTS `%s` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `Nombre` VARCHAR NOT NULL UNIQUE, `Password` VARCHAR, `Nivel` INTEGER DEFAULT '0', `Exp` INTEGER DEFAULT '0' )",TABLA

Después en CargarD:
Código PHP:
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery);
------------->
                
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery); 

En LoguearC:
Código PHP:
g_idid ] = SQL_ReadResultQuery);
                
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) ); 
                
                
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery);
------------->
                
g_idid ] = SQL_ReadResultQuery);
                
SQL_ReadResultQuery1g_playernameid ], charsmaxg_playername[ ] ) ); 
                
                
g_levelid ] = SQL_ReadResultQuery);
                
g_expid ] = SQL_ReadResultQuery); 

No se si me olvido algo más, pero fijate en este sistema de última: https://amxmodx-es.com/Thread-Sistema-de...SQL-SQLITE

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)