No logro obtener datos con cache_get_field_content.
#1

Estoy intentando obtener un dato que es la salt de la tabla cuentas, el problema es que no lo obtiene.

Mi codigo:

Код:
// Salt ya la tengo definida

enum playerInfo {
// Otras variables
	Salt[128]
};

SQL_IntentoLogin(playerid, const password[])
{
	new
		query[300],
		string[256],
		buffer[129];

	format(query, sizeof(query), "SELECT `salt` FROM `accounts` WHERE `Username` = '%s'", PlayerInfo[playerid][pUsername]);
	mysql_tquery(conn, query, "OnQueryFinished", "dd", playerid, THREAD_SALT);

	printf("La salt verdadera es %s", PlayerInfo[playerid][Salt]);

	strcat(string,password);
	strcat(string,PlayerInfo[playerid][Salt]);

	WP_Hash(buffer, sizeof(buffer), string);

	format(query, sizeof(query), "SELECT `ID` FROM `accounts` WHERE `Username` = '%s' AND `Password` = '%s'", PlayerInfo[playerid][pUsername], buffer);
	mysql_tquery(conn, query, "OnQueryFinished", "dd", playerid, THREAD_LOGIN);
}

//Esto lo tengo en OnQueryFinished, con su respectivo switch
case THREAD_SALT:
{
	cache_get_data(rows, fields, conn);

	if (rows)
	{
		static content[128];
		cache_get_field_content(0, "salt", content, conn);  PlayerInfo[extraid][Salt] = strval(content);
                print("Se esta obteniendo la variable salt");
		printf("La verdadera salt en THREAD es %s", PlayerInfo[extraid][Salt]);
	}
}
Y lo unico que consigo en consola es esto:



Gracias y espero obtener algun tipo de ayuda, que me gustaria volver a pawn . Un saludo y gracias.
Reply
#2

Yo no se casi nada de mysql pero yo obtengo datos asн te dejo un ejemplo con tus datos
cache_get_field_content(0, "salt", PlayerInfo[extraid][Salt], mysql, 32);
Reply
#3

Код:
SQL_IntentoLogin(playerid, const password[])
{
    new
        query[300],
        string[256],
        buffer[129],
        content[129];
    mysql_format(conn,query,sizeof(query),"SELECT `salt` FROM `accounts` WHERE `Username` = '%e' LIMIT 1",PlayerInfo[playerid][pUsername]);
    new Cache:result = mysql_query(conn, query);
    if(cache_num_rows())
    {
        cache_get_field_content(0, "salt", content, conn);
    }
    cache_delete(result);
    strcat(string,password);
    strcat(string,PlayerInfo[playerid][Salt]);
    WP_Hash(buffer, sizeof(buffer), string);
    mysql_format(conn, query, sizeof(query), "SELECT `ID` FROM `accounts` WHERE `Username` = '%e' AND `Password` = '%s' LIMIT 1", PlayerInfo[playerid][pUsername],buffer);
    mysql_tquery(conn, query, "OnQueryFinished", "dd", playerid, THREAD_LOGIN);
}
y borra el case 'THREAD_SALT' de OnQueryFinished.

Aunque, no entiendo muy bien como quieres hacer ese login... haces como 50 consultas xD
Reply
#4

Muchas gracias, solo era cambiar el PlayerInfo[playerid][Salt] por content en strcat para hashear la contraseсa y compararla, ya funciona bien, pero їMe podrias explicar un poco el cуdigo? ando un poco perdido -_-
Reply
#5

Quote:
Originally Posted by maestrolimpio123
Посмотреть сообщение
Muchas gracias, solo era cambiar el PlayerInfo[playerid][Salt] por content en strcat para hashear la contraseсa y compararla, ya funciona bien, pero їMe podrias explicar un poco el cуdigo? ando un poco perdido -_-
ah si cierto, tenнa que usar content xD.

Bбsicamente es lo mismo que intentabas hacer, sуlo que no era necesario tener que usar una variable global para eso si sуlo la usas ahн.

Si te cargaba bien 'salt', pero establecнas el valor de 'PlayerInfo[extraid][Salt]' como un entero ("PlayerInfo[extraid][Salt] = strval(content);") y es lo que usabas para el hash cuando en realidad es una cadena tambiйn. En ese caso la fueras cargado directamente en la variable global:

Код:
case THREAD_SALT:
{
	cache_get_data(rows, fields, conn);

	if (rows)
	{
                //Salt debe ser una cadena
		cache_get_field_content(0, "salt", PlayerInfo[extraid][Salt], conn,129);
                print("Se esta obteniendo la variable salt");
		printf("La verdadera salt en THREAD es %s", PlayerInfo[extraid][Salt]);
	}
}
Reply
#6

Mmm, ya voy entendiendo un poco, Muchas gracias!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)