Cargar un dato de una base de datos mysql
#7
(02/10/2016, 04:32 PM)Darkay escribió: mira tira este error en consola

Código PHP:
L 10/02/2016 15:31:12: [MySQLInvalid column3
L 10
/02/2016 15:31:12: [AMXXDisplaying debug trace (plugin "surf_lvl.amxx")
L 10/02/2016 15:31:12: [AMXXRun time error 10native error (native "SQL_ReadResult")
L 10/02/2016 15:31:12: [AMXX]    [0surf_lvl.sma::DataHandler (line 287

el code
Código PHP:
#include < amxmodx >
#include < sqlx >

#define PLUGIN "Sistema de cuentas MySQL/SQLite"
#define VERSION "1.1.2"
#define AUTHOR "r0ma"

#define MYSQL

#if defined MYSQL

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DATEBASE "servercs"

#else

#define SQLITE_DATEBASE "cuentas"

#endif

new const szTable[ ] = "cuentas";
new const 
szPrefix[ ] = "[Cuentas]";

new 
Handle:g_hTuple;
new 
g_maxplayers;

new 
g_estado;
new 
g_id33 ];
new 
g_Nivel[33];
new 
g_usuario33 ][ 34 ];
new 
g_password33 ][ 34 ];
new 
g_playername33 ][ 33 ];

enum
{
    
REGISTRAR_CUENTA,
    
LOGUEAR_CUENTA,
    
CARGAR_DATOS,
    
GUARDAR_DATOS
};

/* consulta MYSQL:
CREATE TABLE cuentas 
(
    id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Usuario varchar(34) NOT NULL UNIQUE KEY, 
    Password varchar(34) NOT NULL, 
    Pj varchar(32) NOT NULL UNIQUE KEY,
)
*/

/* consulta SQLite:
CREATE TABLE "cuentas" 
(
    "id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL, 
    "Usuario" VARCHAR NOT NULL  UNIQUE, 
    "Password" VARCHAR NOT NULL, 
    "Pj" VARCHAR NOT NULL  UNIQUE,
    "Experiencia" INTEGER DEFAULT 0
)
*/


public plugin_init( )  {
    
register_pluginPLUGINVERSIONAUTHOR );

    
register_clcmd"say /nivel""cmdnivel");
    
register_clcmd"say /howard""cmdhoward");
    
register_clcmd"CREAR_USUARIO""reg_usuario" );
    
register_clcmd"CREAR_PASSWORD""reg_password" );
    
register_clcmd"LOGUEAR_USUARIO""log_usuario" );
    
register_clcmd"LOGUEAR_PASSWORD""log_password" );
    
    
register_clcmd"chooseteam""clcmd_changeteam" );
    
register_clcmd"jointeam""clcmd_changeteam" );
    
    
register_messageget_user_msgid"ShowMenu" ), "message_ShowMenu" );
    
register_messageget_user_msgid"VGUIMenu" ), "message_VGUIMenu" );
    
    
register_event"HLTV""event_round_start""a""1=0""2=0" );
    
    
g_maxplayers get_maxplayers( );
    
    
MySQLx_Init( );
}


public 
cmdhoward(id)
{
    
client_print(id,print_chat,"Eres nivel %d"g_Nivelid ]);
}

public 
cmdnivel(id)
{
    
g_Nivel[id] = 100
    client_print
(id,print_chat,"Has recibido 100 niveles");
}

public 
message_VGUIMenuiMsgidiDestid ) {
    if( 
g_estado & (1<<id) ||  get_msg_arg_int) != 
        return 
PLUGIN_CONTINUE;
    
    
show_login_menuid );
    return 
PLUGIN_HANDLED;
}

public 
message_ShowMenuiMsgidiDestid ) {
    if( 
g_estado & (1<<id) )
        return 
PLUGIN_CONTINUE;
    
    static 
sMenuCode33 ];
    
get_msg_arg_string4sMenuCodecharsmaxsMenuCode ) );
    
    if( 
containisMenuCode"Team_Select" ) != -) {
        
show_login_menuid );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
clcmd_changeteamid ) {
    if( ~
g_estado & (1<<id) ) {
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
show_login_menuid ) {
    new 
menu menu_create"\r[TNW] \wBienvenido a nuestro servidor!""login_menu" );
    
    
menu_additemmenu"\wCrear Cuenta" );
    
menu_additemmenu"\wIngresar" );
    
    
menu_setpropmenuMPROP_EXITMEXIT_NEVER );
    
    
menu_displayidmenu );
    
    return 
PLUGIN_HANDLED;
}

public 
login_menuidmenuitem ) {
    
    switch( 
item ) {
        case 
0client_cmdid"messagemode CREAR_USUARIO" );
        case 
1client_cmdid"messagemode LOGUEAR_USUARIO" );
    }
    
    return 
PLUGIN_HANDLED;
}

public 
reg_usuarioid ) {
    
read_argsg_usuarioid ], charsmaxg_usuario[ ] ) );
    
remove_quotesg_usuarioid ] );
    
trimg_usuarioid ] );
    
    
md5g_usuarioid ], g_usuarioid ] );
    
    
client_cmdid"messagemode CREAR_PASSWORD" );
    
    return 
PLUGIN_HANDLED;
}

public 
reg_passwordid ) {
    
read_argsg_passwordid ], charsmaxg_password[ ] ) );
    
remove_quotesg_passwordid ] );
    
trimg_passwordid ] );
    
md5g_passwordid ], g_passwordid ] );
    
    new 
szQuery256 ], iData];
    
    
iData] = id;
    
iData] = REGISTRAR_CUENTA;
    
    
get_user_nameidg_playernameid ], charsmaxg_playername[ ] ) );
    
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^")"szTableg_usuarioid ], g_passwordid ], g_playernameid ] );
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
    
    return 
PLUGIN_HANDLED;
}

public 
log_usuarioid ) {
    
read_argsg_usuarioid ], charsmaxg_usuario[ ] ) );
    
remove_quotesg_usuarioid ] );
    
trimg_usuarioid ] );
    
md5g_usuarioid ], g_usuarioid ] );
    
    
client_cmdid"messagemode LOGUEAR_PASSWORD" );
    
    return 
PLUGIN_HANDLED;
}

public 
log_passwordid ) {
    
read_argsg_passwordid ], charsmaxg_password[ ] ) );
    
remove_quotesg_passwordid ] );
    
trimg_passwordid ] );
    
md5g_passwordid ], g_passwordid ] );
    
    new 
szQuery256 ], iData];
    
    
iData] = id;
    
iData] = LOGUEAR_CUENTA;
    
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^" AND Password=^"%s^""szTableg_usuarioid ], g_passwordid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    
    
formatexszQuerycharsmaxszQuery ), "SELECT Nivel FROM %s WHERE Usuario=^"%s^""szTableg_usuarioid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    
    
    return 
PLUGIN_HANDLED;
}

public 
guardar_datosid ) {
    new 
szQuery128 ], iData];
    
    
iData] = id;
    
iData] = GUARDAR_DATOS;
    
    
formatexszQuerycharsmaxszQuery ), "UPDATE %s SET Nivel='%d' WHERE id='%d'"szTableg_Nivelid ], g_id[id] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    
   
}



public 
DataHandlerfailstateHandle:Queryerror[ ], error2data[ ], datasizeFloat:time ) {
    static 
id;
    
id data];
    
    if( !
is_user_connectedid ) )
        return;

    switch( 
failstate ) {
        case 
TQUERY_CONNECT_FAILED: {
            
log_to_file"SQL_LOG_TQ.txt""Error en la conexion al MySQL [%i]: %s"error2error );
            return;
        }
        case 
TQUERY_QUERY_FAILED:
            
log_to_file"SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s"error2error );
    }
    
    switch( 
data] ) {
        case 
REGISTRAR_CUENTA: {
            if( 
failstate TQUERY_SUCCESS ) {
                if( 
containierror"Usuario" ) != -)
                    
client_printidprint_chat"%s El usuario ya existe."szPrefix );

                else if( 
containierror"Pj" ) != -)
                    
client_printidprint_chat"%s El nombre de personaje esta en uso."szPrefix );
                else
                    
client_printidprint_chat"%s Error al crear la cuenta. Intente nuevamente."szPrefix );
                
                
client_cmdid"spk buttons/button10.wav" );
                
                
show_login_menuid );
            }
            else 
       {
        
client_printidprint_chat"%s Tu cuenta ha sido creada correctamente."szPrefix );
                
        new 
szQuery128 ], iData];
                
                  
iData] = id;
                  
iData] = CARGAR_DATOS;
                
                  
formatexszQuerycharsmaxszQuery ), "SELECT id FROM %s WHERE Usuario=^"%s^""szTableg_usuarioid ] );
                  
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);    
            
             
        
            }
            
        }
        case 
LOGUEAR_CUENTA: {
            if( 
SQL_NumResultsQuery ) ) {
                
g_idid ] = SQL_ReadResultQuery);
           
                
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );                    
                
                
// Cargamos datos
        
                
func_login_successid );
            }
            else {
                
client_printidprint_chat"%s Usuario o Pasword incorrecta."szPrefix );
                
client_cmdid"spk buttons/button10.wav" );
                
                
show_login_menuid );
            }
        }
        case 
CARGAR_DATOS: {
        if( 
SQL_NumResultsQuery ) ) {
            
g_idid ] = SQL_ReadResultQuery);
            
                
                
// Ponemos la exp en 0 para el nuevo usuario.
            
func_login_successid );
        }
        else {
            
client_printidprint_chat"%s Error al cargar los datos, intente nuevamente."szPrefix );
            
show_login_menuid );
        }
    }
        case 
GUARDAR_DATOS: {
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"%s Error en el guardado de datos."szPrefix );
            
            else
                
console_printid"%s Datos guardados."szPrefix );
        }
    }
}

public 
func_login_successid ) {
    
engclient_cmdid"jointeam""5" );
    
engclient_cmdid"joinclass""5" );
    
    
g_estado |= (1<<id);
    
    
set_user_infoid"name"g_playernameid ] );
}

public 
event_round_start( ) {
    for( new 
1<= g_maxplayersi++ ) {
        if( 
g_estado & (1<<i) && is_user_connected) )
            
guardar_datos);
    }
}        

public 
client_infochangedid ) {
    if( ~
g_estado & (1<<id) )
        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 
client_disconnect(  id ) {
    
    if( 
g_estado & (1<<id) ) {
        
guardar_datosid );
        
        
g_estado &= ~(1<<id);
    }
    
    
g_usuarioid ][ ] = '^0';
    
g_passwordid ][ ] = '^0';
 
}

#if defined MYSQL
public MySQLx_Init( )
{
    
g_hTuple SQL_MakeDbTupleMYSQL_HOSTMYSQL_USERMYSQL_PASSMYSQL_DATEBASE );
    
    if( !
g_hTuple 
    {
        
log_to_file"SQL_ERROR.txt""No se pudo conectar con la base de datos." );
        return 
pause"a" );
    }
    
    return 
PLUGIN_CONTINUE;
}
#else

// Gracias ILUSION por fixear la conexión
public MySQLx_Init( )
{
    new 
get_type12 ];
    
    
SQL_SetAffinity"sqlite" );
    
    
SQL_GetAffinityget_typesizeof get_type );

    if( !
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""Error de conexion" );
        return 
pause"a" );
    }
    
    
g_hTuple SQL_MakeDbTuple""""""SQLITE_DATEBASE );
    
    return 
PLUGIN_CONTINUE
}
#endif

public plugin_end( )
    
SQL_FreeHandleg_hTuple ); 

Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando, pero nisiquiera te estas dando cuenta de que haces.

Primero tabula un poco, me revente un ojo intentando verlo bien

Segundo, es redundante lo que haces con las consultas

Código PHP:
public log_passwordid 
{
    
read_argsg_passwordid ], charsmaxg_password[ ] ) );
    
remove_quotesg_passwordid ] );
    
trimg_passwordid ] );
    
md5g_passwordid ], g_passwordid ] );

    new 
szQuery256 ], iData];

    
iData] = id;
    
iData] = LOGUEAR_CUENTA;

    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^" AND Password=^"%s^""szTableg_usuarioid ], g_passwordid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);

    
formatexszQuerycharsmaxszQuery ), "SELECT Nivel FROM %s WHERE Usuario=^"%s^""szTableg_usuarioid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);

    return 
PLUGIN_HANDLED;


La segunda consulta que haces ahi, no tiene sentido alguno, ya que en la anterior estas obteniendo todos los datos. Ya que veo no captaste, usando SELECT * estas obteniendo todas las columnas posibles (LA COLUMNA ES id, nombre, password PARA QUE CAPTES), para no tener que enumerarlas todas en la misma consulta. Si explicitamente estas obteniendo los datos de la misma tabla, ¿por que no la sacas de ahi mismo? Para evitar ambiguedades, mejor postea la estructura de tu base de datos ya que en la que esta escrita en el plugin no esta explicita la columna Nivel, supongo esta puesta tambien.

Y para profundizar mas aun, esta clarisimo el error, ya que en la segunda consulta, solo estas pidiendo el dato Nivel, pero fijate (repito, FIJATE) en iData ya que tiene de valores LOGUEAR_CUENTA que aparece en la funcion del handler

Código PHP:
public DataHandlerfailstateHandle:Queryerror[ ], error2data[ ], datasizeFloat:time 
{
    static 
id;
    
id data];

    if( !
is_user_connectedid ) )
        return;

    switch( 
failstate )
    {
        case 
TQUERY_CONNECT_FAILED
        {
            
log_to_file"SQL_LOG_TQ.txt""Error en la conexion al MySQL [%i]: %s"error2error );
            return;
        }
        case 
TQUERY_QUERY_FAILED:
            
log_to_file"SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s"error2error );
    }

    switch( 
data] ) 
    {
        case 
REGISTRAR_CUENTA
        {
            if( 
failstate TQUERY_SUCCESS )
            {
                if( 
containierror"Usuario" ) != -)
                    
client_printidprint_chat"%s El usuario ya existe."szPrefix );

                else if( 
containierror"Pj" ) != -)
                    
client_printidprint_chat"%s El nombre de personaje esta en uso."szPrefix );
                else
                    
client_printidprint_chat"%s Error al crear la cuenta. Intente nuevamente."szPrefix );

                
client_cmdid"spk buttons/button10.wav" );

                
show_login_menuid );
            }
            else 
            {
                
client_printidprint_chat"%s Tu cuenta ha sido creada correctamente."szPrefix );

                new 
szQuery128 ], iData];

                
iData] = id;
                
iData] = CARGAR_DATOS;

                
formatexszQuerycharsmaxszQuery ), "SELECT id FROM %s WHERE Usuario=^"%s^""szTableg_usuarioid ] );
                
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);    
            }

        }
        case 
LOGUEAR_CUENTA
        {
            if( 
SQL_NumResultsQuery ) ) 
            {
                
g_idid ] = SQL_ReadResultQuery);

                
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );                    

                
// Cargamos datos

                
func_login_successid );
            }
            else 
            {
                
client_printidprint_chat"%s Usuario o Pasword incorrecta."szPrefix );
                
client_cmdid"spk buttons/button10.wav" );

                
show_login_menuid );
            }
        }
        case 
CARGAR_DATOS
        {
            if( 
SQL_NumResultsQuery ) ) 
            {
                
g_idid ] = SQL_ReadResultQuery);

                
// Ponemos la exp en 0 para el nuevo usuario.
                
func_login_successid );
            }
            else 
            {
                
client_printidprint_chat"%s Error al cargar los datos, intente nuevamente."szPrefix );
                
show_login_menuid );
            }
        }
        case 
GUARDAR_DATOS
        {
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"%s Error en el guardado de datos."szPrefix );

            else
                
console_printid"%s Datos guardados."szPrefix );
        }
    }


Te lo hare mas simple

Código PHP:
        case LOGUEAR_CUENTA
        {
            if( 
SQL_NumResultsQuery ) ) 
            {
                
g_idid ] = SQL_ReadResultQuery);

                
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );                    

                
// Cargamos datos

                
func_login_successid );
            }
            else 
            {
                
client_printidprint_chat"%s Usuario o Pasword incorrecta."szPrefix );
                
client_cmdid"spk buttons/button10.wav" );

                
show_login_menuid );
            }
        } 

Mas simple todavia

Código PHP:
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) ); 

Mas aun

Cita:3

No hay ningun "RESULTADO NUMERO 3" ya que la consulta solo pidio 1 dato, y ese dato es Nivel. Es el resultado numero 0 para que lo entiendas de mejor forma. Y siendo aun asi, esto podría estar mucho mejor estructurado, llevando esto al caso de CARGAR_DATOS, o como sea que quieras hacerlo.

Oh god why
Responder


Mensajes en este tema
RE: Cargar un dato de una base de datos mysql - por meTaLiCroSS - 02/10/2016, 05:05 PM

Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)