Adatum
Апр
12
2013

Пишем счётчик для сайта на sqlite

Как написать счётчик для сайта
Сегодня разберем пример как написать простой счётчик посещений для сайта на php.

Демо Скачать

Код самого счётчика. Этот код должен быть на каждой странице которую хотим учитывать.
Мы будем записывать в базу ip посетителя, дату и время его захода, от куда он перешёл на нашу страницу и соответственно страницу посещения.

<!-- Начало кода счётчика -->
<style>
.example1 {
    padding-top:0px;
    width:88px;
    padding-left:0px;
    height:31px;
    background-image:url("./hit.gif");
    color:#ffaa01;
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px; 
	
}
</style>
<div class="example1" title="Adatum: показано всего просмотров/просмотров страницы, уникальных просмотров/уникальных просмотров страницы">
<?php
$versionclient = $_SERVER['HTTP_USER_AGENT'];
$name = $_SERVER['REQUEST_URI'];
$user = $_SERVER['REMOTE_ADDR'];
$site = $_SERVER['HTTP_REFERER'];
$da = date("d.m.Y");
$ho = date("h")+6;
$min = date(":i:s");
$tim = $ho.$min;
$db = new PDO('sqlite:./database/cont.sqlite'); 
$db->exec('INSERT INTO  cont (versionclient,name,user,site,date,time) VALUES ("'.$versionclient.'","'.$name.'","'.$user.'","'.$site.'","'.$da.'","'.$tim.'")');
//Всего просмотров:
$player_stat = $db->query("SELECT COUNT(id) FROM cont")->fetchColumn();
echo "&nbsp;".$player_stat." / ";
//Всего просмотров страницы:
$player = $db->query('SELECT COUNT(id) FROM cont WHERE name="'.$name.'"')->fetchColumn();
echo $player."<br>";
//Уникальных просмотров:
$player_stat = $db->query("SELECT COUNT(distinct user) FROM cont")->fetchColumn();
echo "&nbsp;".$player_stat." / ";
//Уникальных просмотров страницы:
$player_stat = $db->query('SELECT COUNT(distinct user) FROM cont WHERE name="'.$name.'"')->fetchColumn();
echo $player_stat."<br>";
?>
</div>
	<!-- Конц кода счётчика -->

Полный код файла index.php

<div style=" margin:0 auto;   width:800px;   ">
<h1>Пушкин, Александр Сергеевич</h1>
Шесть лет Пушкин провёл в Царскосельском лицее, открытом 19 октября 1811 года. Здесь юный поэт пережил события Отечественной войны 1812 года. 
Здесь впервые открылся и был высоко оценён его поэтический дар. Воспоминания о годах, проведённых в Лицее, о лицейском братстве навсегда остались в душе поэта[10].
В лицейский период Пушкиным было создано много стихотворных произведений. Его вдохновляли французские поэты XVII—XVIII веков, с творчеством которых он познакомился 
в детстве, читая книги из библиотеки отца. Любимыми авторами молодого Пушкина были Вольтер и Парни. В его ранней лирике соединились традиции французского и русского классицизма.
 Учителями Пушкина-поэта стали Батюшков, признанный мастер «лёгкой поэзии», и Жуковский, глава отечественного романтизма. Пушкинская лирика периода 1813—1815 
 годов пронизана мотивами быстротечности жизни, которая диктовала жажду наслаждения радостями бытия. С 1816 года, вслед за Жуковским, он обращается к элегиям, 
 где развивает характерные для этого жанра мотивы: неразделённой любви, ухода молодости, угасания души. Лирика Пушкина ещё подражательна, полна литературных 
 условностей и штампов, тем не менее уже тогда начинающий поэт выбирает свой, особый путь[11]. Не замыкаясь на поэзии камерной, Пушкин обращался к темам более 
 сложным, общественно-значимым. «Воспоминания в Царском Селе» (1814), заслужившие одобрение Державина, — в начале 1815 года Пушкин читал стихотворение в его присутствии, 
 посвящено событиям Отечественной войны 1812 года[12]. Стихотворение было опубликовано в 1815 году в журнале «Российский музеум» за полной подписью автора. А в пушкинском 
 послании «Лицинию» критически изображена современная жизнь России, где в образе «любимца деспота» выведен Аракчеев. Уже в начале своего творческого пути он проявлял интерес 
 к русским писателям-сатирикам прошлого века. Влияние Фонвизина чувствуется в сатирической поэме Пушкина «Тень Фонвизина» (1815); с творчеством Радищева связаны 
 «Бова» (1814) и «Безверие»[13].
В июле 1814 года Пушкин впервые выступил в печати в издававшемся в Москве журнале «Вестник Европы». В тринадцатом номере было напечатано стихотворение «К другу-стихотворцу»,
 подписанное псевдонимом Александр Н.к.ш.п.[K 2][8]:60.
Ещё будучи воспитанником Лицея, Пушкин вошёл в литературное общество «Арзамас», выступавшее против рутины и архаики в литературном деле, и принял действенное участие в полемике
 с объединением «Беседа любителей русского слова», отстаивавшим каноны классицизма прошлого века. Привлечённый творчеством наиболее ярких представителей нового литературного направления,
 Пушкин испытывал в то время сильное влияние поэзии Батюшкова, Жуковского, Давыдова[14]. Последний поначалу импонировал Пушкину темой бравого вояки, а после тем, что сам поэт называл 
 «кручением стиха» — резкими сменами настроения, экспрессией, неожиданным соединением образов. Позднее Пушкин говорил, что, подражая в молодости Давыдову, «усвоил себе его манеру навсегда»[15].
[править]Молодость

<br>
<a href="log.php">Посмотреть посещаемость </a>
<br>
<br>

<!-- Начало кода счётчика -->
<style>
.example1 {
    padding-top:0px;
    width:88px;
    padding-left:0px;
    height:31px;
    background-image:url("./hit.gif");
    color:#ffaa01;
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px; 
	
}
</style>
<div class="example1" title="Adatum: показано всего просмотров/просмотров страницы, уникальных просмотров/уникальных просмотров страницы">
<?php
$versionclient = $_SERVER['HTTP_USER_AGENT'];
//$name = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$name = $_SERVER['REQUEST_URI'];
$user = $_SERVER['REMOTE_ADDR'];
$site = $_SERVER['HTTP_REFERER'];
$da = date("d.m.Y");
$ho = date("h")+6;
$min = date(":i:s");
$tim = $ho.$min;
$db = new PDO('sqlite:./database/cont.sqlite'); 
$db->exec('INSERT INTO  cont (versionclient,name,user,site,date,time) VALUES ("'.$versionclient.'","'.$name.'","'.$user.'","'.$site.'","'.$da.'","'.$tim.'")');
//Всего просмотров:
$player_stat = $db->query("SELECT COUNT(id) FROM cont")->fetchColumn();
echo "&nbsp;".$player_stat." / ";
//Всего просмотров страницы:
$player = $db->query('SELECT COUNT(id) FROM cont WHERE name="'.$name.'"')->fetchColumn();
echo $player."<br>";
//Уникальных просмотров:
$player_stat = $db->query("SELECT COUNT(distinct user) FROM cont")->fetchColumn();
echo "&nbsp;".$player_stat." / ";
//Уникальных просмотров страницы:
$player_stat = $db->query('SELECT COUNT(distinct user) FROM cont WHERE name="'.$name.'"')->fetchColumn();
echo $player_stat."<br>";
?>
</div>
	<!-- Конц кода счётчика -->

</div>

cont2

Статистика посещаемости

На страницу статистики посещаемости мы будем выводить все данные которые получили от клиента в удобочитаемом виде.
Будем использовать плагин javaScript jquery.datatables.min.js, автора Allan Jardine (www.sprymedia.co.uk).
Более подробные инструкции по плагину можно найти на странице автора. Но думаю ис примера вам будет все понятно.
Полный код файла log.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
<head>
<title>Построение пользовательских интерфейсов на основе библиотеки jQuery</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.datatables.min.js"></script>

<style type="text/css">

.dataTables_wrapper {
	position: relative;
	min-height: 302px;
	* height: 302px;
	clear: both;
}

.dataTables_processing {
	position: absolute;
	top: 39px;
	left: 50%;
	width: 900px;
	margin-left: -260px;
	padding: 20px;
	background-color: #EFFFBD;
	border: 1px solid #E3FE57;
	text-align: center;
}

.dataTables_length {
	width: 40%;
	float: left;
}

.dataTables_filter {
	width: 50%;
	float: right;
	text-align: right;
}

.dataTables_info {
	width: 60%;
	float: left;
}

.dataTables_paginate {
	width: 44px;
	* width: 50px;
	float: right;
	text-align: right;
}


table.display {
	margin: 0 auto;
	width: 100%;
    font-family: "Trebuchet MS", Tahoma, Verdana, sans-serif;
    font-size: 8pt;
}

table.display thead th {
	padding: 3px 10px;
	border-bottom: 1px solid black;
	font-weight: bold;
	cursor: pointer;
	* cursor: hand;
}

table.display tfoot th {
	padding: 3px 10px;
	border-top: 1px solid black;
	font-weight: bold;
}

table.display tr.heading2 td {
	border-bottom: 1px solid #aaa;
}

table.display td {
	padding: 3px 10px;
	border-bottom: 1px dotted #aaa;
}

table.display td.center {
	text-align: center;
	border-bottom: 1px dotted #aaa;
}


</style>
</head>
<body>
<div style=" margin:0 auto;   width:900px;   ">
<h1>Статистика</h1>

<table id="example" class="display">
	<thead>
		<tr>
    <th>Дата</th>
	<th>Время</th>
	<th>Адрес перехода</th>
	<th>Страница</th>
	<th>Версия клиента</th>
	<th>Ip пользователя</th>
  </tr>
	</thead>
	<tbody>

  
<?php
$db = new PDO('sqlite:./database/cont.sqlite'); 
$st = $db->query('SELECT * FROM cont');$results = $st->fetchAll(); foreach ($results as $row) 
{
?>
  <tr>
    <td><?php echo 	$row['date'] ?></td>
	<td><?php echo 	$row['time'] ?></td>
	<td><?php echo 	$row['name'] ?></td>
	<td><?php echo 	$row['site'] ?></td>
	<td><?php echo 	$row['versionclient'] ?></td>
	<td><?php echo 	$row['user'] ?></td>
  </tr>
<?php
}
?>
	
</tbody>
</table>


<script type="text/javascript">
  $(document).ready(function(){
  	
  	$("#example").dataTable({
	
	"oLanguage":{
					"sSearch": " ",
					"sInfo": "Показано с <span>_START_</span> по <span>_END_</span> из <span>_TOTAL_</span>",
					"sLengthMenu": "_MENU_ "
				},
  		"iDefaultSortIndex": 2,
		"sDefaultSortDirection": "desc"
  	});
  	
  });
</script>

<br>
<a href="index.php">Вернуться на главную</a>
<br>
<br>

</body>
</html>

Как всегда если возникли какие то вопросы я отвечу с удовольствием.

Источник урока: http://www.adatum.ru

Перепечатка данной статьи разрешается только при письменном(e-mail) разрешении автора (Сергоманова Дмитрия Николаевича) и при полном сохранении исходного вида статьи (ссылки, авторские реферальные ссылки, e-mail’ы, форматирование текста, и.т.д), а так же указания точных данных об авторстве (данные автора + прямая [без редиректа и не закрытая от индексации] ссылка на статью).

Похожие статьи

Оставить комментарий

  • Здравствуйте, не могу понять, почему иногда при переходе или обновлении страницы идёт +1 «Всего просмотров», а чаще +2 и ничего не получается исправить…

    • Именно в Фаерфоксе такое происходит…

      • Подскажи у тебя такое происходит и на том примере который выложен здесь ? нужно больше исходных данных что бы понять проблему