= ($config["traffic_ipstat_history"] ?? 30)) ? 'user_stats' : 'user_stats_full'; // === 2. Безопасная сортировка === $allowed_sort_fields = ['tin', 'tout', 'pin', 'pout', 'id', 'router_id']; $allowed_orders = ['ASC', 'DESC']; $sort_field = in_array($sort_field, $allowed_sort_fields, true) ? $sort_field : 'tin'; $order = in_array(strtoupper($order), $allowed_orders, true) ? strtoupper($order) : 'DESC'; $sort_sql = " ORDER BY $sort_field $order"; // === 3. Базовые параметры === $sql_params = [$date1, $date2]; // === 4. Формируем запрос === $trafSQL = " SELECT user_auth.id, {$traffic_stat_table}.router_id, SUM(byte_in) AS tin, SUM(byte_out) AS tout, MAX(ROUND(pkt_in / step)) AS pin, MAX(ROUND(pkt_out / step)) AS pout FROM {$traffic_stat_table} JOIN user_auth ON {$traffic_stat_table}.auth_id = user_auth.id JOIN user_list ON user_list.id = user_auth.user_id WHERE {$traffic_stat_table}.ts >= ? AND {$traffic_stat_table}.ts < ? "; // === 5. Дополнительные условия === if ($rou !== 0) { $trafSQL .= " AND user_list.ou_id = ?"; $sql_params[] = (int)$rou; } if ($rgateway > 0) { $trafSQL .= " AND {$traffic_stat_table}.router_id = ?"; $sql_params[] = (int)$rgateway; } // === 6. GROUP BY (корректный для текущего SELECT) === $trafSQL .= " GROUP BY user_auth.id, {$traffic_stat_table}.router_id"; // === 7. Подсчёт записей === $countSQL = "SELECT COUNT(*) FROM ($trafSQL) AS subquery"; $count_records = (int)get_single_field($db_link, $countSQL, $sql_params); // === 8. Пагинация === $total = ceil($count_records / $displayed); $page = max(1, min($page, $total)); $start = ($page - 1) * $displayed; // исправлено print_navigation($page_url, $page, $displayed, $count_records, $total); // === 9. Добавляем сортировку, LIMIT, OFFSET === $trafSQL .= $sort_sql . " LIMIT ? OFFSET ?"; $sql_params[] = (int)$displayed; $sql_params[] = (int)$start; // === 10. Выполняем запрос === $traf = get_records_sql($db_link, $trafSQL, $sql_params); print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $total_in = 0; $total_out = 0; foreach ($traf as $row) { if ($row['tin'] + $row['tout'] == 0) { continue; } $total_in += $row['tin']; $total_out += $row['tout']; $s_router = !empty($gateway_list[$row['router_id']]) ? $gateway_list[$row['router_id']] : ''; $cl = $row['tout'] > 2 * $row['tin'] ? "nb" : "data"; $a_SQL='SELECT ip,U.login FROM user_auth, user_list as U where user_auth.user_id=U.id and user_auth.id=?'; $auth_record = get_record_sql($db_link,$a_SQL,[$row['id']]); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; ?>
".WEB_cell_login."".WEB_cell_ip."".WEB_cell_gateway."".WEB_title_input."".WEB_title_output."".WEB_title_maxpktin."".WEB_title_maxpktout."
" . $auth_record['login'] . "" . $auth_record['ip'] . "$s_router" . fbytes($row['tin']) . "" . fbytes($row['tout']) . "" . fpkts($row['pin']) . "" . fpkts($row['pout']) . "
".WEB_title_itog."" . fbytes($total_in) . "" . fbytes($total_out) . "