= ($config["traffic_ipstat_history"] ?? 30)) ? 'user_stats' : 'user_stats_full'; // === 2. Безопасная сортировка === $allowed_sort = ['tin', 'tout', 'pin', 'pout', 'user_id', 'router_id']; $allowed_order = ['ASC', 'DESC']; $sort_field = in_array($sort_field, $allowed_sort, true) ? $sort_field : 'tin'; $order = in_array(strtoupper($order), $allowed_order, true) ? strtoupper($order) : 'DESC'; $sort_sql = " ORDER BY $sort_field $order"; // === 3. Базовые параметры === $sql_params = [$date1, $date2]; // === 4. Формируем запрос === $trafSQL = " SELECT user_auth.user_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}, user_auth, user_list WHERE user_list.id = user_auth.user_id AND {$traffic_stat_table}.auth_id = user_auth.id AND {$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 === $trafSQL .= " GROUP BY user_auth.user_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. Добавляем сортировку + пагинацию === $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"; $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"; $u_SQL='SELECT * FROM user_list WHERE id=?'; $user_record = get_record_sql($db_link,$u_SQL,[$row['user_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"; ?>
".WEB_cell_login."".WEB_cell_gateway."".WEB_title_input."".WEB_title_output."".WEB_title_maxpktin."".WEB_title_maxpktout."
" . $user_record['login'] . "$s_router" . fbytes($row['tin']) . "" . fbytes($row['tout']) . "" . fpkts($row['pin']) . "" . fpkts($row['pout']) . "
".WEB_title_itog."" . fbytes($total_in) . "" . fbytes($total_out) . "