Programowanie w języku PHP » FAQ

Jak zrobić licznik odwiedzin odporny na przeładowania strony

  • 2012-03-14 21:06
  • 4 komentarze
  • 4714 odsłon
  • Oceń ten tekst jako pierwszy
Tak:

  $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.




Pozwolilem sobie troszkę modyfikować licznik Kolegi.

wprowadziłem małe poprawki rzeczy które u mnie nie działały :)
KOD SQL:
#
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:
#
 
<?
$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
 $sql = "DELETE FROM counter WHERE counter_time < ".(time()-144000); 

4 komentarze

flashstar 2010-02-23 14:33

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.

SATANAS 2007-05-16 22:59

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ć!

Loganek 2006-11-02 19:20

a jak to samo zrobic na plikach?

Numi 2003-08-18 00:37

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.