Mam kod statystyk w php opartych o mysql. Działają tak: użytkownik wchodzi na stronę wartość mktime(); ip itd dodawane jest do bazy. Potem odejmuje zapisane mktime od 2. I obliczam ile użytkowników było wczoraj. Jednak to dobrze nie działa, bo wejdę o 10.00 na stronę "Wczoraj: 3", wejdę o 17.00 "Wczoraj: 20". Chyba mysze w mktime uwzględnić doby albo coś innego.
Kod:
<?php
// (c) Lejto
$prze = $_SERVER['HTTP_USER_AGENT']; // pobiera nazwę przegladarki
$prze2 = $_SERVER['HTTP_CONNECTION'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER["REMOTE_ADDR"];
}
$host=gethostbyaddr($ip);
$date = date("d.m.y, H:m:s");
//boty
'Alexa' => 'ia_archiver',
'Ask Jeeves' => 'ask jeeves',
'Teoma' => 'teoma',
'Baidu Spider' => 'baiduspider',
'cURL' => 'curl',
'GameSpy' => 'gamespyhttp',
'Googlebot-Image' => 'googlebot-image',
'Gigabot' => 'gigabot',
'Googlebot' => 'googlebot',
'Grub' => 'grub',
'Inktomi Slurp' => 'slurp',
'msnbot' => 'msnbot',
'AltaVista' => 'scooter',
'Yahoo!' => 'yahoo!',
'Lycos' => 'lycos',
'Whatuseek' => 'whatuseek',
'futuro.pl' => 'futuro.pl',
);
foreach($Bots as $bot => $designation)
{
if(eregi($designation, $_SERVER['HTTP_USER_AGENT'])) $b0t = $b0t . 1;
}
if($b0t=='' or $bot=='0')
{
//jeżeli użytkownik to nie bot wchodzi w if'a
$rok = date("Y"); //pobiera rok $miech = date("n")+1; //pobiera miesiąć
$ostatni = mktime (0
,0
,0
,$miech,0
,$rok); //ostatni dzień potrzebne do oblicznia ile było w poprzednim miechu $miesiac = strftime ("%d", $ostatni); //ostatni dzień miesiąca (albo 1 dzień, nie pomiętam już)
$online = time()-(60
*TIMEOUT
); //czas online
$m = time()-(24
*$miesiac*3600
); //czas miesiąca $dzis = time()-(24
*3600
); //czas dzis $ip = $_SERVER['REMOTE_ADDR'];
$zapyt = "INSERT INTO licznik(ip,data,czas,host,przegladarka) VALUES('$ip','$czas','$date','$host','$prze')"; //dodajemy ip + czas
if(!$sql) { die ('błąd'); } $zapyt = "UPDATE licznik2 SET odslon=odslon+1"; //powiększamy liczbę odsłon
$zapyt = "SELECT ip FROM licznik WHERE ip='$ip'AND data>'$dzis'";
if($num==1){ //licznik unikalnych + kasowanie starych
$zapyt = "UPDATE licznik2 SET wizyt=wizyt+1";
$roznica = time()-(48
*3600
); //usuwamy dane starsze niż 48 godzin $zapyt = "DELETE FROM licznik WHERE data<'$roznica'";
}
//wyswietlamy co trzeba
$zapyt = "SELECT wizyt,odslon FROM licznik2";
foreach($row as $linia){
$licznik[] = $linia;
}
$zapyt = "SELECT count(DISTINCT ip)
FROM licznik WHERE data>$dzis";
$licznik[2] = $row['count(DISTINCT ip)'];
$zapyt = "SELECT count(DISTINCT ip)
FROM licznik WHERE data<$dzis"; // data jest mniejsza od dziciejszego mktime
$licznik[3] = $row['count(DISTINCT ip)']; //pobiera użytkowników wczorajszych
$zapyt = "SELECT count(DISTINCT ip)
FROM licznik WHERE data>$online";
$licznik[4] = $row['count(DISTINCT ip)'];
$zapyt = "SELECT count(DISTINCT ip)
FROM licznik WHERE data>$m";
$licznik[5] = $row['count(DISTINCT ip)'];
print '<table id="font" border="0" cellpadding="0" width="" cellspacing="0" bordercolor="#9CACAD" ><tr><td> Wizyt: '.$licznik[0].'<br>
Wszytkich odsłon: '.$licznik[1].'<br>
Dziś: '.$licznik[2].'<br>
Wczoraj: '.$licznik[3].'<br>
Online: '.$licznik[4].'<br>
Ten miesiąc: '.$licznik[5].'<br></td></tr></table>
';
}
?>
Baza wygląda tak:
(IMG:
http://img137.imageshack.us/img137/2913/60212018by7.gif)
jest jeszcze tabela licznik2 zapisująca odslony i wizyty.
W razie jakichkolwiek pytań proszę pytać