[MySQL][PHP] Jak stworzyć licznik kliknięć ze statystyką dzienną?
Chcesz wykonać licznik kliknięć na link i wzbogacić go o statystyką dzienną w raporcie.
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;