Помогни ни да направим Uroci.net по - богат! Добави урок

Брояч за уникални посещяния с MySQL

PHP » PHP
spitzo   трудност:    видян: 12418

С помощта на този урок ще ще може да проследявате броя на уникалните посещения за деня, за вчера, за последните 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>";

?>



Това което трябва да се визуализира е:

Уникални посещения днес: 25
Уникални посещения вчера: 19
Общо уникални посещения за последните 6 дни (без днешния): 110
Уникални посещения средно на ден през последните 6 дни (без днешния):23
Рекорд за последната седмица: 27 уникални посещения поставен на 5 October 2007";



Коментари (13)

bglink на 02.11 2007 в 19:36ч.
защо ми дава 4е няма връска с There is no connection to the mysql server!
spitzo на 02.11 2007 в 22:29ч.
Ами виж си настройките,може да не са ти същите,говоря за hosta,usera i passworda....................няма каква друга да е грешката,някъде там е проблема
spitzo на 02.11 2007 в 22:49ч.
Значи принципно настройките(в случая името на хоста,usera i паролата за usera) съм ги сложил да са тези,които се генерират по подразбиране още при инсталацията на отделните компоненти(php,apache,mysql....).Така че виж твоите.... а пък понякога може и проблема да е временен!:)
eversmiling на 24.03 2008 в 11:07ч.
Искам да попитам задължително ли е да имаш хост, за да можеш да си сложиш брояч? Ако имам обикновен сайт на hit.bg, мога ли да направя същото?
spectator на 24.03 2008 в 22:01ч.
Ако искаш брояч на сайт, който е на hit.bg няма ли да е по-добре, ако ползваш някой от готовите(имам в предвид някои сайтове, които правят точно това)?
spitzo на 06.04 2008 в 23:30ч.
здр eversmiling:)Значи ако ще ползваш система за управление на бази данни,примерно като MySQL,ще ти трябва хост.В случая аз съм направил този брояч с mysql-ска база данни,но той спокойно би могъл да се направи и с 'прост' текстов файл,но в случая с текстов файл ще бъде доста по-трудно да вкараш всичките тези статистики.Но с текстово файлче пък няма да ти трябва хост.В интернет има много качение скриптове за броячи,направени с текстови файлове.
spitzo на 06.04 2008 в 23:33ч.
spectator,спокойно можеш да си ползваш готови,няма проблем,но няма лошо и сам да си го драснеш :)
spitzo на 06.04 2008 в 23:36ч.
Eversmiling,имай в предвид,че урока съм го написал на php,а той самия език php e server-side,тай че ти трябва хост.
human на 24.04 2008 в 10:56ч.
SQL Даваше грешка и затова го направих така:
CREATE TABLE `ipcount` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(15) NOT NULL,
`timestamp` bigint(15) NOT NULL,
PRIMARY KEY (`id`)
);
spitzo на 26.04 2008 в 11:38ч.
Да,то това си е напълно вярно,което си написал :) То като цяло кодчето за създаването на базата данни и табличките не е от най-важните...........има много начини да си ги създадеш.......можеш да ползваш и конзолката,която предлага някое тулче,примерно phpmyadmin :)
ivailobgto1 на 20.11 2008 в 22:51ч.
Искам да кажа че на мене MySQL не ми трагва иска парола ас я вавеждам а то нестава... и така искам да си направя сайт с посещения ако може някои да ми помогне skype: ivailobgto1
sig33 на 04.03 2009 в 20:09ч.
spitzo може ли да направиш едно уроче или да дадеш линкче за направа на брояч с текстов фаил???
tuning318 на 31.05 2009 в 17:09ч.
Ще ви отговоря на въпроса "Работи ли?":
-Не!

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com