Брояч за уникални посещяния с MySQL.
Публикувана от ko6rata на January 19 2011 10:31:38

Разширена новина
С помощта на този урок ще ще може да проследявате броя на уникалните посещения за деня, за вчера, за последните 6 дни, да видите средно дневните посещения за последните 6 дни и рекорда за последната седмица във вашият сайт. Скрипта е направен с помощта на mysql база данни.

Първо трябва да направим таблицата в съответната база данни. Това е кода:
create table 'ipcount'(
'id' int not null auto_increment primary key,
'ip' varchar(15) not null,
'timestamp' bigint(15) not null


Ето го и скрипта, като statistics.php

<?php

//Тук всеки си слага своите настройки

mysql_connect("localhost","root","")
or die("There is no connection to the mysql server!");

//ще отбележа,че базата данни ми се казва ipcounter,но вие може да си я създадете с каквото име желаете

mysql_select_db("ipcounter")
or die("The ipcounter database could not be selected!");

$ip=$_SERVER["REMOTE_ADDR"];
$time=time();
$dnes=0;
$v4era=0;
$last6=0;
$sred_dnevno=0;
$rekord_date=time();
$den_na4=mktime(0,0,0,date('m'),date('d'),date('Y'));
$den_krai=mktime(0,0,0,date('m'),date('d')+1,date('Y'));
$v4era_na4=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
$before6=mktime(0,0,0,date('m'),date('d')-6,date('Y'));

$query1="select ip,timestamp from ipcount where ip='$ip' and timestamp>='$den_na4'";

$result1=mysql_query($query1)
or die("The query1 could not be made!");

$num1=mysql_num_rows($result1);

if($num1==0)

{
$query="insert into ipcount values('','".$ip."','".$time."')";
mysql_query($query);
}

else

{
$row=mysql_fetch_array($result1);
$timestamp=$row['timestamp'];
$ip_baz=$row['ip'];

$query="update ipcount set timestamp=".$time." where ip=$ip_baz and timestamp=$timestamp";
mysql_query($query);
}

//Това е кода за получаването на уникалните посещения днес и вчера

$query2="select * from ipcount where timestamp>=$v4era_na4 and timestamp<$den_krai";
$result2=mysql_query($query2);

while($row=mysql_fetch_array($result2))

{

if($row["timestamp"]<$den_na4)
{
$v4era++;
}

else
{
$dnes++;
}

}

//това е частта от кода за получаването на уникалните посещения(без днешния) за последните 6 дни

$query3="select count(distinct ip) from ipcount where timestamp>=$before6 and timestamp<$den_na4";
$result3=mysql_query($query3);
$broi=mysql_num_rows($result3);

if($broi>0)
{
list($last6)=mysql_fetch_array($result3);
}

/*Това е частта от кода за получаването на средно дневните посещения за последните 6 дни,без да броим днешния(той все още не е изтекъл)*/

$query4="select * from ipcount where timestamp>=$before6 and timestamp<$den_na4";
$result4=mysql_query($query4);
$sred_dnevno=substr(mysql_num_rows($result4)/6,0,4);

/*Това е частта от кода за намирането на рекорда на уникалните посешения за последната седмица,тук вече си вземаме и днешният ден,независимо че не е изминал, защото вече може да имаме рекорд поставен днес*/

for($i=-1;$i<6;$i++)

{

$a[$i+1]=array();

$na4=mktime(0,0,0,date('m'),date('d')-($i+1),date('Y'));
$krai=mktime(0,0,0,date('m'),date('d')-$i,date('Y'));

$query5="select ip,timestamp from ipcount where timestamp>=$na4 and timestamp<$krai";
$result5=mysql_query($query5);

$a[$i+1][0]=mysql_num_rows($result5);

if($a[$i+1][0]>0)
{
$tek_time=mysql_result($result5,0,'timestamp');
$a[$i+1][1]=date("j F Y",$tek_time);
}

else

{
$a[$i+1][1]=0;
}

}

$rekord_mas=max($a[0],$a[1],$a[2],$a[3],$a[4],$a[5],$a[6]);
$rekord=$rekord_mas[0];
$rekord_date=$rekord_mas[1];

if($rekord==$a[0][0])
{
$rekord_date=$rekord_date."(днес)";
}

//Остана само да изведем данните

echo "<font color='red' size='4'>Уникални посещения днес:$dnes<br>Уникални посещения вчера:$v4era<br>";
echo "Общо уникални посещения за последните 6 дни(без днешния):$last6<br>";
echo "Уникални посещения средно на ден през последните 6 дни(без днешния): $sred_dnevno<br>Рекорд за последната седмица: ".$rekord." уникални посещения на ".$rekord_date."</font>";

?>