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

Форум PHP

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

 

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

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

тема: Статистика сайта (скрипт из книги)
 
 автор: Agronom   (30.06.2005 в 11:37)   письмо автору
 
 

Здравствуйте, господа!

Решил я тут сделать скрипт статистики по сайту, описываемый в книге.
У меня возникли проблумы, которые я опишу ниже, но сразу скажу, что у меня стоит PHP 4.3 Apache 1.3.26 возможно проблема именно из-за этого.

Перейдем к самому скрипту
1й этап по построению базы данных прошел успешно!

Далее приступил к созданию счетчика, после чего заметил, что переменная

$page=$PHP_SELF;
у меня вечно пустует и ничего не записывается в поле name таблицы pages . Например

 $ip = $REMOTE_ADDR;
у меня не считывает ip, считывает лишь если написать

 $ip = $_SERVER['REMOTE_ADDR'];


Потом вопрос, почему таблица ip имеет 7 полей, а записываем мы в неё 8 записей

$query_main = "insert into ip values (
0,
'$HTTP_USER_AGENT',
'$ip',
NOW(),
$nm,
$br,
$os,
$srch);";

mysql_query($query_main);

Возможно я что-то не понял.

Далее совершенно не работают функции определения браузера, системы, поисковика (но это не важно у нас в локальной сети, т.к. действует всего 1 поисковик http://128.0.10.174);

Еще написал главную страницу статистике, на которой работали лишь номерация страниц, цикл

while($pag = mysql_ferch_array($pgs))
{
echo"<tr>
  <td>".$pag['name']."</td>
  <td>".$pag['num']."</td>
 </tr>";
}

конечно же выдавал ошибку, наверное из-за неправильной записи в таблицу!

Помогите пожалуйста разобраться в этом скрипте. Заранее благодарен.

   
 
 автор: P@Sol   (30.06.2005 в 11:49)   письмо автору
 
   для: Agronom   (30.06.2005 в 11:37)
 

>У меня возникли проблумы, которые я опишу ниже, но сразу
>скажу, что у меня стоит PHP 4.3 Apache 1.3.26 возможно
>проблема именно из-за этого.

Видимо у вас отключены register globals

>Далее приступил к созданию счетчика, после чего заметил, что
>переменная

$page=$PHP_SELF;

>поле name таблицы pages . Например

 $ip = $REMOTE_ADDR;

Замените глобальные переменные на суперглобальные, $_GET, $_POST, $_SERVER и д.р.

$page=$_SERVER["PHP_SELF"]
$ip = $_SERVER['REMOTE_ADDR'];

Вот так будет работать:)

>Далее совершенно не работают функции определения браузера,
>системы, поисковика (но это не важно у нас в локальной сети,
>т.к. действует всего 1 поисковик http://128.0.10.174);

Как выглядит функция?

   
 
 автор: Agronom   (30.06.2005 в 12:37)   письмо автору
 
   для: P@Sol   (30.06.2005 в 11:49)
 

Включил register globals стало лучше :) Заработала $page=$PHP_SELF; и теперь определяется система и браузеры!

Вот теперь я не понял с таблицей pages поля (id_page,name,id_site) он мне туда записал 1 строку (127,/~ROS/index.php,0) . /~ROS/index.php - это главная страница сайта, все осталиные страницы включаются в эту и имеют вид /~ROS/index.php?nam=page_name . Это получается скрипт страницы такого типа считывать не будет? желательно их тоже отображать и считать :)

в таблицу refferer он записал только 1 строку где в name - http://128.0.0.220/~ROS/index.php?nam=main
Больше он туда ничего писать не хочет :)

   
 
 автор: P@Sol   (30.06.2005 в 12:42)   письмо автору
 
   для: Agronom   (30.06.2005 в 12:37)
 

почитайте - http://www.softtime.ru/info/powercounter20.php

   
 
 автор: cheops   (30.06.2005 в 12:23)   письмо автору
 
   для: Agronom   (30.06.2005 в 11:37)
 

Следует скачать обновлённую версию счётчика PowerCounter из раздела downloads этого сайта http://www.softtime.ru/info/powercounter20.php, где эти ошибки уже исправлены.

   
 
 автор: Agronom   (30.06.2005 в 12:41)   письмо автору
 
   для: cheops   (30.06.2005 в 12:23)
 

Спасибо, будем разбираться :)

   
 
 автор: Agronom   (30.06.2005 в 13:29)   письмо автору
 
   для: Agronom   (30.06.2005 в 12:41)
 

Вот изменил код записи в таблицу pages

$query = "SELECT id_page FROM pages WHERE name='".$_SERVER['REQUEST_URI']."'";
      $pgs = mysql_query($query);
      if ($pgs)      {
      
             if(mysql_num_rows($pgs)>0) $id_page = mysql_result($pgs,0);
               else        {
          $query = "INSERT INTO pages VALUES (0, '".$_SERVER['REQUEST_URI']."', 0)";
          mysql_query($query);
          
          $id_page = mysql_insert_id();
        }
}


Как я понял, скрипт долен заносить сюда новые страницы, а если такая страница имеется то просто узнавать её первичный ключ и исходя из этого писать в таблицы ip и refferer У меня как всегда все нетак :( В таблицу pages он записывает только 1строку первой страницы, в refferer ту страницу с которой перешли, а в ip соответственно сведения о системе... Дальше ничего не пишет!
Может я что-нибудь не понял.

Или может дело в базах?
вот таблица ip

CREATE TABLE 'ip' (
  'id_ip' tinyint(32) NOT NULL auto_increment,
  'ip' text,
  'putdate' datetime default NULL,
  'id_page' tinyint(10) default NULL,
  'browser' tinyint(4) default NULL,
  'system' tinyint(4) default NULL,
  'search' tinyint(4) default NULL,
  PRIMARY KEY  ('id_ip')
) TYPE=MyISAM


таблица refferer

CREATE TABLE 'refferer' (
  'id_refferer' tinyint(16) NOT NULL auto_increment,
  'name' text,
  'putdate' datetime default NULL,
  'ip' text,
  'id_page' tinyint(8) default NULL,
  'search' tinyint(4) default NULL,
  PRIMARY KEY  ('id_refferer')
) TYPE=MyISAM


pages


CREATE TABLE 'pages' (
  'id_page' tinyint(10) NOT NULL auto_increment,
  'name' text,
  'id_site' tinyint(4) default NULL,
  PRIMARY KEY  ('id_page')
) TYPE=MyISAM


Таблица links пока не знаю для чего нужна, т.к. не видел её в действии =))

CREATE TABLE 'links' (
  'id_links' tinyint(8) NOT NULL auto_increment,
  'name' text,
  PRIMARY KEY  ('id_links')
) TYPE=MyISAM

   
 
 автор: cheops   (01.07.2005 в 00:19)   письмо автору
 
   для: Agronom   (30.06.2005 в 13:29)
 

> У меня как всегда все нетак :( В таблицу
>pages он записывает только 1строку первой страницы, в
>refferer ту страницу с которой перешли, а в ip
>соответственно сведения о системе... Дальше ничего не пишет!
А можно немного попродробнее - если честно, то не очень понятно, что записывается и куда - можете привести содержимое, которое помещается в таблицы и какие страницы участвуют в статистике?

   
 
 автор: Agronom   (01.07.2005 в 17:37)   письмо автору
 
   для: cheops   (01.07.2005 в 00:19)
 

Я захожу на сайт, на котором размещен скрипт статистики:
http://128.0.0.220/~ROS/index.php это главная страница
В таблицу
pages записывается 1 строка (127 , /~ROS/index.php , 0)
refferer - (127 , http://128.0.0.220/~fotoserver/ , 30.06.2005 13:14:17 , 128.0.1.17 , 127 , 0)
ip - (127 , 128.0.1.17 , 127 , 1 , 1, 0)

Далее при переходах по страницам, загрузке сайта еще раз вообще ничего не записывается, при удалении записей опять записывается 1 строка везде и все :(

   
 
 автор: cheops   (01.07.2005 в 20:21)   письмо автору
 
   для: Agronom   (01.07.2005 в 17:37)
 

А как подключён счётчик и какие ещё страницы имеются на сайте?

   
 
 автор: Agronom   (01.07.2005 в 20:27)   письмо автору
 
   для: cheops   (01.07.2005 в 20:21)
 

Счетчик count.php включается в страницу index.php, а все другие страницы тоже включаются в index.php ниже и имеют вид index.php?nam=name_page
Включаю еще раз код файла count.php

 
<?php
 $ip 
$_SERVER['REMOTE_ADDR'];
 
 
$forward getenv(HTTP_X_FORWARDED_FOR);
 
 if((
$forward != NULL)&&($forward != $_SERVER['REMOTE_ADDR']))
  
$ip $ip."/".$forward;
    
  
$reff urldecode(getenv('HTTP_REFERER'));
  
  
$query "SELECT id_page FROM pages WHERE name='".$_SERVER['REQUEST_URI']."'";
      
$pgs mysql_query($query);
      if (
$pgs)      {
      
               if(
mysql_num_rows($pgs)>0$id_page mysql_result($pgs,0);
               else        {
          
$query "INSERT INTO pages VALUES (0, '".$_SERVER['REQUEST_URI']."', 0)";
          
mysql_query($query);
                   
$id_page mysql_insert_id();
        }
}else echo
"НЕ МОГУ";
$br 0;
if(
strpos($HTTP_USER_AGENT,"MSIE")!==false)
if(
strpos($HTTP_USER_AGENT,"Opera") == null$br 1;
if(
strpos($HTTP_USER_AGENT,"Opera")!==false$br 2;
if(
strpos($HTTP_USER_AGENT,"Netscape")!==false$br 3;

$os 0;

if(
strpos($HTTP_USER_AGENT,"Win")!==false$os 1;
if(
strpos($HTTP_USER_AGENT,"Linux")!==false || strpos($HTTP_USER_AGENT,"Unix")!==false$os 2;
if(
strpos($HTTP_USER_AGENT,"Macintosh")!==false$os 3;

if(
substr($HTTP_USER_AGENT,0,12)== "StackRambler"$os 4;
if(
substr($HTTP_USER_AGENT,0,9)== "Googlebot"$os 5;
if(
substr($HTTP_USER_AGENT,0,6)== "Yandex"$os 6;
if(
substr($HTTP_USER_AGENT,0,5)== "Aport"$os 7;

$srch 0;

if(
strpos($reff,"yandex")) $srch 1;
if(
strpos($reff,"rambler")) $srch 2;
if(
strpos($reff,"google")) $srch 3;
if(
strpos($reff,"aport")) $srch 4;
if(
strpos($reff,"128.0.10.174")) $srch = -1;

$query_main "insert into ip values (0,'$ip',NOW(),$id_page,$br,$os,$srch);";

mysql_query($query_main);

if(
$reff != ""){

$query_reff "insert into refferer values (
0,
'
$reff',
now(),
'
$ip',
$id_page,
$srch);";
mysql_query($query_reff);

}



?>


Возможно тут я допустил какую либо ошибку и не вижу её.

   
 
 автор: cheops   (01.07.2005 в 20:46)   письмо автору
 
   для: Agronom   (01.07.2005 в 20:27)
 

Ага, т.е. сайт построен по сути на одной странице index.php и страницы отличаются друг от друга только параметрами? Если это так, следует настроить счётчик на работу с вашим сайтом. По умолчанию, счётчик считает страницы, отличающиеся только параметрами за одну страницу, например страницы
index.php?id=1
index.php?id=2
будут считаться как одна и та же страница, со всеми вытекающими. Для того, чтобы такие страницы считались как разные необходимо в кодах всего счётчика заменить $_SERVER['PHP_SELF'] на $_SERVER['REQUEST_URI'] - можно просто открыть каждый файл в блокноте и воспользоваться функцией автозамены.

   
 
 автор: Agronom   (01.07.2005 в 20:58)   письмо автору
 
   для: cheops   (01.07.2005 в 20:46)
 

Так я же заменил:

$query = "SELECT id_page FROM pages WHERE name='".$_SERVER['REQUEST_URI']."'"; 
      $pgs = mysql_query($query); 
      if ($pgs)      { 
       
               if(mysql_num_rows($pgs)>0) $id_page = mysql_result($pgs,0); 
               else        { 
          $query = "INSERT INTO pages VALUES (0, '".$_SERVER['REQUEST_URI']."', 0)"; 
          mysql_query($query); 
                   $id_page = mysql_insert_id(); 


Или где-то еще надо?

   
 
 автор: cheops   (01.07.2005 в 21:06)   письмо автору
 
   для: Agronom   (01.07.2005 в 20:58)
 

А да, действительно, не заметил. А посмотрите пожалуйста что выводит код на вашем сервере
<?php
  
echo $_SERVER['REQUEST_URI'];
?>

   
 
 автор: Agronom   (01.07.2005 в 21:13)   письмо автору
 
   для: cheops   (01.07.2005 в 21:06)
 

Соответственно URL страниц:

/~ROS/index.php?nam=main
/~ROS/index.php?nam=info
/~ROS/index.php?nam=zvon
/~ROS/index.php?nam=pesnopeniya

и т.д.

Может дело в базах у меня стоит довольно старые 3.23.53 хотя проблем ниразу не возникало.

   
 
 автор: cheops   (01.07.2005 в 21:26)   письмо автору
 
   для: Agronom   (01.07.2005 в 21:13)
 

Тогда найдите пожалуйста все не обработанные строки
<?php
 mysql_query
($query);
?>

Их всего три и замените их следующими
<?php
 
if(mysql_query($query)) exit(mysql_error());
?>

Что-нибудь выводится в окно браузера?

PS Вряд ли дело в базе данных...

   
 
 автор: Agronom   (01.07.2005 в 21:36)   письмо автору
 
   для: cheops   (01.07.2005 в 21:26)
 

При первом обращении к сайту (базы пустые) отображает только половину сайта (то что до скрипта), видно срабатывает exit
Далее при последующих переходах по ссылкам ничего не выдает... :???:
При этом записывает в таблички по 1 строке и все

   
 
 автор: Agronom   (01.07.2005 в 23:29)   письмо автору
 
   для: Agronom   (01.07.2005 в 21:36)
 

Ура вроде разобрался!
У меня в таблицах оказывается тип полей был неправильно определен, надо int а у меня стоял tinyint !

Извините меня пожалуйста, что доставил Вам столько неудобств! Ошибка была оказывается в другом :)

   
 
 автор: Agronom   (02.07.2005 в 20:53)   письмо автору
 
   для: Agronom   (01.07.2005 в 23:29)
 

Вот я столкнулся со следующей проблемой - Хосты и Хиты:

Вместо отображение страницы мне браузер выдает:


SELECT COUNT(*) FROM ip WHERE searches != 'own_site' AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '0' DAY AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '1' DAY
SELECT COUNT(*) FROM ip WHERE putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '0' DAY AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '1' DAY
SELECT COUNT(DISTINCT ip) FROM ip WHERE systems != 'none' AND systems != 'robot_yandex' AND systems != 'robot_google' AND systems != 'robot_rambler' AND systems != 'robot_aport' AND systems != 'robot_msnbot' AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '0' DAY AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '1' DAY
SELECT COUNT(DISTINCT ip) FROM ip WHERE putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '0' DAY AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '1' DAY

Fatal error: Call to undefined function: puterror() in i:\home\localhost\www\users\ros\admin\count\utils.php on line 70



Как будто не стоит где-то <? ?>
Вот сам код файла utils.php может там где-нибудь ошибка, хотя я его не трогал:


<?php
  
function show_ip_host($begin,$end,$id_page)
{
  
  if(
$id_page == ""$tmp_page "";
  else 
$tmp_page " AND id_page=$id_page";
  
  
$tmp1 "putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
  if(
$begin == 0$tmp2 "";
  else 
$tmp2 " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '".$begin."' DAY";
  
$end $tmp1.$tmp2.$tmp_page;
 

  
$query_hit "SELECT COUNT(*) FROM ip
                WHERE searches != 'own_site' AND "
.$end;
 
  
$query_total_hit "SELECT COUNT(*) FROM ip WHERE ".$end;
 
  
$query_host "SELECT COUNT(DISTINCT ip) FROM ip 
                 WHERE systems != 'none' AND
                       systems != 'robot_yandex' AND
                       systems != 'robot_google' AND
                       systems != 'robot_rambler' AND
                       systems != 'robot_aport' AND
                       systems != 'robot_msnbot' AND
                        "
.$end;
 
  
$query_total_host "SELECT COUNT(DISTINCT ip) FROM ip WHERE ".$end;

  
$pht mysql_query($query_hit);
  
$tot mysql_query($query_total_hit);
  
$hst mysql_query($query_host);
  
$tht mysql_query($query_total_host);
  if(
$pht && $tot && $hst && $tht)
  {
 
    
$hosts     mysql_result($hst0);
    
$totalhostsmysql_result($tht0);
    
$hits      mysql_result($pht0);
    
$totalhist mysql_result($tot0);
    return array(
$hosts$hits$totalhist$totalhosts);
  }
  else
  {
   echo 
$query_hit."<br>";
   echo 
$query_total_hit."<br>";
   echo 
$query_host."<br>";
   echo 
$query_total_host."<br>";
   
puterror("Ошибка при обращении к таблице IP-адресов");
  }
}


сайта
function show_ip_host_hour($begin,$end,$day,$id_page)
{
  
  if(
$id_page == ""$tmp_page "";
  else 
$tmp_page " AND id_page=$id_page";
 
  if(
$begin == 0$tmp2 "";
  else 
$tmp2 " AND putdate >= date_format(date_sub(now(),interval '$day' day),'%Y-%m-%d 00:00:00') + interval '$end' hour";
  
$tmp1 "putdate < date_format(date_sub(now(),interval '$day' day),'%Y-%m-%d 00:00:00') + interval '$begin' hour";
  
$end $tmp1.$tmp2.$tmp_page;
  
  
$query_hits "SELECT COUNT(*) FROM ip WHERE searches!='own_site' AND ".$end;
  
  
$query_total "SELECT COUNT(*) FROM ip 
                  WHERE "
.$end;

  
$query_host "SELECT COUNT(DISTINCT ip) FROM ip 
                 WHERE systems != 'none' AND
                       systems != 'robot_yandex' AND
                       systems != 'robot_google' AND
                       systems != 'robot_rambler' AND
                       systems != 'robot_aport' AND
                       systems != 'robot_msnbot' AND
                        "
.$end;

  
$total_host "SELECT COUNT(DISTINCT ip) FROM ip 
                 WHERE "
.$end;
  
  
$pht mysql_query($query_hits);
  
$tot mysql_query($query_total);
  
$hst mysql_query($query_host);
  
$tht mysql_query($total_host);
  if(
$pht && $tot && $hst && $tht)
  {
   
    
$hosts     mysql_result($hst0);
    
$totalhostsmysql_result($tht0);
    
$hits      mysql_result($pht0);
    
$totalhist mysql_result($tot0);
    return array(
$hits$hosts$totalhist$totalhosts);
  } else 
puterror("Ошибка при обращении к таблице IP-адресов");
}
function 
utf8_win($s)
{
    
$s=str_replace("\xD0\xB0","а",$s);  $s=str_replace("\xD0\x90","А",$s);
    
$s=str_replace("\xD0\xB1","б",$s);  $s=str_replace("\xD0\x91","Б",$s);
    
$s=str_replace("\xD0\xB2","в",$s);  $s=str_replace("\xD0\x92","В",$s);
    
$s=str_replace("\xD0\xB3","г",$s);  $s=str_replace("\xD0\x93","Г",$s);
    
$s=str_replace("\xD0\xB4","д",$s);  $s=str_replace("\xD0\x94","Д",$s);
    
$s=str_replace("\xD0\xB5","е",$s);  $s=str_replace("\xD0\x95","Е",$s);
    
$s=str_replace("\xD1\x91","ё",$s);  $s=str_replace("\xD0\x81","Ё",$s);
    
$s=str_replace("\xD0\xB6","ж",$s);  $s=str_replace("\xD0\x96","Ж",$s);
    
$s=str_replace("\xD0\xB7","з",$s);  $s=str_replace("\xD0\x97","З",$s);
    
$s=str_replace("\xD0\xB8","и",$s);  $s=str_replace("\xD0\x98","И",$s);
    
$s=str_replace("\xD0\xB9","й",$s);  $s=str_replace("\xD0\x99","Й",$s);
    
$s=str_replace("\xD0\xBA","к",$s);  $s=str_replace("\xD0\x9A","К",$s);
    
$s=str_replace("\xD0\xBB","л",$s);  $s=str_replace("\xD0\x9B","Л",$s);
    
$s=str_replace("\xD0\xBC","м",$s);  $s=str_replace("\xD0\x9C","М",$s);
    
$s=str_replace("\xD0\xBD","н",$s);  $s=str_replace("\xD0\x9D","Н",$s);
    
$s=str_replace("\xD0\xBE","о",$s);  $s=str_replace("\xD0\x9E","О",$s);
    
$s=str_replace("\xD0\xBF","п",$s);  $s=str_replace("\xD0\x9F","П",$s);
    
$s=str_replace("\xD1\x80","р",$s);  $s=str_replace("\xD0\xA0","Р",$s);
    
$s=str_replace("\xD1\x81","с",$s);  $s=str_replace("\xD0\xA1","С",$s);
    
$s=str_replace("\xD1\x82","т",$s);  $s=str_replace("\xD0\xA2","Т",$s);
    
$s=str_replace("\xD1\x83","у",$s);  $s=str_replace("\xD0\xA3","У",$s);
    
$s=str_replace("\xD1\x84","ф",$s);  $s=str_replace("\xD0\xA4","Ф",$s);
    
$s=str_replace("\xD1\x85","х",$s);  $s=str_replace("\xD0\xA5","Х",$s);
    
$s=str_replace("\xD1\x86","ц",$s);  $s=str_replace("\xD0\xA6","Ц",$s);
    
$s=str_replace("\xD1\x87","ч",$s);  $s=str_replace("\xD0\xA7","Ч",$s);
    
$s=str_replace("\xD1\x88","ш",$s);  $s=str_replace("\xD0\xA8","Ш",$s);
    
$s=str_replace("\xD1\x89","щ",$s);  $s=str_replace("\xD0\xA9","Щ",$s);
    
$s=str_replace("\xD1\x8A","ъ",$s);  $s=str_replace("\xD0\xAA","Ъ",$s);
    
$s=str_replace("\xD1\x8B","ы",$s);  $s=str_replace("\xD0\xAB","Ы",$s);
    
$s=str_replace("\xD1\x8C","ь",$s);  $s=str_replace("\xD0\xAC","Ь",$s);
    
$s=str_replace("\xD1\x8D","э",$s);  $s=str_replace("\xD0\xAD","Э",$s);
    
$s=str_replace("\xD1\x8E","ю",$s);  $s=str_replace("\xD0\xAE","Ю",$s);
    
$s=str_replace("\xD1\x8F","я",$s);  $s=str_replace("\xD0\xAF","Я",$s);
    return 
$s;
}

function 
search($begin,$end,$id_page)
{
 
  if(
$id_page == ""$tmp "";
  else 
$tmp " AND id_page = $id_page";

  if(
$begin == 0$tmp2 "";
  else 
$tmp2 " AND putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$begin' DAY";
  
$tmp1 "AND putdate < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL '$end' DAY";
  
  
$begin "SELECT COUNT(*) FROM refferer WHERE searches =";
  
$end $tmp1.$tmp2.$tmp;
  
$query['ynd'] = $begin."'yandex' ".$end;
  
$query['ram'] = $begin."'rambler' ".$end;
  
$query['gog'] = $begin."'google' ".$end;
  
$query['apt'] = $begin."'aport' ".$end;
  
$query['mal'] = $begin."'mail' ".$end;
  
$query['msn'] = $begin."'msn' ".$end;
  
  foreach(
$query as $search => $value)
  {
    
$hit["$search"] = mysql_query($value);
    if(!
$hit["$search"]) puterror("Ошибка при обращении к таблице IP-адресов");
    
$hits["$search"] = mysql_result($hit["$search"], 0);
  }
  
$total array_sum($hits);
  
  if(
$total == 0$total 1;
  return array(
$hits['ram'], $hits['ynd'], $hits['apt'], $hits['gog'], $hits['mal'], $hits['msn'], $total);
}

function 
search_hour($begin,$end,$day,$id_page)
{
  
  if(
$id_page == ""$tmp "";
  else 
$tmp " AND id_page = $id_page";
 
  if(
$begin == 0$tmp2 "";
  else 
$tmp2 " AND putdate>=date_add(date_format(date_sub(now(),interval '$day' day),'%Y-%m-%d 00:00:00'),interval '$end' hour)";
  
$tmp1 " AND putdate<date_add(date_format(date_sub(now(),interval '$day' day),'%Y-%m-%d 00:00:00'),interval '$begin' hour)";
 
  
$begin "SELECT COUNT(*) FROM refferer WHERE searches =";
  
$end $tmp1.$tmp2.$tmp;
  
$query['ynd'] = $begin."'yandex' ".$end;
  
$query['ram'] = $begin."'rambler' ".$end;
  
$query['gog'] = $begin."'google' ".$end;
  
$query['apt'] = $begin."'aport' ".$end;
  
$query['mal'] = $begin."'mail' ".$end;
  
$query['msn'] = $begin."'msn' ".$end;
  
// Выполняем SQL-запросы
  
foreach($query as $search => $value)
  {
    
$hit["$search"] = mysql_query($value);
    if(!
$hit["$search"]) puterror("Ошибка при обращении к таблице IP-адресов");
    
$hits["$search"] = mysql_result($hit["$search"], 0);
  }
  
$total array_sum($hits);
  
// Во избежание деления на 0 проверяем значение общего $total
  
if($total == 0$total 1;
  return array(
$hits['ram'], $hits['ynd'], $hits['apt'], $hits['gog'], $hits['mal'], $hits['msn'], $total);
}
?>

   
 
 автор: cheops   (02.07.2005 в 21:35)   письмо автору
 
   для: Agronom   (02.07.2005 в 20:53)
 

А не может быть опять проблем с базой данных? Не могли бы вы привести структуру таблицы ip в базе счётчика?

   
 
 автор: Agronom   (02.07.2005 в 22:25)   письмо автору
 
   для: cheops   (02.07.2005 в 21:35)
 

По крайней мере записывается теперь все хорошо.
Вот структура таблицы ip


CREATE TABLE 'ip' (
  'id_ip' int(32) NOT NULL auto_increment,
  'ip' text,
  'putdate' datetime default NULL,
  'id_page' int(10) default NULL,
  'browser' text,
  'system' text,
  'search' text,
  PRIMARY KEY  ('id_ip')
) TYPE=MyISAM

   
 
 автор: Agronom   (03.07.2005 в 20:52)   письмо автору
 
   для: Agronom   (02.07.2005 в 22:25)
 

Конечно же дело в моей таблице!

Оказывается в новой версии поменялись названия полей
system > systemS
browser > browserS
search > searchES

Эх моя невнимательность ...

   
 
 автор: Agronom   (07.07.2005 в 12:25)   письмо автору
 
   для: Agronom   (03.07.2005 в 20:52)
 

Вот я дошел до раздела "Точки входа" на что у меня отображаются страницы, но вверху браузер выдает ошибку:

Warning: Invalid argument supplied for foreach() in i:\home\localhost\www\users\ros\admin\count\enterpoint.php on line 133


Что бы это могло быть, помогите пожалуйста разобраться.
Заранее благодарен.

   
 
 автор: cheops   (07.07.2005 в 12:39)   письмо автору
 
   для: Agronom   (07.07.2005 в 12:25)
 

Именно в 133 строке - у вас файл изменён? Прикрепите его пожалуйста к сообщению.

   
 
 автор: Loki   (07.07.2005 в 12:46)   письмо автору
 
   для: Agronom   (07.07.2005 в 12:25)
 

Попробуйте перед циклом вывести на экран содержимое массивов $points и $names:

print_r ($points);
print_r ($names);

   
 
 автор: Loki   (07.07.2005 в 12:56)   письмо автору
 
   для: Loki   (07.07.2005 в 12:46)
 

Кажись вспомнил: такая бага вроде была когда небыло ни одного захода за отчетный период. У себя я правил, а у вас, похоже, осталась старая версия. У меня сейчас этот фрагмент выглядит так:

<?
if (isset($pages))
{
$points=array_count_values($pages);    
//Сортируем по количесву входов в обратном порядке
 
arsort($points);  
//Выводим таблицу где будет название страницы и количество заходов через нее
foreach ($points as $id=>$hits)
 { 
  foreach (
$names as $id2=>$name)
   {  
    if (
$id==$id2
     { 
      print 
"<tr><td><a href=http://".$_SERVER["SERVER_NAME"].$names[$id]['name']." target=_blank>http://".$_SERVER["SERVER_NAME"].$names[$id]['name']." </a></td><td>".$hits."</td><tr>"
     }
   }
 }
}
?>

   
Rambler's Top100
вверх

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