Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Анализ посещаемости сайта рефералами

Источник: realcoding.net

Небольшое вступление.

Реферал - это url, с которого посетитель приходит на ваш сайт. К примеру, на странице http://www.site.com/links.html есть ссылка на ваш сайт. Если человек нажмет на нее, то он попадет на ваш сайт. Тогда url http://www.site.com/links.html будет вашим рефералом.

Не спорю, что у любой уважающей себя CMS (content management system, система управления содержанием) есть модули (боты), которые отвечают за сбор статистики. Для тех же, у кого на сайте не стоит CMS, есть возможность попрактиковаться в написании и конфигурировании собственного мини-модуля статистики.

Его можно реализовать в небольшом скрипте, который будет отслеживать нажатия на ссылки, записывать их URLы в базу данных (в нашем примере это MySQL) и генерировать статистику в виде графика. Да и поможет разобраться, как это все работает на самом деле, не копаясь в модулях сторонних разработчиков.

Нам потребуется три файла:

  • referer.sql (запрос к БД на создание таблицы, где будет храниться статистика);
  • referer.php (сам скрипт);
  • viewreferer.php (скрипт для просмотра статистики).

Для создания таблицы referer необходимо выполнить запрос referer.sql. Вот его содержание:

CREATE TABLE referer (
      
url varchar(100) NOT NULL,
      
hits int(10) DEFAULT 0 NOT NULL,
      
PRIMARY KEY (url)
);

Теперь займемся файлом referer.php. Зададим значения переменным:

$hostname = localhost; // предоставляется вашим хостером. В большинстве случаев это - localhost (иногда бывает 127.0.0.1)
$username = your-username; // имя пользователя - ваш логин для подключения к базе данных
$password = your-password; // вы должны получить его у своего хостинг-провайдера
$userstable = referer; // таблица, в которой будут храниться результаты работы нашего скрипта
$dbName = your-db-name; // имя БД, в которой содержится таблица referer

В переменную $ref заносим информацию о ссылке-реферере:

$ref = strtolower($HTTP_REFERER);

С помощью функции strtolower переводим значение переменной $ref в нижний регистр. Это делается для того, чтобы ссылки типа www.site.com, www.Site.com или WWW.SITE.COM были одинакового регистра.

Если переменная $ref не пустая,

if(!empty($ref)){

то подключаемся к БД:

mysql_connect($hostname,$username, $password) or die(mysql_error());
mysql_select_db($dbName) or die(mysql_error());

Производим выборку из столбца url, значение которого совпадает с $ref

$query = select * from $userstable where url = $ref;

Переменная $rows содержит количество совпадений

$result = mysql_query($query);
$rows = mysql_num_rows($result);

Если же не найдено ни одной записи (т.е c такого urla еще не было рефералов)

if ($rows == 0){

устанавливаем значение переменной $hits в 1

$hits = 1;

А далее просто выполняем вставку urlа и переменной $hits в нашу таблицу (referer):

$query1 = insert into $userstable (url,hits) values($ref,$hits);

Выполняем запрос:

mysql_query($query1);
}

Если же были найдены записи по данному url (т.е c этого urla уже заходили рефералы),

else {
$hitquery = select hits from $userstable where url = $ref;
$result2 = mysql_query($hitquery);
$row = mysql_fetch_array($result2);
$hits = $row[hits];

Инкрементируем значение переменной $hits (увеличиваем на 1)

$query2 = update $userstable set hits = hits+1 where url = $ref;
mysql_query($query2);>
}
}

В ту страницу сайта, для которой необходима статистика по рефералам (как правило - это главная страница, index.php), необходимо вставить ссылку на скрипт referer.php. Предполагается, что файлы referer.php и index.php находятся в одной папке.

include(referer.php);

На этом и заканчивается содержимое скрипта referer.php. Но, как я написал выше, есть также и графическая статистика. Это будет наш третий файл - viewreferer.php.

Задаем переменные для подключения к БД:

$hostname = localhost;
$username = your-username;
$password = your-password;
$userstable = referer;
$dbName = your-db-name;

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

$color10 = #FFFF00;
$color20 = #FF0000;
$color50 = #008000;
$color1k = #0000FF;
$color2k = #0000A0;
$color5k = #000040;

Опять соединяемся с БД:

mysql_connect($hostname, $username,$password) or die(mysql_error());
mysql_select_db($dbName) or die(mysql_error());

Делаем выборку из БД и упорядочиваем ее по убыванию (desc) количества хитов (столбец hits).

$query = select * from $userstable order by hits desc;
$result = mysql_query($query);

Подсчитываем количество строк с уникальными рефералами (это попросту число строк в нашей таблице referer).

$number = mysql_num_rows($result) or die (mysql_error());
$i = 0;

Если же не найдено ни одной записи (таблица пуста), то выводим сообщение:

if ($number == 0) {
echo
<center><p><b>Сведений о рефералах не обнаружено!</b></center>;
}

Если же рефералы есть:

elseif ($number >= 1) {
while (
$i < $number){
$row = mysql_fetch_array($result);
$hits = $row[hits];
$ref = $row[url];

Выбираем цвет для текущего значения hits:

if ($hits <10){
$color = $color10;
}
elseif ((
$hits >= 10 )
and (
$hits < 20)){
$color = $color20;
}
elseif ((
$hits >= 20 )
and (
$hits < 50)){
$color = $color50;
}
elseif ((
$hits >= 50 )
and (
$hits < 100)){
$color = $color1k;
}
elseif ((
$hits >= 100 )
and (
$hits < 200)){
$color = $color2k;
}
elseif (
$hits >= 200){
$color = $color5k;
}

Табличка с графиком строится как результат MySQL-запроса. В первой колонке содержится название urlа, а во второй - количество хитов, а в третей - цветная полоса.

echo <div align=left>;
echo
<table cols=3 border=0 width=100%><tr><td align=left width=400><b><a href=$ref>$ref</a></b></td>;
echo
<td align=right width=60><b>$hits</b></td>;
echo
<td align=left width=$hits bgcolor=$color></td></tr>;

$i++;
echo
</table>n;
}
}

Итак, все готово! Теперь можно периодически вызывать скрипт viewreferer.php и смотреть графическую статистику переходов на ваш сайт.



Похожие статьи:
- SSI и общий стиль
- Отправка файлов аттачем
- Как через форму положить файл на сервер
- Поиграем с PHP - "Поле чудес"
- Модульное программирование на PHP или как написать маленький портал
- JavaScript Selections (работа с выделениями)
- Системы голосований на РНР
- На линии огня
- Регулярные выражения используются для сложного манипулирования строками в PHP
- Чем править фото: 5 бесплатных редакторов
- Битва со списками или применение классов для вывода списков в PHP
- Оптимизация производительности баз данных для Web
- MySQL — “зеленым” админам


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]