Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]/[mysql]statystyki
Forum PHP.pl > Forum > PHP
Lejto
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:
  1. <?php
  2. // (c) Lejto
  3.  $prze = $_SERVER['HTTP_USER_AGENT']; // pobiera nazwę przegladarki 
  4. $prze2 = $_SERVER['HTTP_CONNECTION'];
  5.  if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
  6. { 
  7. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  8. } 
  9. else
  10. { 
  11. $ip=$_SERVER["REMOTE_ADDR"];
  12. } 
  13. $host=gethostbyaddr($ip); 
  14. $date = date("d.m.y, H:m:s");
  15.  
  16. //boty
  17. $Bots = array(
  18.  'Alexa'  => 'ia_archiver',
  19.  'Ask Jeeves' => 'ask jeeves',
  20.  'Teoma'  => 'teoma',
  21.  'Baidu Spider'  => 'baiduspider',
  22.  'cURL'  => 'curl',
  23.  'GameSpy' => 'gamespyhttp',
  24.  'Googlebot-Image' => 'googlebot-image',
  25.  'Gigabot' => 'gigabot',
  26.  'Googlebot'  => 'googlebot',
  27.  'Grub'  => 'grub',
  28.  'Inktomi Slurp'  => 'slurp',
  29.  'msnbot' => 'msnbot',
  30.  'AltaVista'  => 'scooter',
  31.  'Yahoo!' => 'yahoo!',
  32.  'Lycos'  => 'lycos',
  33.  'Whatuseek' => 'whatuseek',
  34.  'futuro.pl' =>  'futuro.pl',
  35.  );
  36. foreach($Bots as $bot => $designation)
  37. {
  38.  if(eregi($designation, $_SERVER['HTTP_USER_AGENT']))
  39.  $b0t = $b0t . 1;
  40. }
  41. if($b0t=='' or $bot=='0')
  42. {
  43. //jeżeli użytkownik to nie bot wchodzi w if'a
  44.  
  45.  
  46.  
  47. $rok = date("Y"); //pobiera rok
  48. $miech = date("n")+1; //pobiera miesiąć
  49.  
  50. $ostatni = mktime (0,0,0,$miech,0,$rok); //ostatni dzień potrzebne do oblicznia ile było w poprzednim miechu
  51. $miesiac = strftime ("%d", $ostatni); //ostatni dzień miesiąca (albo 1 dzień, nie pomiętam już)
  52.  
  53. define ('TIMEOUT', 20);
  54. $online = time()-(60*TIMEOUT); //czas online
  55.  
  56. $m = time()-(24*$miesiac*3600); //czas miesiąca
  57. $dzis = time()-(24*3600); //czas dzis
  58. $online = time()-600;
  59. $ip = $_SERVER['REMOTE_ADDR'];
  60. $czas = time();
  61.  
  62. $zapyt = "INSERT INTO licznik(ip,data,czas,host,przegladarka) VALUES('$ip','$czas','$date','$host','$prze')"; //dodajemy ip + czas
  63. $sql = mysql_query($zapyt);
  64. if(!$sql) { die ('błąd'); }
  65. $zapyt = "UPDATE licznik2 SET odslon=odslon+1"; //powiększamy liczbę odsłon
  66. mysql_query($zapyt);
  67. $zapyt = "SELECT ip FROM licznik WHERE ip='$ip'AND data>'$dzis'";
  68. $rez = mysql_query($zapyt);
  69. $num = mysql_num_rows($rez);
  70. if($num==1){ //licznik unikalnych + kasowanie starych
  71.  $zapyt = "UPDATE licznik2 SET wizyt=wizyt+1"; 
  72.  mysql_query($zapyt);
  73.  $roznica = time()-(48*3600); //usuwamy dane starsze niż 48 godzin
  74.  $zapyt = "DELETE FROM licznik WHERE data<'$roznica'";
  75.  mysql_query($zapyt);
  76. }
  77.  
  78. //wyswietlamy co trzeba
  79. $zapyt = "SELECT wizyt,odslon FROM licznik2";
  80. $rez = mysql_query($zapyt);
  81. $row = mysql_fetch_array ($rez, MYSQL_ASSOC); 
  82. foreach($row as $linia){
  83. $licznik[] = $linia;
  84. }
  85. $zapyt = "SELECT count(DISTINCT ip)
  86.  FROM licznik WHERE data>$dzis";
  87. $rez = mysql_query($zapyt);
  88. $row = mysql_fetch_array ($rez, MYSQL_ASSOC); 
  89. $licznik[2] = $row['count(DISTINCT ip)'];
  90.  
  91. $zapyt = "SELECT count(DISTINCT ip)
  92.  FROM licznik WHERE data<$dzis"; // data jest mniejsza od dziciejszego mktime
  93. $rez = mysql_query($zapyt);
  94. $row = mysql_fetch_array ($rez, MYSQL_ASSOC); 
  95. $licznik[3] = $row['count(DISTINCT ip)']; //pobiera użytkowników wczorajszych
  96.  
  97. $zapyt = "SELECT count(DISTINCT ip)
  98.  FROM licznik WHERE data>$online";
  99. $rez = mysql_query($zapyt);
  100. $row = mysql_fetch_array ($rez, MYSQL_ASSOC); 
  101. $licznik[4] = $row['count(DISTINCT ip)'];
  102.  
  103. $zapyt = "SELECT count(DISTINCT ip)
  104.  FROM licznik WHERE data>$m";
  105. $rez = mysql_query($zapyt);
  106. $row = mysql_fetch_array ($rez, MYSQL_ASSOC); 
  107. $licznik[5] = $row['count(DISTINCT ip)'];
  108.  
  109. print '<table id="font" border="0" cellpadding="0" width="" cellspacing="0" bordercolor="#9CACAD" ><tr><td> 
  110.  Wizyt: '.$licznik[0].'<br>
  111.  Wszytkich odsłon: '.$licznik[1].'<br>
  112.  Dziś: '.$licznik[2].'<br>
  113.  Wczoraj: '.$licznik[3].'<br>
  114.  Online: '.$licznik[4].'<br>
  115.  Ten miesiąc: '.$licznik[5].'<br></td></tr></table>
  116. ';
  117.  
  118. }
  119.  
  120. ?>

Baza wygląda tak:


jest jeszcze tabela licznik2 zapisująca odslony i wizyty.
W razie jakichkolwiek pytań proszę pytać
marcio
Kodu calego nie czytam ale czy to:
  1. <?php
  2. $b0t = $b0t . 1;
  3. }
  4. if($b0t=='' or $bot=='0')
  5. ?>

Nie chodzilo ci czasami o zmienna $bot z foreach() chyba literowka
Lejto
nie , nie z botami wszystko ok tylko z tymi dniami i chyba z mktime();
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.