[MySQL][PHP] Jak stworzyć licznik kliknięć ze statystyką dzienną?

0x01 graphic

Chcesz wykonać licznik kliknięć na link i wzbogacić go o statystyką dzienną w raporcie.

0x01 graphic

Masz na stronie wiele linków, prawda? Warto wiedzieć, który klikany jest najczęściej. Jeżeli serwer ma system statystyk, własne linki możesz w nim jeszcze wychwycić i zliczyć, ale przekierowań na obce strony już nie wyłapiesz.

Prosty licznik kliknięć pozwoli Ci uzyskać dokładne statystyki dotyczące popularności wybranych odnośników. Zacznijmy od stworzenia tabeli, która będzie przechowywać informacje o odnośnikach:

CREATE TABLE linki (

id INT NOT NULL PRIMARY KEY,

link CHAR(200) NOT NULL

);

INSERT INTO linki VALUES (1,"http://web.reporter.pl/");

INSERT INTO linki VALUES (2,"http://web.reporter.pl/porady/");

INSERT INTO linki VALUES (3,"http://ogloszenia.reporter.pl/");

Każdy link ma unikalny numer, aby można go było rozróżnić. Przy okazji w tabeli umieściłem kilka przykładowych odnośników.

Teraz czas na tabelę z licznikami kliknięć:

CREATE TABLE kliki (

id INT NOT NULL,

data DATE NOT NULL,

licznik INT NOT NULL DEFAULT "0"

);

Tu potrzebny jest identyfikator linku (brany będzie z poprzedniej tabeli), data kliknięcia (rok, miesiąc, dzień) dla raportowania ilości kliknięć w ciągu określonych dni i licznik kliknięć dla danego dnia.

Możemy już napisać skrypt PHP, który zarejestruje kliknięcie i przekieruje nas na wybraną stronę WWW. Aby skorzystać ze skryptu wystarczy użyć konstrukcji w postaci go.php?id=2, gdzie id to numer odnośnika. Oto kod pliku go.php:

<?

$id=$_GET["id"];

if ($id) {

$baza = mysql_connect("localhost", "user", "password");

mysql_select_db("baza1",$baza);

$wynik=mysql_query("SELECT link FROM linki WHERE id='$id'");

if (mysql_num_rows($wynik)>0) {

$link = mysql_fetch_row($wynik);

$wynik=mysql_query("SELECT * FROM kliki

WHERE id='$id' and data=NOW()");

if (mysql_num_rows($wynik)==0) {

mysql_query("INSERT INTO kliki (id, licznik, data)

VALUES($id, licznik+1, NOW())");

} else {

mysql_query("UPDATE kliki SET licznik=licznik+1

WHERE id=$id and data=NOW()");

}

}

mysql_close($baza);

}

if ($link[0]<>"") {

header("location: $link[0]");

} else {

header("location: index.php");

}

?>

Po odczytaniu przekazanego parametru $id z numerem odnośnika, łączę się z bazą i sprawdzam czy identyfikator o takim numerze istnieje w tabeli linki. Jeżeli tak, czyli gdy istnieje choć jeden taki rekord (mysql_num_rows($wynik)>0), mogę wykonać zliczanie kliknięć w link.

Pobieram adres (odnośnik) i sprawdzam czy już istnieje wpis z aktualną datą i numerem odnośnika. Jeżeli nie, tworzę go za pomocą polecenia INSERT, a jeżeli już istnieje zwiększam mu licznik dla dnia dzisiejszego o 1.

Nasza tablica ze statystyką zwiększa się o jedno kliknięcie dla danego ID w danym dniu. Na końcu następuje przekierowanie pod określoną identyfikatorem stronę lub do strony index.php jeżeli nie było w bazie odnośnika o podanym identyfikatorze.

Odwołanie do śledzonego odnośnika z poradami może tak, jak wspomniałem, a więc następująco:

<a href="go.php?id=2" target="_blank">skocz do porad</a>

Jeżeli potrzebujesz zestawienie kliknięć, wystarczy użyć pytania w postaci:

SELECT data, licznik FROM kliki WHERE id=2 ORDER BY data;

I otrzymasz ładny raport ile było kliknięć w ciągu wszystkich dni dla odnośnika o identyfikatorze 2 (czyli do porad).

Jeżeli chcesz policzyć ile było wszystkich kliknięć (przez wszystkie dni) dla danego ID, użyj pytania w postaci:

SELECT SUM(licznik) FROM kliki WHERE id=2;