[MySQL][PHP] Jak zrobić licznik pobrań plików ze strony?
Chcesz stworzyć skrypt, który zliczy ile razy użytkownicy pobrali określony plik z Twojego serwisu lub sekcji download.
Jeżeli prowadzisz serwis udostępniający użytkownikom pliki do pobrania, z pewnością przyda Ci się skrypt, który policzy ile razy poszczególne pliki zostały pobrane.
Mając takie informacje możesz stworzyć ranking najpopularniejszych plików w serwisie i ułożyć je według popularności, aby najczęściej pobierane były na samym początku listy. Zobacz jak to osiągnąć.
Zakładanie bazy i tabeli
Jeżeli nie masz utworzonej bazy danych w MySQL, możesz ją założyć wykonując poniższy skrypt. Zakłada on bazę danych o nazwie baza1. Wystarczy, że skrypt użyjesz raz, potem nie będzie już potrzebny.
<?
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
$wynik = mysql_query("CREATE DATABASE baza1",$baza);
if ($wynik) echo "Baza została stworzona";
mysql_close($baza);
}
?>
Jeżeli masz już założoną bazę danych, czas aby założyć tabelę o nazwie kliki, w której znajdą się liczniki kliknięć dla poszczególnych plików.
<?
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
$wynik = mysql_select_db("baza1",$baza);
if ($wynik) {
$wynik = mysql_query("CREATE TABLE kliki (
id int not null primary key,
nazwa char(100) not null unique,
licznik int not null default '0'
)", $baza);
if ($wynik) echo "Tabela została stworzona";
}
mysql_close($baza);
}
?>
Wystarczy, że użyjesz skryptu tylko raz, potem nie będzie już potrzebny. Szerszy opis zakładania baz danych i tabel znajdziesz w osobnych poradach. Jeżeli masz już bazę o innej nazwie musisz w pozostałych skryptach zmienić nazwę baza1 na własną.
Mamy już stworzoną tabelę przechowującą unikalny numer pliku id (liczba całkowita), który nie może się powtarzać, jego nazwę nazwa (do 100 znaków), która również jest unikalna i nie może być pusta oraz pole licznik dla każdego z plików, który nie może być pusty (domyślna wartość to zero).
Zarządzanie plikami
Aby do tabeli dodać pliki, które znajdą się w serwisie i będą miały zliczane kliknięcia, posłuż się następującym skryptem:
<?
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
$wynik = mysql_select_db("baza1",$baza);
if ($wynik) {
mysql_query("INSERT INTO kliki VALUES (1,'plik1.zip',0)", $baza);
mysql_query("INSERT INTO kliki VALUES (2,'plik2.exe',0)", $baza);
mysql_query("INSERT INTO kliki VALUES (3,'plik3.jpg',100)", $baza);
// mysql_query("DELETE FROM kliki WHERE id=3", $baza);
// mysql_query("UPDATE kliki SET nazwa='nowanazwa.exe' WHERE id=3", $baza);
}
mysql_close($baza);
}
?>
Polecenie języka SQL o nazwie INSERT INTO nazwaTabeli umieszcza nowy rekord w tabeli o wartościach podanych za poleceniem VALUES. Pierwsze pole to unikalne numery id pliku, drugie to dokładna nazwa pliku (identyczna jak nazwa na dysku, z rozróżnieniem na małe i duże litery), trzeci parametr to licznik, mający wartość 0.
Możesz podać od razu inną wartość licznika. W przykładzie plik o numerze 3 ma licznik od razu ustawiony na 100, bo zakładam, że wcześniej plik został pobrany już 100 razy i nie chcę zaczynać liczenia od zera.
Jeżeli chcesz skasować z listy jakiś plik usuń komentarz z polecenia DELETE FROM, który kasuje z tabeli plik o określonym numerze id. Polecenie UPDATE pozwala zmienić nazwę pliku, gdyby trzeba było tego dokonać.
Powyższy skrypt wykonuj tylko wtedy, gdy chcesz dodać, zmienić lub kasować listę plików. W innych wypadkach nie będzie potrzebny.
Wyświetlanie plików i liczników na stronie
Poniższy skrypt umieść w pliku index.php, w miejscu, gdzie chcesz udostępnić pliki do pobrania. Wyświetla on na stronie nazwy plików i linki do nich, a obok pokazuje ile razy poszczególne pliki zostały pobrane.
<?
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
$wynik = mysql_select_db("baza1",$baza);
if ($wynik) {
$sql="SELECT * FROM kliki ORDER BY licznik DESC";
$wynik = mysql_query($sql,$baza);
mysql_close($baza);
for ($i=0;$i<mysql_num_rows($wynik);$i++) {
list($bid, $bnazwa, $blicznik) = mysql_fetch_row($wynik);
echo "<br>- <a href=\"pobierz.php?id=$bid\">$bnazwa</a> [$blicznik]";
}
} else { echo "Wybranie bazy danych nie było możliwe..."; }
} else { echo "Połączenie do MySQL nie było możliwe..."; }
?>
Na ekranie po wykonaniu skryptu zobaczysz coś w stylu:
- plik6.jpg [11]
- plik1.zip [5]
- plik2.exe [3]
gdzie nazwy plików będą odnośnikami. Po kliknięciu nazwy pliku nastąpi pobranie go i zwiększenie licznika pobrań o 1. Tym razem za pomocą polecenia SQL:
"SELECT * FROM kliki ORDER BY licznik DESC" pobieramy (SELECT) z bazy kliki (FROM kliki) wszystkie (*) rekordy sortując je (ORDER BY) malejąco (DESC) według pola licznik.
Poszczególne rekordy zostają zamienione na zmienne $bid, $bnazwa i $blicznik, a następnie umieszczone w odpowiednim fragmencie kodu HTML.
Pobranie pliku i zwiększenie licznika.
Poprzedni skrypt numer pliku kieruje do skryptu pobierz.php?id=numer, przekazuje mu numer pliku do pobrania. Pozostała nam więc jeszcze jedna część układanki - skrypt, który wyśle plik do użytkownika i zwiększy licznik o 1.
Poniższy kod (i tylko ten kod, nic więcej) umieść w pliku pobierz.php.
<?
if ($id) {
$baza = mysql_connect("localhost", "user", "password");
mysql_select_db("baza1",$baza);
mysql_query("UPDATE kliki SET licznik=licznik+1 WHERE id=$id", $baza);
$wynik = mysql_query("SELECT nazwa FROM kliki WHERE id=$id", $baza);
mysql_close($baza);
}
if ($wynik) {
$w = mysql_fetch_row($wynik);
$plik= $w[0];
if (($plik<>"")and(file_exists("pliki/$plik"))) {
header("location: pliki/$plik"); exit;
}
}
header("location: index.php"); exit;
?>
Jeżeli zostanie przekazany numer identyfikacyjny pliku (wywołanie następuje w poprzednim skrypcie index.php z listą plików), to w bazie licznik dla tego pliku zwiększany jest o jeden, pobierana jest jego nazwa i plik za pomocą nagłówka wysyłany jest do użytkownika. Pliki muszą znaleźć się w katalogu pliki (oczywiście katalog możesz zmienić na inny).
Jeżeli do skryptu nie zostany przekazany numer id, id będzie błędny lub id nie wystąpi w bazie, użytkownik zostanie skierowany ponownie na stronę index.php, gdzie znajduje się spis plików do pobrania.
Może się też zdarzyć, że plik o podanej nazwie nie istnieje (został przez przypadek skasowany) i wtedy również użytkownik zostanie odesłany do strony index.php. W ten sposób łatwo osbłużyć błędne przekazywanie parametrów do skryptu pobierz.php.
Gotowe. Masz już licznik plików, które użytkownicy pobierają z Twojego serwisu. Jeżeli chcesz, możesz rozbudować tabelę o dodatkowe pola, np. z opisem pliku.