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

Форум PHP

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

 

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

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

тема: Power counter и названия страниц
 
 автор: Loki   (21.03.2005 в 17:31)   письмо автору
 
 

Можно ли сделать чтобы с системе сбора статистики сохранялись title страниц? А то анализировать результаты довольно сложно.
И еще. У меня учитываются отдельно ссылки вида /folder/ и /folder/index.php
Как объяснить скрипту что это одно и тоже?

   
 
 автор: cheops   (21.03.2005 в 23:20)   письмо автору
 
   для: Loki   (21.03.2005 в 17:31)
 

>Можно ли сделать чтобы с системе сбора статистики
>сохранялись title страниц? А то анализировать результаты
>довольно сложно.
В принципе можно, но для этого придётся название помещать в переменную, так как PHP, в отличие от JavaScript не сможет вытащить название из страницы.
>И еще. У меня учитываются отдельно ссылки вида /folder/ и
>/folder/index.php
>Как объяснить скрипту что это одно и тоже?
Для этого следует файле-счётчике count.php в самом начале поставить проверку вида
<?php
  
if(substr($_SERVER['PHP_SELF'],strlen($_SERVER['PHP_SELF'])-1) == "/"$_SERVER['PHP_SELF'] .= "index.php";
?>

т.е. проверить заканчивается ли URL на / и если это так добавить к нему индексный файл.

   
 
 автор: Loki   (22.03.2005 в 09:56)   письмо автору
 
   для: cheops   (21.03.2005 в 23:20)
 

>В принципе можно, но для этого придётся название помещать в переменную, так
>как PHP, в отличие от JavaScript не сможет вытащить название из страницы.
В общем-то это вполне реально. Посоветуйте, как это лучше реализовать? Можно писать названия в базу вместо путей, но я себе с трудом представляю как скрипт на это отреагирует. Можно сделать в базе дополнительный столбец. Полагаю, при этом придется редактировать все запросы к этой таблице? Можно завести отдельную таблицу.
Как лучше сделать?

   
 
 автор: cheops   (22.03.2005 в 10:08)   письмо автору
 
   для: Loki   (22.03.2005 в 09:56)
 

>В общем-то это вполне реально. Посоветуйте, как это лучше
>реализовать? Можно писать названия в базу вместо путей, но я
>себе с трудом представляю как скрипт на это отреагирует.
Вообще это идея... хотя нет, потом к названию страницы прибавиться доменное имя... но вообще можно будет подумать в этом направлении...

>Можно сделать в базе дополнительный столбец. Полагаю, при
>этом придется редактировать все запросы к этой таблице?
>Можно завести отдельную таблицу.
>Как лучше сделать?
Да можно будет добавить столбец, на самом деле много ничего исправлять не придётся. Если вы добавите имя страницы в таблицу ip, то придётся исправить SQL-запрос в count.php в строке 72, где происходит вставка (INSERT) данных в таблицу.
В админе нужно будет найти все конструкции вида
http://".$_SERVER["SERVER_NAME"].$pag['name']

и заменить их на
$pag['title']

title - здесь имя столбца для хранения названия страницы.

PS Впрочем можно и по первому варианту идти - хранить названия страниц в поле name таблицы count, при этом нужно будет в админе убрать все http://".$_SERVER["SERVER_NAME"]

   
 
 автор: Loki   (22.03.2005 в 10:44)   письмо автору
 
   для: cheops   (22.03.2005 в 10:08)
 

Пришлось еще подправить sql запрос и признаки группировки.
Теперь выглядит следующим образом:

  <?
    $query_hits 
"SELECT ip.id_page,
                          ip.title,
                          pages.name,
                          count(ip.id_ip) AS num,
                          MAX(ip.putdate) AS putdate
                   FROM ip, pages
                   WHERE ip.id_page = pages.id_page
                   GROUP BY ip.title 
                   ORDER BY 
$orderstr 
                   LIMIT 
$begin$pnumber";
    
$pgs mysql_query($query_hits);
    if(!
$pgsputerror("Ошибка при обращении к таблице страниц");
    while(
$pag mysql_fetch_array($pgs))
    {
      echo 
"<tr>
              <td><a 

href=main.php?id_page="
.$pag['id_page'].">".$pag['title']."</a></td>
              <td>"
.$pag['num']."</td>
              <td>"
.$pag['putdate']."</td>
              <td><a 

href=http://"
.$_SERVER["SERVER_NAME"].$pag['name'].">Перейти</a></td>
              <td><a href=delpage.php?id_page="
.$pag['id_page'].

title='Удаление устаревших(мёртвых) страниц из системы 

подсчёта'>Удалить</a></td>
           </tr>"
;
    }
  
?>

Не уверен что все до конца правильно (в частности, сомнения относительно того, что произойдет при нажатии кнопки удалить, но это только сомнения:).
Раз уж на то пошло, то при просмотре статистики по конкретной странице имеет смысл выводить название этой страницы, а то сейчас это неочевидно.
Столько всего хочется подправить, но страшно - завтра выпустите новую версию, и как мне все эти новшества туда переносить?:)

   
 
 автор: Loki   (22.03.2005 в 13:45)   письмо автору
 
   для: cheops   (22.03.2005 в 10:08)
 

удалено

   
 
 автор: Loki   (22.03.2005 в 16:23)   письмо автору
 
   для: Loki   (22.03.2005 в 13:45)
 

Итак. Сделал следующее:
добавился файл pages.php следующего содержания:

<?php

  $title
='Старницы просмотренные с IP адреса';
  
$pageinfo='На этой странице вы можете видеть страницы просмотренные с IP-адреса.'
  
$menu=3;  
  
$helppage='';
  
// Заголовок страницы
  
include "topcounter.php";
  if (!isset(
$nav)) $nav=0;
   if (
$nav==0
{
$hit="count(id_ip) AS hits,";
$hit1="GROUP BY title";}
  else 
{
$hit="";
 
$hit1="";}
print 
"<a href='pages.php";
if (
$nav==0) print "?nav=1";
else print 
"?nav=0";
print 
"&ip=$ip'>Навигация/Статистика</a>";

?>

    <table border="1" cellpadding="4" cellspacing="0" bordercolordark="white" 

bordercolorlight="gray" align="center">   
       <tr><td><p>Страница</td>
<? 
if ($nav==0) print "<td><p>Просмотров</p></td>";
?>
<td><p>Последнее обращение</td></tr>
<?
  $query_pages
="SELECT title,
                       
$hit
                       putdate
                       FROM ip
                       WHERE 
                       putdate >= DATE_FORMAT( NOW( ) , '%Y-%m-%d 23:59:59' ) - 

INTERVAL 1 DAY
                       AND ip = '
$ip'
                       
$hit1
                       ORDER BY putdate DESC"

  
$pags mysql_query($query_pages);
  if(!
$pagsputerror("Ошибка при обращении к таблице IP-адресов...");

 while(
$pag mysql_fetch_array($pags))
{
 echo 
"<tr>
        <td>"
.$pag['title']."</td>";
if (
$nav==0) print "<td>".$pag['hits']."</td>";
 echo 
"<td>".$pag['putdate']."</td></tr>";
}
  
?>
</table>
<? 
 
include "bottomcounter.php";   
?>
  


вызывается со страницы adresses.php так:

pages.php?ip=параметр

Что видим: сначала какие страницы и сколько раз посетил человек. При клике на переключателе "Навигация/Статистика " мы видим каким путем человек следовал по сайту и, соответственно, делаем выводы об удачности навигации.
Жду критики.
...и его забросали цветами в горшках...

   
 
 автор: cheops   (22.03.2005 в 22:07)   письмо автору
 
   для: Loki   (22.03.2005 в 16:23)
 

Если работает, критики никакой быть не может :)))

   
 
 автор: Loki   (23.03.2005 в 11:42)   письмо автору
 
   для: cheops   (22.03.2005 в 22:07)
 

Дыкть... распирает же от гордости:)
Кстати, проанализировав пути движения людей по сайту сделал определенные выводы относительно навигации. Скрипт оказался даже полезнее чем я ожидал!

   
 
 автор: Loki   (25.03.2005 в 09:46)   письмо автору
 
   для: cheops   (22.03.2005 в 10:08)
 

Нужен совет: главная страница счетчика формируется на основе количества записей в таблице pages, а названия страниц мы берем из таблицы ip. Таким образом, "мертывые" ссылки (не имевшие переменной title) не отображаются, но при расчете количества страниц учавствуют. Мне видится два возможных решения: перенос столбца с названиями страниц в таблицу pages (в этом случае, как мне кажется, можно будет выводить и "мертвые ссылки тоже") и второй вариант - при расчете страниц использовать только количество уникальных значений из столбца title таблицы ip, но вот как реализовать подобный запрос, я не знаю.
Что посоветуете вы?

   
 
 автор: cheops   (25.03.2005 в 10:00)   письмо автору
 
   для: Loki   (25.03.2005 в 09:46)
 

1) Тогда нужно курочить таблицу pages - добавить новый столбец и исправить соотвествующим образом запрос в строке 36 файла count.php. Т.е. добавить добавление ссылки туда.
2) Количество уникальных столбцов можно получить при помощи ключевого слова DISTINCT, но не советую этот путь, мне вообще не нравится идя хранить title в таблице ip - так как эта таблица склонна к непомерному разрастанию.

   
 
 автор: Loki   (25.03.2005 в 10:32)   письмо автору
 
   для: cheops   (25.03.2005 в 10:00)
 

>мне вообще не нравится идя хранить title в таблице ip
а ведь это была ваша идея, озвученная всего на несколько постов выше:)

   
 
 автор: Loki   (25.03.2005 в 11:43)   письмо автору
 
   для: Loki   (25.03.2005 в 10:32)
 

Перенес поле title в таблицу pages
выкладываю обновленный файл pages.php
В новой версии ему можно передавать дополнительно параметры begin и end

   
 
 автор: Loki   (25.03.2005 в 11:55)   письмо автору
 
   для: Loki   (25.03.2005 в 11:43)
 

chops, я внес в счетчик довольно много мелких изменений, удобных на мой взгляд. Нужны ли они кому-то, или вы потом выпустите более новую версию?

   
 
 автор: cheops   (25.03.2005 в 21:53)   письмо автору
 
   для: Loki   (25.03.2005 в 11:55)
 

Если бы вы прислали бы их мне на simdyanov@softtime.ru, благодарность моя не имела бы границ, как в прочем и многочисленных пользователей этой системы (если надумаете укажите пожалуйста так же ваши ФИО и e-mail - мы их вставим в шапку файлов, как того требует BSD-лицензия).

   
Rambler's Top100
вверх

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