Podobny efekt można uzyskać w języku JavaScript, ale nie zapewnia on tak rozmaitych możliwości co język PHP. Przekonaj się sam.
Przy projekcji każdej aplikacji powinniśmy zacząć od zaplanowania naszej pracy. Wpływa to na korzyść całości skryptu i skraca czas pracy nad całym skryptem. Przechodząc do naszego zadania spróbujemy opisać nasz problem, a następnie rozwiążemy go w najkorzystniejszy sposób.
Baza danych czy plik tekstowy?
Jest to bardzo ważne pytanie, które trzeba sobie zadać przed przystąpieniem do prac. Określenie miejsca przechowywania danych jest bardzo ważnym aspektem wpływającym na całość projektu, np. plik tekstowy może się okazać bardziej pożyteczny niż baza danych, ze względu na brak dostępu do ów bazy lub nie pozwalają nam na to ograniczenia nałożone na konto, z którego korzystamy. Ponieważ bazy danych są coraz bardziej popularne, toteż posłużymy się nimi w naszym projekcie.
Planowanie tabeli z danymi
Zakładam, że umiesz już posługiwać się bazą danych, toteż nie będę opisywał poszczególnych zapytań. Jeśli masz problem z tą tematyką to proponuje zapoznać się najpierw z odpowiednimi artykułami poświęconymi bazom danych, dostępnym w naszym serwisie. Pierwszym etapem naszego projektu będzie skonstruowanie odpowiedniej tabeli w bazie danych, w której będziemy przechowywać dane. W moim przypadku posłużę się jedną z najpopularniejszych baz danych – bazą MySQL. Ów potrzebną nam tabelę nazwę jako ‘rotator’, a powinna ona zawierać następujące pola: – „id” – numer kolejnego rekordu. Format pola to MEDIUMINT, długość, np. 5. Ponadto powinno być oznaczone jako INDEX i zawierać atrybut AUTO_INCREMENT. – „url” – adres URL strony, do której ma się odwoływać banner. Format pola to VARCHAR, długość, np. 250 (można także ustawić jako TEXT). – „banner” – bezpośredni adres URL do bannera, który ma być wyświetlany. Pole posiada identyczne parametry jak podane poprzednio. – „data” – data dodania bannera. Format pola to VARCHAR, a długość wynosi 14 znaków. – „ilosc” – ilość wyświetleń. Format pola to MEDIUMINT, długość, np. 10 znaków.
Jeśli mamy już gotową tabelę z danymi, możemy przystąpić do pracy nad dalszą częścią naszego skryptu.
Funkcje używane w skrypcie
Zapisane w tym podpunkcie funkcje będą niezbędne do funkcjonowania całej aplikacji. Na początku otwórz dowolny edytor tekstu (np. Notatnik) i zapisz nowy dokument jako ‘funkcje.php’. Ponieważ jest to plik, w którym zapisane będą skrypty języka PHP, należy rozpocząć ów plik od tagu: <?, a zakończyć ?>. Teraz wszystkie podane niżej funkcje należy zapisywać między ów znacznikami.
Pierwszą funkcja będzie służyła do sprawdzenia, czy podany ciąg znaków jest adresem URL.
function check_url($text) { if (ereg(„s?[^ ]+://[^ ]+.[^ ]+s?”, $text, $reg)) return 1; elseif (ereg(„s?[wW]{3}.[^ ]+.[^ ]+s?”, $text, $reg)) return 2; else return 0; } |
W pierwszym etapie definiujemy naszą funkcję pod nazwą ‘chech_url’. Jej jedynym parametrem jest przekazywany ciąg znaków. Funkcja zwraca jedną z trzech wartości: ‘1’, gdy podany ciąg znaków jest poprawny; ‘2’, gdy podany ciąg znaków jest adresem URL, ale do pełnej funkcjonalności skryptu brakuje w nim przedrostka, np. ‘http://’; ‘0’, gdy podany ciąg nie jest adresem URL. Oczywiście przedstawione powyżej porównanie z wykorzystaniem wzorców jest dość proste i nie zabezpiecza przed wszystkimi nieprawidłowościami, ale przyjmujemy, że użytkownik ów skryptu nie zamierza szkodzić sam sobie.
Druga omawiana funkcja będzie nawiązywała połączenie z bazą danych. Nie będę jej opisywał, gdyż o połączeniach z bazą danych możesz przeczytać w odpowiednim artykule.
function baza_polacz() { $db = mysql_pconnect(‘localhost’, ‘login’, ‘haslo’); if ($db) { if (mysql_select_db(‘baza_probne’)) return $db; else die(mysql_error()); } else { die(mysql_error()); } } |
Gdy już mamy gotowe wszystkie funkcje, możemy przystąpić do projektowania panelu administracyjnego.
Dodawanie bannera
Otwórz dowolny edytor tekstowy i zapisz nowy dokument jako ‘dodaj.php’. Na samym początku skryptu sprawdzimy czy zostały wprowadzone wszystkie potrzebne dane, aby można było dodać nowy banner.
<? if (isset($nurl) && $nurl != ‘’ && isset($nbanner) && $nbanner != ‘’) { |
Kiedy mamy wszystkie potrzebne dane, możemy przystąpić do sprawdzenia ich poprawności. Jak wiemy ów dane powinny być adresami URL toteż posłużymy się wcześniej napisaną funkcją do sprawdzenia ich poprawności.
<? $co_url = check_url($nurl); $co_banner = check_url($nbanner); if ($co_url == 2) { $co_url = 1; $nurl = ‘http://’.$nurl; } if ($co_banner == 2) { $co_banner = 1; $nbanner = ‘http://’.$nurl; } if ($co_url == 1 && $co_banner == 1) { |
Po sprawdzeniu danych, gdy zmienne ‘$co_url’ lub ‘$co_banner’ posiadały wartość ‘2’, to do zmiennych ‘$nurl’ lub ‘$nbanner’ były dopisywane odpowiednie przedrostki, które są potrzebne, aby skrypt działał poprawnie. Kiedy nasze dane są już poprawne możemy przystąpić do ich dodania. Posłużą nam do tego odpowiednie zapytania do bazy MYSQL:
$query = “INSERT INTO rotator VALUES(NULL, ‘$nurl’, ‘$nbanner’, $datar, ‘0’)”; if (mysql_query($query)) { $kom = ‘Banner został pomyślnie dodany!’; } else { $kom = ‘Niestety, nie można było dodać nowego bannera. Spróbuj ponownie!’; } |
W pierwszej linii do zmiennej ‘$query’ przypisaliśmy treść naszego zapytania. Użyliśmy w nim niezdefiniowaną wcześniej zmienną ‘$datar’. Więcej na jej temat dowiesz się pod koniec tego artykułu. Następnym elementem naszej pracy było sprawdzenie poprawności wykonania zapytania. Jeśli się powiodło, to do zmiennej ‘$kom’ przypisywany jest odpowiedni komunikat, jeśli się nie powiodło, to także zwracany jest stosowny komunikat. Co jeśli jednak utworzone wcześniej zmienne ‘$co_url’ i ‘$co_banner’ przyjmują wartości ‘0’? Jest to oczywiście oznaka nieprawidłowości danych. Zatem zwracamy odpowiedni komunikat:
} else { $kom = ‘Podane dane są nieprawidłowe. Spróbuj ponownie!’; } |
W przypadku, gdy do skryptu nie przekazane zostały żadne zmienne, tzn. ‘$nurl’ i ‘$nbanner’, to należy wyświetlić odpowiedni formularz, który to umożliwi. A więc:
} else { ?> W celu dodania nowego bannera, należy podać odpowiednie dane dotyczące lokalizacji samego bannera, a także adres, do którego ma się odwoływać.<br><br> <form method=post> <input type=hidden name=do value=dodaj> URL bannera: <input type=text name=nbanner><br> Odwołanie do: <input type=text name=nurl><br> <input type=submit value=dodaj> </form> |
Tak gotowy skrypt dodawania możesz zapisać i przejść do następnej części.
Przeglądanie wszystkich zapisanych bannerów
Otwórz edytor tekstu i zapisz nowy dokument jako ‘pokaz.php’. Następnie zapoznaj się z poniższym kodem:
<? $query = „SELECT * FROM rotator”; $wynik = mysql_query($query); if (mysql_num_rows($wynik) > 0) { ?> |
Sprawdzamy ilość wszystkich zapisanych w bazie bannerów i jeśli jest, chociaż jeden to skrypt wyświetla je w osobnych wierszach tabeli zaprojektowanej poniżej:
<font>Poniżej zostały wyświetlone wszystkie dostępne w bazie bannery.</font><br><br> <div align=center> <table cellpadding=2 cellspacing=1> <tr> <td width=30 height=15 align=center valign=middle>ID.</td> <td width=500 align=center valign=middle>Banner</td> <td width=80 align=center valign=middle >Akcja</td> </tr> <? while ($rekord = mysql_fetch_array($wynik)) { print „<tr> <td align=left valign=middle>$rekord[id]</td> <td align=center valign=middle><a href=”$rekord” target=_new><img src=”$rekord[banner]”></a><br> Data dodania: $rekord[data], ilość wyświetleń: $rekord[ilosc] </td> <td align=center valign=middle> <a href=”$sg?do=usun&co=$rekord[id]”>usuń</a><br> <a href=”$sg?do=zeruj&co=$rekord[id]”>zeruj licznik</a></td> </td> </tr>”; } ?> </table> <br> </div> |
Powyższy kod może wydawać się skomplikowany, ale w rzeczywistości jest to tylko zwykły układ tabelek z niewielką ilością języka PHP. Po prostu pobieramy kolejne rekordy z bazy danych i wyświetlamy je. Dodatkowo w ostatniej komórce zawarte są linki umożliwiające usunięcie bannera lub wyzerowanie licznika wyświetleń. Po zapisaniu powyższego kodu możesz przystąpić do następnego etapu.
Usuwanie bannera
Otwórz dowolny edytor tekstowy i zapisz nowy dokument jako ‘usun.php’. Na samym początku skryptu sprawdzimy czy został podany numer ID bannera, który chcemy usunąć.
<? if (isset($co) && $co != ‘’) { $query = “DELETE FROM rotator WHERE id = ‘$co’”; if(mysql_query($query)) { $kom = ‘Podany banner został usunięty z bazy!’; } else { $kom = ‘Niestety, nie można było usunąć wskazanego bannera!’; } else { $kom = ‘Nie podałeś, który banner chcesz usunąć. Wróć do listy i wskaż ponownie!’; } print $kom; > |
Za pomocą zapytania i przekazanej do skryptu zmiennej ‘$co’ usunęliśmy wskazany banner. Oczywiście skrypt zwraca na końcu odpowiedni komunikat w zależności, od tego czy zapytanie do bazy danych powiodło się i czy przekazana zmienna ‘$co’ zawierała jakieś dane. Następnym elementem naszego skryptu będzie stworzenie skryptu do zerowania licznika wyświetleń.
Zerowanie licznika wyświetleń
Otwórz dowolny edytor tekstowy i zapisz nowy dokument jako ‘zeruj.php’. Na samym początku skryptu sprawdzimy czy został podany numer ID bannera, którego licznik chcemy wyzerować.
<? if (isset($co) && $co != ‘’) { $query = “UPDATE rotator SET ilosc = ‘0’ WHERE id = ‘$co’”; if(mysql_query($query)) { $kom = ‘Licznik podanego bannera został wyzerowany!’; } else { $kom = ‘Niestety, nie można było wyzerować licznika wskazanego bannera!’; } else { $kom = ‘Nie podałeś, którego bannera licznik chcesz wyzerować. Wróć do listy i wskaż ponownie!’; } print $kom; > |
Jak widać powyższy kod prawie niczym nie różni się od skryptu do usuwania bannerów z bazy. Jedyna różnica to przede wszystkim inne zapytanie do bazy danych oraz treść komunikatów. Ostatnim etapem tworzenia panelu administracyjnego naszego rotatora bannerów będzie stworzenie pliku głównego, który uruchamia poszczególne elementy.
Plik główny
Otwórz edytor tekstu i zapisz nowy dokument jako ‘index.php’. Następnie zastosuj się do poniższego kodu:
<? $sg = ‘index.php’; $datar = date(„YmdHis”); include(‚funkcje.php’); baza_polacz(); ?> |
Na początku utworzyliśmy zmienną ‘$sg’, która przechowuje nazwę pliku głównego, który obsługuje całość skryptu. Następnie zdefiniowaliśmy wcześniej wspomnianą zmienną ‘$datar’ przechowującą aktualną datę w postaci RRRRMMDDGGMMSS. Potem dołączamy do skryptu nasze funkcje, nawiązujemy połączenie z bazą danych i tworzymy konstrukcję strony www z tabelką, w której jedna komórka zawiera menu, a druga komórka skrypt, który będzie ładował odpowiednie elementy strony.
<html> <head> </head> <body> <table cellpadding=0 cellspacing=0 border=1> <tr> <td width=170 height=300 align=left valign=top> <b>Menu</b><br><br> $raquo; <a href=index.php?do=pokaz>pokaż wszystkie </a><br> $raquo; <a href=index.php?do=dodaj>dodaj banner</a><br> </td> <td width=500 align=left valign=top> <? if ($do == ‘pokaz’) { print ‘<b>Wszystkie bannery w bazie</b><br><br>’; include(‘pokaz.php’); } elseif ($do == ‘dodaj’) { print ‘<b>Dodawanie banneru do bazy</b><br><br>’; include(‘dodaj.php’); } elseif ($do == ‘usun’) { print ‘<b>Usuwanie banneru z bazy</b><br><br>’; include(‘usun.php’); } elseif ($do == ‘zeruj’) { print ‘<b>Zerowanie licznika wyświetleń bannera</b><br><br>’; include(‘zeruj.php’); } else { print ‘<b>error 404</b><br><br>Nie ma takiej strony!’; } ?> </td> </tr> </table> </body> </html> |
Oto właśnie został ukończony nasz panel administracyjny całego skryptu. Teraz, aby móc wyświetlać bannery w jakimś miejscu potrzebny nam będzie krótki kod. Przedstawiam go w następnym podpunkcie.
Wyświetlanie bannera
Aby nasz skrypt osiągnął pełną funkcjonalność, należy stworzyć ostateczny kod, który będzie wyświetlał kolejno wszystkie zapisane w bazie bannery i zliczał ilość ich wyświetleń. Na początku będzie nam potrzebny tylko jedne plik tekstowy, który będzie zawierał ID ostatnio wyświetlonego bannera. Nazwijmy go jako ‘ktory.dat’. Następnie otwórz ponownie dowolny edytor tekstu i zapisz nowy dokument jako ‘banner.php’. Następnie zastosuj się do poniższego kodu:
<? baza_polacz(); $query = „SELECT * FROM rotator”; $wynik = mysql_query($query); if (mysql_num_rows($wynik) > 0) { $plik = fopen(‘ktory.dat’, ‘r+’); flock($plik, 1); $wiersz = fread($plik, 10); fclose($plik); |
Za pomocą odpowiedniego zapytania sprawdziliśmy, czy w bazie są jakieś dane. Jeśli tam to przystępujemy do pobrania z pliku ‘ktory.dat’ pierwszego wiersza, który zawiera ID ostatnio wyświetlonego bannera. Teraz w poniższym kodzie pobierzemy dane kolejnego bannera, wyświetlimy sam banner wraz z odwołaniami, a numer ID zapiszemy do pliku ‘ktory.dat’. Ponadto zwiększamy licznik wyświetleń aktualnie wyświetlanego bannera:
$query = „SELECT * FROM rotator WHERE id > ‘$wiersz’ LIMIT 1”; $wynik = mysql_query($query); $rekord = mysql_fetch_array($wynik); $query = “UPDATE rotator SET ilosc = ‘”.$rekord[ilosc]+1.”’ WHERE id = ‘$rekord[id]’”; $wynik = mysql_query($query); $plik = fopen(‘ktory.dat’, ‘w+’); flock($plik, 2); fwrite($plik, $rekord[id]); flock($plik, 3); fclose($plik); print “;<a href=”$rekord” target=_new><img src=”$rekord[banner]”$gt;</a></td>”; } else { print “Brak bannerów w bazie”; } ?> |
Jeśli w bazie nie ma zapisanego żadnego bannera, to zwracany jest stosowny komunikat. Aby użyć tego kodu, należy w odpowiednim miejscy na stronie wkleić poniższy kod:
<? include(‚banner.php’); ?> |
No i cały skrypt jest już gotowy do użycia. Możesz go wzbogacać o dowolne elementy i wykorzystywać na swoich stronach.