HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 27.08.2009, 23:35
restart_05
Участник форума
Регистрация: 05.05.2009
Сообщений: 126
Провел на форуме:
226966

Репутация: 8
По умолчанию

Мне нужно вывести online сервера постраничным методом
Статус сервера не хранится в бд. Чтобы определить статус можно воспользоваться таким запросом
Код:
$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

Последний раз редактировалось restart_05; 27.08.2009 в 23:39..
 
Ответить с цитированием

  #22  
Старый 28.08.2009, 12:13
restart_05
Участник форума
Регистрация: 05.05.2009
Сообщений: 126
Провел на форуме:
226966

Репутация: 8
По умолчанию

не у кого нет предложений ???
 
Ответить с цитированием

  #23  
Старый 28.08.2009, 13:24
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

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 минут"
--------------------------------------------------------------------
Код:
$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)

а вот теперь постраничный вывод

Последний раз редактировалось Pashkela; 28.08.2009 в 13:47..
 
Ответить с цитированием

  #24  
Старый 28.08.2009, 14:32
restart_05
Участник форума
Регистрация: 05.05.2009
Сообщений: 126
Провел на форуме:
226966

Репутация: 8
По умолчанию

if ( $data['status'] == "on") {
$serv[][port] = $row['port'];
$serv[][ip] = $row['ip'];
}

Вначале же берем ип порт с базу чтобы узнать статус on или off
 
Ответить с цитированием

  #25  
Старый 28.08.2009, 14:48
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Цитата:
Сообщение от restart_05  
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. Как сформировать такой массив писано выше

Цитата:
Вначале же берем ип порт с базу чтобы узнать статус on или off
заноси в результирующий массив в нужном тебе порядке, я просто пример привёл

Последний раз редактировалось Pashkela; 28.08.2009 в 14:58..
 
Ответить с цитированием

  #26  
Старый 28.08.2009, 17:47
restart_05
Участник форума
Регистрация: 05.05.2009
Сообщений: 126
Провел на форуме:
226966

Репутация: 8
По умолчанию

Все равно не получается мне кажется легче будет создать status cache и cache_time в бд и через определенное время обновлять эти данные
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка акков Вконтакте) Phoenixy Болталка 4 12.06.2009 12:40
Сортировка адресов Елена Сафонова Уязвимости Mail-сервис 3 19.06.2006 23:26



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ