[tutorial php+mysql] Prosty licznik odwiedzin


(Zagorskid) #1

Witam!

Przez kilka dni szukałem w necie licznika odwiedzin dla siebie. Szukałem i szukałem, ale żaden nie spełniał tych kryteriów:

  • napisany w php

  • oparty na bazie mysql

  • odporny na odświeżanie.

Postanowiłem więc zrobić coś sam. I zrobiłem :D. Napisałem (a właściwie przerobiłem i posklejałem) licznik. Tutaj opiszę, jak samemu zrobić u siebie licznik odwiedzin, może komuś się przyda i pomoże zaoszczędzić czas stracony na szukaniu...

Zabezpieczenie przed odświeżaniem opiera się na plikach cookie.

Zaczynajmy więc.

Na początku należy stworzyć odpowiednią tabelę w bazie. Oto kod zapytania:

CREATE TABLE licznik (

name varchar(128) NOT NULL,

count int(16) DEFAULT '0' NOT NULL

);

Teraz zabierzemy się za właściwy kod licznika. Można go później zapisać w pliku .inc i wywołać np. za pomocą funkcji require(); należy jednak pamiętać o dodaniu na samym początku dokumentu (naprawdę na samym początku :slight_smile: ) z licznikiem takiej linijki:

<?php setcookie("testowy_licznik", "1", time()+36000); ?>

Tworzy ona ciasteczko, które chroni licznik przed zbędną inkrementacją. testowy licznik - nazwa ciasteczka 1 - wartość ciasteczka (radzę nie zmieniać :slight_smile: )time()+3600 - czas ważności ciasteczka podany w sekundach. 3600 sekund to godzina. Jeśli chcielibyśmy, by licznik nie inkrementował u danego użytkownika np. przez 10 minut wpisujemy 600 zamiast 3600 :). Teraz standardowa sekcja head (zbędna, jeżeli stosujemy licznik poprzez funkcję require()):

licznik

I czas na właściwy skrypt licznika. Na początku musimy połączyć się z bazą danych:

<?php

   $dbhost = "adres serwera mysql";

   $dbuser = "uzytkownik bazy";

   $dbpass = "hasło do bazy";

   $dbname = "nazwa bazy";


mysql_connect($dbhost, $dbuser, $dbpass) or die ("Unable to connect to database");

mysql_select_db($dbname);

Oczywiście należy podać poprawną konfiguracją naszej bazy... :] Dalsza część skryptu:

if($_COOKIE["testowy_licznik"] != 1)

{

$name = "test"; // nazwa licznika, umożliwia posiadanie ich kilku :)

$result = MYSQL_QUERY("SELECT * FROM licznik WHERE (name = '$name')") or die

("Bad query: ".mysql_error());

$row = mysql_fetch_array($result);


if($row){

MYSQL_QUERY("UPDATE licznik SET count = count+1 WHERE (name = '$name')") or die

("Bad query: ".mysql_error());

$count = $row['count'];

}else{

MYSQL_QUERY("INSERT INTO licznik VALUES ('$name', '2')") or die("Bad

query: ".mysql_error());

$count = '1';

}

}


$licznik_db = mysql_query("SELECT count FROM licznik");

$licznik = mysql_fetch_row($licznik_db);

echo 'Ilość unikalnych wyświetleń: '. $licznik[0]; // odwołanie do tablicy, w kwadratowym nawiasie należy podać wiersz (lub nazwę) naszego licznika z mysqla


mysql_close();

?>

Oczywiście kod echa można dowolnie zmieniać. Działanie licznika można sprawdzić tutaj oraz w praktycznym zastosowaniu tutaj (prawa kolumna, dział statystyki).

Jeśli chcemy w każdej chwili możemy zmienić wartość licznika (bądź teź nadać mu wartość początkową) poprzez edycję tabeli licznik w PhpMyAdminie.

Koniec 8)


(Skr3czu) #2

Taki tutek dla początkujących a jak ktoś chce licznik odwiedzin to może skorzystać z gotowych;]

Pozdrawiam


(Zagorskid) #3

No może, ale po co, skoro można mieć coś własnego? :slight_smile:


(L337 Crew) #4

:shock: a ten jaki jest?

Niegotowy?

Zagorskid - możnaby osobno przerobić go, by nie zapisywał w cookie,

tylko adres IP odwiedzającego,

porównać z tymi w bazie, jeśli już taki jest, niedodawać rekordu,

natomiast jeśli nie ma zwiększyć counter+1 ;]

I pobawić się tym, by osiągnąć, że dopiero po miesiącu są jakby wymazywane pola IP,

i od nowa można zapisywać.

Dałoby to tyle, że możnaby łatwo obliczyć ilość UNIKALNYCH odwiedzin, a nie takich, jak ktoś sobie cookie usunie, lub ich w ogóle nie ma włączonych ;]


(Zagorskid) #5

To jest PROSTY licznik :). Oczywiście można zapisywać w bazie adresy ip itd... Ale mysql nie ma nieograniczonej pojemności - po co przy dużej ilości odwiedzin zaśmiecać sobie bazę?

Licznik i tak pokazuje wartość przybliżoną (bo np. ktoś ma wyłączoną obsługę cookies bądź neostradę :wink: ).


(Skr3czu) #6

Na stronie webpc.pl są gotowe więc można z tamtąd ściągać po co składać;] :lol:


(Kubarek) #7

otóż jest tak: 3600 sekund = 1 godzina, więc 36000 sekund = 10 godzin, a 216000 sekund = 60 godzin

a 10 minut to jest 10*60 sekund, czyli 600 sekund

co za byki :x

popraw !

co do reszty, to jest w porządku, choć przydałby się lepszy widok kodu ( np. z wcięciami )


(Zagorskid) #8

No tak... Przydałaby mi się powtórka z mnożenia :wink:.


(system) #9

Przy kilku licznikach (2+) pojawia się problem z (tylko) wyświetleniem kolejnych liczników. Więc zamieniłbym:

$licznik_db = mysql_query("SELECT count FROM licznik");

na:

$licznik_db = mysql_query("SELECT count FROM licznik WHERE (name = '$name')");

Oraz tą linijkę wyciągnął przed if'a

$name = "test";

Wiem, że post był napisany dawno temu, ale niektórzy mogą mieć z tym problemy.