-
Фракции
Всем привет
Мне нужно чтобы загрузка шла с 1 фракции, а не с 0, поэтому, когда ставлю в цикле "<=", то выскакивают ошибки:
Когда ставлю "<" загрузка идет с 2 фракции
PHP код:
[ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('1') (Query: "SELECT * FROM `fractions`")
[ERROR] cache_get_field_content_int - invalid datatype
[ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('1') (Query: "SELECT * FROM `fractions`")
[ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('1') (Query: "SELECT * FROM `fractions`")
[ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('1') (Query: "SELECT * FROM `fractions`")
PHP код:
@_LoadFrac();
@_LoadFrac() {
new rows, fields;
cache_get_data(rows, fields);
for(new i = 1; i <= rows; i++) {
Frac[i][id] = cache_get_field_content_int(i, "ID", mysqlc);
cache_get_field_content(i, "Name", Frac[i][fName], mysqlc, 32);
cache_get_field_content(i, "Leader", Frac[i][fLeader], mysqlc, 32);
cache_get_field_content(i, "Assistant", Frac[i][fAssistant], mysqlc, 32);
TOTALFRAC++;
}
printf("%d - uploaded fractions", TOTALFRAC);
return true;
}
-
+- так
PHP код:
@_LoadFrac();
@_LoadFrac() {
new fields;
cache_get_data(TOTALFRAC, fields);
for(new i, id; i < TOTALFRAC; i++) {
id = cache_get_field_content_int(i, "ID", mysqlc);
cache_get_field_content(i, "Name", Frac[id][fName], mysqlc, 32);
cache_get_field_content(i, "Leader", Frac[id][fLeader], mysqlc, 32);
cache_get_field_content(i, "Assistant", Frac[id][fAssistant], mysqlc, 32);
}
printf("%d - uploaded fractions", TOTALFRAC);
return true;
}
-
Цитата:
Сообщение от
DeimoS
+- так
PHP код:
@_LoadFrac();
@_LoadFrac() {
new fields;
cache_get_data(TOTALFRAC, fields);
for(new i, id; i < TOTALFRAC; i++) {
id = cache_get_field_content_int(i, "ID", mysqlc);
cache_get_field_content(i, "Name", Frac[id][fName], mysqlc, 32);
cache_get_field_content(i, "Leader", Frac[id][fLeader], mysqlc, 32);
cache_get_field_content(i, "Assistant", Frac[id][fAssistant], mysqlc, 32);
}
printf("%d - uploaded fractions", TOTALFRAC);
return true;
}
Если не сложно, можешь объяснить то что ты сделал
Он рабочий, спасибо :)
-
Исправил цикл загрузки?)
Цикл, в первую очередь, нужен для обработки кэша, который вернулся в результате запроса к БД. Идентификаторы в кэше начинаются не с 1, а с 0. Эти идентификаторы никак не связаны с твоими ID фракций, поэтому нельзя использовать переменную цикла, которой обращаешься к кэшу, как индекс массива.
Собственно, я сделал 2 отдельные переменные: одну для обработки кэша, а другую для работы с массивом. Во вторую переменную записывается значение столбца ID из БД, ибо это, как я понимаю, и есть ID фракции.
Только лучше вот так сделать на всякий случай
PHP код:
@_LoadFrac();
@_LoadFrac() {
new fields;
cache_get_data(TOTALFRAC, fields);
for(new i, id; i < TOTALFRAC; i++)
{
id = cache_get_field_content_int(i, "ID", mysqlc);
if(!(0 <= id < sizeof(Frac))
{
//Сюда можешь добавить сообщение в логи о том, что ID фракции невалиден, так как больше, чем ячеек в массиве Frac
continue;
}
cache_get_field_content(i, "Name", Frac[id][fName], mysqlc, 32);
cache_get_field_content(i, "Leader", Frac[id][fLeader], mysqlc, 32);
cache_get_field_content(i, "Assistant", Frac[id][fAssistant], mysqlc, 32);
}
printf("%d - uploaded fractions", TOTALFRAC);
return true;
}