Мне нужно вывести online сервера постраничным методом Статус сервера не хранится в бд. Чтобы определить статус можно воспользоваться таким запросом Code: $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25"; $serv = mysql_query($query, $connect) or die(mysql_error()); while ( $row = mysql_fetch_assoc($serv) ) { $ip = $row['ip']; $port = $row['port']; $data = cs($ip,$port); if ( $data['status'] == "off") { } if ( $data['status'] == "on") {//Выводим сервер в список } } Отсюда если будут к примеру только 15 серверов из 25 выведит 15 а не 25 а мне нужно чтоб на страницу выводило 25 из 25
1. В базе данных создаешь новую колонку - status, в которую будешь писать online или offline, или 1 и 0, или как хочешь. 2. SQL-запрос без лимит 25. Получаем список серверов из БД, делаем процедуру проверки на онлайн (в цикле, каждого сервера), примерный цикл: while (ля-ля) { тут процедура проверки на онлайн конкретного сервера тут процедура обновления БД, вставляем напротив конкретно текущего сервера статус - онлайн/офлайн } 3. Новый SQL-запрос, теперь спокойно выбираем только те, которые online, т.е. select * from lala where status='online' а дальше уже стандартная процедура - подсчет кол-ва полученных значений по запросу и вывод на экран с пагинацией, в зависимости от полученных результатов PS: Или тоже самое только с первым запросом, но результаты проверки на онлайн/офлайн заносить в массив (только те, кто онлайн), включая название сервера (все данные, что нужны для вывода), делать расчет кол-ва массива (каждый раз может быть разное), и выводить на экран в цикле с пагинацией как обычно (в принципе тоже самое, только без сохранения статуса где либо, что вряд ли имеет значение, ибо такие запросы делать постоянно - прикинь, зашли 100 даже человек одновременно, как думаешь, скоро у них отклик на F5 будет? Проще задать временной промежуток - т.е. создать в БД кроме колонки status еще колонку time, куда заносить последнее время проверки статуса, и при очередном запросе к сприпту проверять, если последнее время проверки было не больше 5 минут назад - просто выплевывать последние данные в соответствии с колонкой status. Ну или любой другой интервал - минута, 2 и т.д.) и написать "статус проверяется каждые n минут" -------------------------------------------------------------------- Code: $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25"; $serv = mysql_query($query, $connect) or die(mysql_error()); while ( $row = mysql_fetch_assoc($serv) ) { $ip = $row['ip']; $port = $row['port']; $data = cs($ip,$port); if ( $data['status'] == "off") { } if ( $data['status'] == "on") {//Выводим сервер в список } } или (сорри, поздно увидел), по этому коду: вот это $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25"; заменить на это: $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC"; а дальше так примерно: if ( $data['status'] == "on") { $serv[][port] = $row['port']; $serv[][ip] = $row['ip']; } т.е. формуруем массив, в котором только те, кто онлайн. И только сейчас считаем кол-во значений полученного массива (т.е. у нас ВСЕ сереверы, кто ОНЛАЙН), а не только первые 25 (print_r ($serv) а вот теперь постраничный вывод
if ( $data['status'] == "on") { $serv[][port] = $row['port']; $serv[][ip] = $row['ip']; } Вначале же берем ип порт с базу чтобы узнать статус on или off
в общем понятно, загоняй все, кто онлайн в массив и дальше можно вот так например сделать: PHP: <pre> <?php $start = (int)$_GET['start']; for ($s=0;$s<100;$s++) $serv[] = $s;// Тут типо пример твоего массива с серверами (просто создаем для примера) $limit = 25; // Сколько выводить на страницу $count = count($serv); $b = 0; for($i=$start;$i < $count;$i++) { $b++; echo "сервер" . $serv[$i] . "\n"; // Тут пишем то, что нужно вывести на экран // Ниже делаем навигацию if ($b == $limit) { if ($i == ($count-1)) { echo "\n <a href = " . $_SERVER['PHP_SELF'] . "?start=" . ($i+1-$limit*2) . ">Предыдущие $limit</a>"; echo " Навигация "; exit; } if ($i>$limit) { echo "\n <a href = " . $_SERVER['PHP_SELF'] . "?start=" . ($i+1-$limit*2) . ">Предыдущие $limit</a>"; echo " Навигация "; echo "<a href = " . $_SERVER['PHP_SELF'] . "?start=" . ($i+1) . ">Следующие $limit</a>"; } else { echo "\n Навигация "; echo "<a href = " . $_SERVER['PHP_SELF'] . "?start=" . ($i+1) . ">Следующие $limit</a> \n"; } $i = $count; } } ?> </pre> просто запусти этот скрипт и может быть таки поймешь, что к чему. Тоже самое тебе надо сделать со своим массивом, где у тебя будут только сервера ONLINE. Как сформировать такой массив писано выше заноси в результирующий массив в нужном тебе порядке, я просто пример привёл
Все равно не получается мне кажется легче будет создать status cache и cache_time в бд и через определенное время обновлять эти данные