Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск и сравнение в базе ( PowerCounter 2.1.0 )
 
 автор: Zebra   (18.09.2004 в 23:10)
 
 

Суть №1
в проекте "PowerCounter 2.1.0 " на вкладке IP-адреса
хочу сделать
IP-адрес |Хост| Всего посещений | Последнее обращение | Провайдер | Город
т.е. добавить Провайдер и Город чтобы знать из какого города происходят запросы.

  <tr><td class=headtable><p>IP-адрес</td><td class=headtable><p>Хост</td><td class=headtable><p>Всего<br>посещений</td><td class=headtable><p>Последнее&nbsp;обращение</td><td class=headtable><p>Провайдер</td><td class=headtable><p>Город</td></tr>


Есть база (count) в ней есть таблица provaider 8 полей:
prov gorod ip1_1 ip1_2 ip1_3 ip1_4 ip2_1 ip2_2 ip2_3 ip2_4

в prov имя провайдера gorod-город
есть диапазон ip например 127.0.0.0 - 127.0.0.255 тогда :
ip1_1=127
ip1_2=0
ip1_3=0
ip1_4=0
ip2_1=127
ip2_2=0
ip2_3=0
ip2_4=255
заполняется эта таблица на n-ой странице что не столь важно
СУТЬ №2 в том что есть к примеру 2 провайдера со своими диапазонами ip и мне нужно сравнить переменную $ip['ip'] (из файла addresses.php) с этим диапазоном ай-пи.
Саму переменная $ip['ip'] "разбивается на куски" и заносится в массив
<?php
$array 
split ("\." $ip['ip']);  
?>

   
 
 автор: cheops   (19.09.2004 в 11:16)   письмо автору
 
   для: Zebra   (18.09.2004 в 23:10)
 

Что мне всегда в PowerCounter не нравилось, так это то, что IP-адреса хранятся в текстовом формате. Это сложилось исторически, так как помимо самого IP-адреса, необходимо было через / хранить маску подсети, чтобы более полно учитывать хосты. Поэтому в поле ip таблицы ip за здорово живёшь можно встретить значение вроде
213.177.119.238/192.168.3.106, 10.0.0.1

Т.е. перед разбиением необходимо проверить налчие слеша, и, если он имеется удалить всё что имеется в строке после него
<?php
  $pos 
strpos($ip['ip'],"/");
  
$ip['ip'] = substr($ip['ip'],0,$pos);
?>

Так как число кусков разбиения известно заранее, лучше использовать функцию list:
<?php 
 
list($id1$ip2$ip3$ip4) = split ("\." $ip['ip']);   
?>

Тогда выяснить к какому провайдеру и городу принадлежит IP-адрес можно при помощи кода
<?php
$query 
"SELECT prov, gorod 
          FROM provider
          WHERE 
$id1 > ip1_1 AND
                
$id1 < ip2_1 AND
                
$ip2 > ip1_2 AND
                
$ip2 < ip2_2 AND
                
$ip3 > ip1_3 AND
                
$ip3 < ip2_3 AND
                
$ip4 > ip1_4 AND
                
$ip4 < ip2_4";
$ipprov mysql_query($query);
if(!
$ipprov)  puterror("Ошибка при обращении к таблице провайдеров...");
if(
mysql_num_rows($ipprov)>0)
{
  
$prov mysql_fetch_array($ipprov);
  echo 
"Провайдер - ".$prov['prov']."<br>";
  echo 
"Город - ".$prov['gorod']."<br>";
}
else
{
  echo 
"Информация отсутсвует";
}
?>


PS Вообще по уму следует IP-адреса и в таблице ip перевести в 4хTINYINT формат, тогда можно будет осушествить многотабличный запрос, что в данной ситуации сильно увеличит производительность.

   
 
 автор: Zebra   (20.09.2004 в 00:47)   письмо автору
 
   для: cheops   (19.09.2004 в 11:16)
 

что то этот код не хочет работать
  $pos = strpos($ip['ip'],"/"); 
  $ip['ip'] = substr($ip['ip'],0,$pos); 


ну а так пара мелких ошибочек которые я нашел и все в принципе то зработало
FROM provider => FROM provaider
split ("\." $ip['ip']); => split ("\." ,$ip['ip']);

кидаю архив кто хочет посматрите на предварительный результат
в папке powercounter21
лежит update_provaider.sql для добавления таблицы provaider
собственно пока все.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования