Webmaster общности: Predpriemach.com | SearchEngines.bg

    PHP брояч за уникални посещения с mysql

    Автор: batenew

    Здравейте!Някъде в коментарите забелязах,че някой пита как или дали може да се направи уникален брояч за уникални посещения с mysql и реших да напиша това уроче.Мисля,че коментара беше по повод урока на DJCharge .Урока ми има почти същата функционалност както на DJCharge ,само че е направен с mysql,а не с файлове.И така,нека да започваме Smile

    Първо трябва да направим таблицата в съответната база данни,ето и кода:

    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″;