Mensajes: 417
Temas: 53
Registro en: May 2014
28/02/2015, 08:51 PM
(Última modificación: 28/02/2015, 09:42 PM por Ipolito.)
Hola gente. Estoy tratando de guardar en mysql todas las habilidades, mediante un for, pero no se porque no funciona. No guarda ninguna habilidad, ya intente de varias formas, no me tira error en logs ni nada :/ (tengo el debug activado por las dudas de que me digan ). Al insertar manualmente valores en las columnas de las habilidades las carga perfectamente.
Dejo el code..
Código PHP: new g_habs[ 33 ][ 2 ][ 8 ];
new g_mejoras_humanas[][ DATA_MEJORAS ] = { { "Habilidad 1", 8, 35 }, { "Habilidad 2", 6, 25 }, { "Habilidad 3", 10, 30 }, { "Habilidad 4", 10, 20 }, { "Habilidad 5", 7, 15 }, { "Habilidad 6", 5, 20 }, { "Habilidad 7", 4, 20 }, { "Habilidad 8", 4, 15 } };
En la parte de guardar:
Código PHP: formatex(g_query, charsmax(g_query), "UPDATE `%s` ", TABLE4) for (new i = 0; i < sizeof g_mejoras_humanas; i++) formatex(g_query, charsmax(g_query), "SET `Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" : ","); formatex(g_query, charsmax(g_query), "`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"", g_cofres{id}, user_id[id][1], g_name[id]) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
La parte de cargar:
Código PHP: if (SQL_NumResults(Query)) { new i for (i = 0; i < sizeof g_mejoras_humanas; i++) g_habs[id][0][i] = SQL_ReadResult(Query, 2+i); g_cofres{id} = SQL_ReadResult(Query, 10) messages(id, "Cargando personaje.") }
Mensajes: 2,176
Temas: 99
Registro en: Dec 2013
Reputación:
42
28/02/2015, 10:38 PM
(Última modificación: 28/02/2015, 10:43 PM por CSAxel.)
El problema es que usas formatex varias veces y solo se utiliza la última parte escrita, es decir que lo primeros utilizados, no se tomarán en cuenta (Una de sus desventajas..). Es más recomendable hacer todo en uno solo o aunque sea algo molesto y piensas que sea menos "optimizable", hazlo uno por uno y listo.
PD: Otro caso que puedes hacer es usar iLen + Formatex, así lo puedes utilizar mejor
Código PHP: new iLen = 0;
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "UPDATE `%s` ", TABLE4) for (new i = 0; i < sizeof g_mejoras_humanas; i++) iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "SET `Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" : ","); iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"", g_cofres{id}, user_id[id][1], g_name[id]) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
PD2: Si no entendiste a lo que me referia, aquí te dejo un ejemplo
Código PHP: formatex(szBuffer, charsmax(szBuffer), "Hola a todos") // No se muestra porque utilizas la misma variable que guarda los caracteres formatex(szBuffer, charsmax(szBuffer), "Como estan"); // Esto si se muestra porque es lo último que escribes en la variable
client_print(id, print_chat, "%s", szBuffer);
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Mensajes: 417
Temas: 53
Registro en: May 2014
28/02/2015, 10:53 PM
(Última modificación: 28/02/2015, 10:53 PM por Ipolito.)
(28/02/2015, 10:38 PM)CSAxel escribió: El problema es que usas formatex varias veces y solo se utiliza la última parte escrita, es decir que lo primeros utilizados, no se tomarán en cuenta (Una de sus desventajas..). Es más recomendable hacer todo en uno solo o aunque sea algo molesto y piensas que sea menos "optimizable", hazlo uno por uno y listo.
PD: Otro caso que puedes hacer es usar iLen + Formatex, así lo puedes utilizar mejor
Código PHP: new iLen = 0;
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "UPDATE `%s` ", TABLE4) for (new i = 0; i < sizeof g_mejoras_humanas; i++) iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "SET `Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" : ","); iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"", g_cofres{id}, user_id[id][1], g_name[id]) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
Ya lo habia probado asi, y tampoco funciona..
Mensajes: 2,176
Temas: 99
Registro en: Dec 2013
Reputación:
42
28/02/2015, 11:15 PM
(Última modificación: 28/02/2015, 11:16 PM por CSAxel.)
Hazlo en una sola consulta y listo, menos quilombo..
Código PHP: formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Habh1`='%d'", Habh2 ='%d', Habh3, `Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^", TABLE4, g_habs[id][0][0], g_habs[id][0][1], g_habs[id][0][2], g_cofres{id}, user_id[id][1], g_name[id]);
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Mensajes: 417
Temas: 53
Registro en: May 2014
(28/02/2015, 11:15 PM)CSAxel escribió: Hazlo en una sola consulta y listo, menos quilombo..
Código PHP: formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Habh1`='%d'", Habh2 ='%d', Habh3, `Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^", TABLE4, g_habs[id][0][0], g_habs[id][0][1], g_habs[id][0][2], g_cofres{id}, user_id[id][1], g_name[id]);
Es que no quiero hacerlo asi, supongamos que tengo que guardar mas de 30 variables, es alto choclo de codigo :_. Por eso hice el thread
Mensajes: 2,176
Temas: 99
Registro en: Dec 2013
Reputación:
42
Igual es lo que más recomiendo, aunque haya posibilidades de que se pueda optimizar, optaría por eso... No importa si son 500 variables a guardar.. Si SQL soporta millones de bombardeos de consultas
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Mensajes: 417
Temas: 53
Registro en: May 2014
01/03/2015, 01:57 PM
(Última modificación: 01/03/2015, 02:57 PM por Ipolito.)
Perdon por el doble post, pero acabo de solucionarlo, y era una pelotudes.
Hice un print para ver que valores me devolvia, y vi que me los devolvia mal
Código PHP: public dime(id) { for (new i = 0; i < sizeof g_mejoras_humanas; i++) client_print(id, print_console, "SET `Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" : ","); }
Me devolvia estos valores:
Código PHP: SET `Habh0`='0', SET `Habh1`='0', SET `Habh2`='0', SET `Habh5`='0', SET `Habh7`='0', SET `Habh6`='0', SET `Habh3`='0', SET `Habh2`='0'
Como se puede ver, estan desordenados, tendrian que ir de Habh0 a Habh7.
Enconces, lo que hice fue lo siguiente, fue sacar el sizeof del print (no del for), y agregarle un 9-1. Como son 8 habilidades, hasta la habilidad 8 van a tener comas.
Código PHP: public dime(id) { for (new i = 0; i < sizeof g_mejoras_humanas; i++) client_print(id, print_console, "SET `Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==9-1) ? "" : ","); }
//Valores:
SET `Habh0`='0', SET `Habh1`='0', SET `Habh2`='0', SET `Habh3`='0', SET `Habh4`='0', SET `Habh5`='0', SET `Habh6`='0', SET `Habh7`='0',
Ahora los devolvia bien. Entonces, lo que hice en la consulta de guardar fue esto
Código PHP: new iLen = 0;
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "UPDATE `%s` SET `ph`='%d', ", TABLE4, g_points[id][0]) for (new i = 0; i < sizeof g_mejoras_humanas; i++) iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "`Habh%d`='%d'%s ", i, g_habs[id][0][i], (i==9-1) ? "" : ","); iLen += formatex(g_query[iLen], charsmax(g_query) - iLen, "`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"", g_cofres{id}, user_id[id][1], g_name[id]) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
La parte de cargar:
Código PHP: if (SQL_NumResults(Query)) { g_points[id][0] = SQL_ReadResult(Query, 2) new i for (i = 0; i < sizeof g_mejoras_humanas; i++) g_habs[id][0][i] = SQL_ReadResult(Query, 3+i); g_cofres{id} = SQL_ReadResult(Query, 11) messages(id, "Cargando personaje.") }
Bueno, no se si se entendio bien lo que hice para arreglarlo, soy medio malo explicando. Espero que a alguien le sirva por si quiere hacer algo parecido a lo que yo hice
|