Licznik odwiedzin, odporny na przeładowania strony

Vogel
Kopiuj
  $ip = $_SERVER["REMOTE_ADDR"];
  
  $mysql = mysql_connect("host", "user", "password");
  mysql_select_db("database", $mysql);

  // usuwam userów dawnych

  $sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000);
  mysql_query($sql);

  // sprawdzam, czy aktualny nie został usunięty (był na stronie w czasie 10 min)

  $sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'";
  $result = mysql_query($sql);

  // aktualizacja lub dodanie rekordu

  if (mysql_fetch_row($result)) {
    $sql = "UPDATE counter SET counter_time=".time()." WHERE counter_ip = ".$ip;
    mysql_query($sql);
  } else {
    $sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')";
    mysql_query($sql);

    // zwiększenie licznika
    
    $sql = "UPDATE site_info SET counter=counter + 1";
    mysql_query($sql);
  }

  // wyświetlenie licznika

  $sql = "SELECT counter FROM site_info";
  $result = mysql_fetch_array(mysql_query($sql));
  $counter = $result["counter"];
  
  mysql_close($mysql);

Zasada jest prosta: zapisuję adresy IP osób, i czas, w którym ostatio weszły na stronę/podstronę. Jeżeli ktoś nie wszedł przez 10 min to jest usuwany z listy, i może być policzony jeszcze raz. Jeżeli wszedł w tym czasie, to aktualizuję czas.

Alternatywna wersja

Pozwolilem sobie troszkę modyfikować licznik Kolegi. Wprowadziłem małe poprawki rzeczy które u mnie nie działały :)

Inicjalizacja bazy danych

Kopiuj
CREATE TABLE `counter` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`counter_time` VARCHAR( 25 ) NOT NULL ,
`counter_ip` VARCHAR( 15 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE TABLE `site_info` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`counter` INT( 15 ) NOT NULL 
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;

INSERT INTO site_info VALUES ('', '"0"');

Kod licznika

Kopiuj
<?
$ip = $_SERVER["REMOTE_ADDR"];
# połączenie z bazą
include('polanczenie.php');
  // usuwam userów dawnych
  $sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000);
  mysql_query($sql);
  // sprawdzam, czy aktualny nie został usunięty (był na stronie w czasie 10 min)
  $sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'";
  $result = mysql_query($sql);
  // aktualizacja lub dodanie rekordu
  if (mysql_fetch_row($result)) {
    $sql = "UPDATE counter SET counter_time='".time()."' WHERE counter_ip = '".$ip."'";
    mysql_query($sql);
  } else {
    $sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')";
    mysql_query($sql);
    // zwiększenie licznika
  $sql = "UPDATE `site_info` SET `counter`=`counter` + 1";
    mysql_query($sql);
  }
 // wyświetlenie licznika
  $sql = "SELECT counter FROM site_info";
  $result = mysql_fetch_array(mysql_query($sql));
  $counter = $result["counter"];
 
echo "odwiedzin stron było: $counter";
?>

Licznik odporny na przeładowania strony na 10 minut, po każdym przeładowaniu strony czas jest ponownie liczony od zera na kolejne 10 minut. Czas można ustawić wedlug uznania, ja sobie ustawiłem

Kopiuj
<?php
$sql = "DELETE FROM counter WHERE counter_time < " . (time() - 144000); 

4 komentarzy

Sprawdź darmowy skrypt PHP + komponent flash fcounter

http://www.flashstar.pl/f/fcounter/

Mały(2,5KB) odporny na odświerzanie (sesje), ładny(można podstawić swoje grafiki), bez reklam i łatwy w instalacji.

Kod powinien wyglądać tak:

<?php $ip = $_SERVER["REMOTE_ADDR"]; $mysql = mysql_connect("localhost", "foruum_strona", "1356892"); mysql_select_db("foruum_strona", $mysql); // usuwam userów dawnych $sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000); mysql_query($sql); // sprawdzam, czy aktualny nie zosta³ usuniêty (by³ na stronie w czasie 10 min) $sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'"; $result = mysql_query($sql); // aktualizacja lub dodanie rekordu if (mysql_fetch_row($result)) { $sql = "UPDATE counter SET counter_time=".time()." WHERE counter_ip = ".$ip; mysql_query($sql); } else { $sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')"; mysql_query($sql); // zwiêkszenie licznika $sql = "UPDATE site_info SET counter=counter + 1"; mysql_query($sql); } // wyœwietlenie licznika $sql = "SELECT counter FROM site_info"; $result = mysql_fetch_array(mysql_query($sql)); $counter = $result["counter"]; mysql_close($mysql); ?>

I z tego co widać to jest oparty na sql więc dopisz jaki zapytania trzeba wykonać!

a jak to samo zrobic na plikach?

hmm.. moim zdaniem należałoby to zrobić jednak na sesjach+ostatni ip, gdyż wtedy mamy pewność - jeżeli strona to np. internetowa biblia :), to jak ktoś sobie będzie chciał poczytać, to posiedzi dłużej niż 10min.