Co jest grane

Coraz częściej strony WWW nie są statycznymi dokumentami. Istnieje duża liczba serwerów WWW, które umożliwiają dostęp do informacji zgromadzonych w bazie danych. Wbrew pozorom taki serwis nie jest trudny do zrealizowania.

Jeżeli mieszkamy w dużym mieście i chcemy się wybrać do kina, przeglądanie dziesiątek propozycji w gazecie może być dość niewdzięcznym zadaniem. O wiele wygodniejsze jest na przykład skorzystanie z serwisu WWW z repertuarem kinowym, oferującego możliwość wyszukiwania. Jest to typowe zadanie dla skryptów CGI połączonych z bazą danych. Oprócz części przeznaczonej dla widzów taki serwer udostępnia strony, dzięki którym właściciele kin mogą uzupełniać oraz modyfikować informacje dotyczące ich repertuaru.

W drugiej części kursu Perla pokażemy na prostym przykładzie, w jaki sposób takie zadania realizowane są w praktyce. Z myślą o kinomanach przygotujemy prostą bazę danych, z której po wpisaniu daty można uzyskać listę filmów wyświetlanych danego dnia.

Na bazie ASCII

W naszym przykładzie baza danych ma format pliku tekstowego, który może być utworzony za pomocą najprostszego edytora tekstu. Możemy również posłużyć się arkuszem kalkulacyjnym, który potrafi eksportować dane do pliku TXT.

Baza danych składa się z pewnej liczby wierszy. Każdy z nich odpowiada jednemu rekordowi, czyli pojedynczemu zestawowi danych opisujących jeden film. Każdy rekord z kolei zawiera pola oddzielone znakami |. Na potrzeby naszego repertuaru kinowego stworzymy następujące pozycje: data, godzina, tytul_filmu, opis. Nasza baza będzie miała wówczas postać:

05.04.2000|20:00|Dr Żiwago|Wyciskacz łez 05.04.2000|23:00|Godzina duchów|Horror

Po przygotowaniu informacji musimy je w odpowiedniej postaci zaprezentować gościom odwiedzającym naszą witrynę. W tym wypadku użytkownik chcący znaleźć film musi wpisać w formularzu strony WWW datę i godzinę planowanego wyjścia do kina. Następnie wyświetlana jest lista filmów spełniających podane kryteria. Jeśli o danej porze nic nie jest grane, powinien pojawić się odpowiedni komunikat.

Formularz umożliwiający zadanie pytania znajduje się na stronie wyszukiwanie.html i ma następującą postać:

<form method="post" action="/cgi-bin/szukaj.pl"> <p>Proszę podać datę w postaci dd.mm.rrrr</p> <p> <input type="text" name="data_wyszukiwania" size="10" maxlength="10"> </p> <p> <input type="submit" name="Submit" value="Submit"> <input type="reset" name="Submit2"value="Reset"> </p> </form>

Po wysłaniu formularza na serwerze uruchamiany jest skrypt szukaj.pl, który – razem z demonstracyjną bazą danych i plikami HTML – znajduje się na płycie CD- -ROM dołączonej do bieżącego numeru CHIP-a. Pamiętajmy o tym, że w skryptach musimy podać poprawne ścieżki dostępu do folderu instalacyjnego Perla i do pliku bazy danych.

Serwer WWW wyłącznie przekazuje dane do skryptu CGI oraz je od niego odbiera. Obsługa zapytania zadanego przez użytkownika (przeszukanie bazy danych, odpowiednie sformatowanie znalezionych informacji) należy do skryptu CGI.

Przyjrzyjmy się teraz skryptowi szukaj.pl uruchamianemu przez formularz. Podobnie jak w przykładzie z pierwszej części kursu, przesłane dane muszą zostać przetworzone przez procedurę GetFormInput do postaci nadającej się do dalszej analizy. W naszym przypadku jej wynik zapisywany jest w zmiennej o nazwie $data_wyszukiwania Na początku skryptu, w części konfiguracyjnej, podana jest lokalizacja pliku bazy danych. W przypadku Linuksa wpis ten może wyglądać na przykład tak:

$program='/usr/local/apache/htdocs/dane/program.dat';

W systemie Windows możemy spotkać się z następującym zapisem:

$program='c:programyapachehtdocsdaneprogram.dat';

Ważne jest, aby w wierszu tym użyć apostrofów, ponieważ tylko wtedy Perl nie będzie próbował interpretować treści w cudzysłowie. Odwrotny ukośnik (backslash) jest tak zwanym znakiem specjalnym, więc jeśli chcemy wpisać go pomiędzy znakami cudzysłowu, musi być poprzedzony znakiem. Cały wpis wygląda wówczas następująco:

$program="c:\programy\apachehtdocs\dane\program.dat";

Zaletą takiego zapisu jest możliwość wyrażenia fragmentu ścieżki dostępu za pomocą zmiennej, którą oczywiście wcześniej musimy zdefiniować. Mamy wówczas do czynienia z konstrukcją w rodzaju:

$program="serverroot\daneprogram.dat";

Pomiędzy znakami apostrofu Perl zinterpretowałby symbol $ jako zwykły znak tekstowy, a nie jako początek zmiennej.

Jeśli korzystamy z programu Active Perl przedstawionego w pierwszej części kursu, wówczas pod Windows również powinniśmy zapisywać ścieżki dostępu w formacie linuksowym, czyli:

$program='c:/programy/apache/htdocs/dane/program.dat';

Użytkownicy Linuksa i Windows NT/2000 muszą pamiętać o nadaniu właściwych praw dostępu plikom oraz folderom. Jeśli chcemy, aby właściciele kin mogli samodzielnie uzupełniać bazę danych przez Internet za pośrednictwem formularza, wówczas użytkownik, z którego uprawnieniami pracuje serwer WWW, musi mieć prawo zapisu do pliku program.dat Szczególną ostrożność należy zachować, jeżeli skrypty Perla tworzą, modyfikują i kasują pliki. Nigdy nie powinniśmy zezwalać na wykonywanie takich operacji w katalogu źródłowym serwera (zazwyczaj jest to folder o nazwie htdocs lub wwwroot). Tak jak w naszym przykładzie, musimy utworzyć do tego celu specjalną kartotekę.

Zanim skrypt rozpocznie przeszukiwanie bazy danych, odpowiednia procedura sprawdza, czy użytkownik wpisał datę we właściwy sposób. W naszym przykładzie powinna ona mieć formę dd.mm.rrrr, czyli dwie cyfry.dwie cyfry.cztery cyfry. Jeśli wpisany został inny ciąg znaków, wyświetlony zostanie odpowiedni komunikat.

Info
Grupy dyskusyjne
Uwagi i komentarze do artykułu:
#
Pytania techniczne:
#
#
Internet
Matt’s Script Archive
http://cgi.resourceindex.com/
Realm of CGI
http://www.xwolf.com/
Lyles Script Archive
http://ukzone.hypermart.net/scripts/index.shtml
Perl – CGI
http://www.perl-cgi.silesianet.pl/
Sendmail
http://www.dynamicstate.com/
Blat
http://www.interlog.com/~tcharron/blat.html
W dziale Internet | Workshop: język Perl znajdują się przykładowe skrypty
Więcej:bezcatnews