background image

INTERNET: workshop - udost pnianie bazy danych w Internecie

Płytoteka Wst p

1. Instalacja Personal Web...

2. Przygotowujemy tabele

3. Konfigurujemy ODBC

4. Najpierw projekt

5. Poł czenie z baz

6. Dodawanie nowej płyty

7. Przeszukiwanie bazy

8. Modyfikacja informacji

Marcin Nowak

Jeszcze niedawno udost pnianie baz danych przez Internet było sztuk  zarezerwowan  dla nielicznych. Dzi , dzi ki

darmowym narz dziom, mo e to zrobi  ka dy, kto zna podstawy HTML-a oraz Visual Basica.

W CHIP-ie 1/98 przedstawili my ASP - technologi  umo liwiaj c  łatwe tworzenie aktywnych witryn WWW.

Poka emy, jak za jej pomoc  udost pni  mał  baz  danych, przechowuj c  informacje o płytach b d cych w

posiadaniu kilku osób, na przykład kolegów z bloku czy akademika. Do tego celu wykorzystamy Personal Web Server

firmy Microsoft. Posiadacze Windows 98 maj  ten program na płycie instalacyjnej systemu - u ytkowników

poprzedniej wersji "okienek" odsyłamy do kr ka doł czonego do CHIP-a 3/98, gdzie zamieszczono Option Pack.

Zarówno wersja znajduj ca si  na płycie instalacyjnej Windows 98, jak i b d ca cz ci  pakietu Option Pack zawieraj

ju  ASP. Oczywi cie, aby udost pnia  baz  danych, trzeba j  mie  - my posłu ymy si  danymi przechowywanymi w

dokumencie programu Microsoft Access.

Info

Strona po wi cona standardowi j zyka SQL: http://www.jcc.com/sql_stnd.html

Na CD w dziale CHIP-offline | Internet | Workshop:ASP znajduj  si  filmy ilustruj ce wybrane fragmenty artykułu oraz

pliki witryny zrealizowanej wg wskazówek zawartych w artykule

background image

1.

 Instalacja Personal Web Servera

Je li posiadamy płyt  instalacyjn  Windows 98, proces instalacji Personal Web Servera trzeba rozpocz

od uruchomienia odpowiedniego programu z kr ka. W tym celu nale y z menu Start wybra  pozycj

Uruchom i w okienku, które si  pojawi, napisa  x:\add-ons\pws\setup.exe, gdzie x jest liter

oznaczaj c  nap d CD.

W przypadku Option Packa rozpocz cie instalacji jest jeszcze łatwiejsze - wystarczy wło y  płyt  do

nap du, a po uruchomieniu aplikacji do jej obsługi przej  do kategorii Software | Wersje pełne, wybra

Windows NT 4.0 Server Option Pack i klikn  przycisk Instaluj. Wbrew temu, co sugeruje nazwa

programu, zawiera on wersj  PWS dla Windows 95.

Kolejnym krokiem jest podanie miejsca, w którym b d  si  znajdowały serwowane przez nas pliki.

Mo emy zostawi  warto  domy ln  i przej  do nast pnego ekranu. Tutaj instalator zapyta si  o folder,

w którym ma by  zainstalowany

Microsoft Transaction Server

. W tym miejscu równie  nie musimy niczego zmienia  - aby rozpocz

proces instalowania programu, kliknijmy tylko przycisk Dalej.

2.

 Przygotowujemy tabele

W naszej bazie b dziemy udost pnia  dane przechowane w plikach Accessa. Pierwsz  czynno ci , jak

musimy wykona , jest przygotowanie odpowiedniej tabeli, w której b dziemy przechowywa  informacje.

Po uruchomieniu Access zapyta, co chcemy zrobi . Z grupy polece  Tworzy now  baz  danych

u ywaj c wybieramy pustej bazy danych, naciskamy OK i podajemy nazw  pliku, np. CD. Po wybraniu

przycisku OK pojawi si  okno z nasz  baz , nie zawieraj c  jeszcze  adnych tabel. Nast pnie klikamy

przycisk Nowy i tworzymy odpowiednie pola. Ich nazwy oraz typy znajduj  si  w ramce obok. Trzy pola

s  kluczami, co oznacza,  e nie mog  istnie  rekordy maj ce identyczny tytuł płyty, artyst  i wła ciciela -

jedna osoba nie mo e mie  dwu takich samych płyt.

Przy próbie zamkni cia projektu Access zapyta o nazw  tabeli - wpisujemy słowo "CD" i klikamy przycisk

OK. Mo emy tak e wprowadzi  do tabeli kilka rekordów - kolejne b dziemy mogli doda  z formularza

znajduj cego si  na stronach naszego serwisu WWW.

W podobny sposób tworzymy drug  tabel , która b dzie zawiera  spis wła cicieli płyt oraz ich hasła

sprawdzane przy próbie modyfikacji bazy.

Plik z baz  znajduje si  w folderze Moje Dokumenty. Bezpieczniej jest go jednak przenie  tam, gdzie

jest przechowywana reszta udost pnianych plików. Po zamkni ciu Accessa w katalogu Inepub na dysku

C: tworzymy folder DB i tam umieszczamy plik cd.mdb.

3.

 Konfigurujemy ODBC

PWS, podobnie jak wi kszo  programów korzystaj cych z baz danych, nie odwołuje si  do nich

bezpo rednio - wszystkie operacje odbywaj  si  za po rednictwem ODBC. Open DataBase Connectivity

to specjalne sterowniki, umo liwiaj ce komunikowanie zarówno z profesjonalnymi serwerami baz danych,

jak i z informacjami zgromadzonymi w plikach Accessa, Excela czy nawet zbiorach tekstowych. Nie

musimy si  martwi  o zdobycie odpowiednich driverów - zostan  zainstalowane razem z Personal Web

Serverem.

Aby skonfigurowa  ODBC, otwieramy Panel sterowania i wybieramy ikon  32-bitowe ODBC. W oknie

Administrator  ródeł danych ODBC, w zakładce DSN u ytkownika, klikamy Dodaj, uaktywniamy

pozycj  Microsoft Access Driver (*.mdb) i naciskamy klawisz [Enter]. Na ekranie pojawi si  okno

Konfiguracja ODBC Microsoft Access. Tutaj dokonujemy wła ciwej konfiguracji naszego  ródła

danych. Jako Nazwa  ródła danych podajemy CD, a w polu Opis wpisujemy komentarz, np. Baza CD

udost pniana przez Internet. Ostatni  czynno ci  jest wybranie pliku, który zawiera dane. W tym celu

klikamy Wybierz i wskazujemy zbiór o nazwie cd.mdb, który znajduje si  w katalogu c:\inetpub\db.

background image

4.

 Najpierw projekt

Przed przyst pieniem do tworzenia stron musimy zaplanowa  struktur  naszej witryny. Na stronie

głównej (default.htm), oprócz informacji wyja niaj cej co to za serwis, umie cimy trzy odno niki.

Pierwszy b dzie prowadził do strony wy wietlaj cej cał  zawarto  bazy (pokaz.asp), za pomoc

drugiego przejdziemy do dokumentu umo liwiaj cego przeszukiwanie zgromadzonych informacji

(szukaj.asp). Z ostatniego b d  korzysta  osoby, które kupiły now  płyt  i chc , by odpowiednie dane

znalazły si  w bazie (dodaj.asp). Umo liwimy tak e usuwanie płyt z bazy (usun.asp) oraz modyfikacj

istniej cych wpisów (zmien.asp).

tabela CD:

tabela CD

Klucz

Nazwa

Typ

tak

Artysta

znakowe, 100 znaków

tak

Tytuł

znakowe, 100 znaków

tak

Wła ciciel

znakowe, 30 znaków

Wypo yczona

Tak/Nie

Rodzaj

znakowe, 20 znaków

tabela hasła:

tabela hasła

Klucz

Nazwa

Typ

tak

Imie

znakowe, 30 znaków

Hasło

znakowe, 20 znaków

5.

 Poł czenie z baz

Pierwsza strona, któr  przygotujemy, b dzie wy wietlała wszystkie płyty znajduj ce si  w bazie. Musimy

j  oczywi cie zaprojektowa , a pó niej napisa  w HTML-u. Kurs tego j zyka był publikowany w CHIP-ie w

numerach 5/98 - 7/98, 9/98 i 10/98. My skupimy si  na ASP (patrz: CHIP 1/98), które umo liwia

stworzenie aktywnego serwisu, pozwalaj cego odczytywa  informacje z bazy, zapisywa  oraz

przeszukiwa  jej zawarto .

W j zyku VBScript, którego b dziemy u ywali do pisania stron ASP, otwarcie poł czenia z baz  danych

jest realizowane za pomoc  nast puj cych polece :

Set Conn = Server.CreateObject( "ADODB.Connection")

'On Error Resume Next

Conn.Open "DSN=CD;UID=;PWD="

Wywoływana jest metoda CreateObject obiektu Server. Jej argumentem jest nazwa innego obiektu,

umiej cego nawi zywa  poł czenie z baz  danych. Stworzona w rezultacie zmienna Conn zawiera

metod  Open, która otwiera wła ciwe poł czenie. Aby nowo powstały obiekt Conn "wiedział", do jakiej

bazy ma si  odwoła  oraz aby został tam "wpuszczony", musimy poda  nazw   ródła ODBC,

u ytkownika oraz hasło.  rodkow  linijk  wzi to w komentarz - chwilowo nie b dzie nam potrzebna, ale

pó niej zrobimy z niej u ytek.

Podczas

konfigurowania  ródła

danych ODBC musimy

wskaza  plik

zawieraj cy baz

Pami tajmy o tym,  eby wszystkie polecenia VBScriptu oddziela  od pozostałej zawarto ci strony

znakami <% oraz %> .

Aby odczyta  co  z bazy lub do niej zapisa , musimy korzysta  z j zyka SQL. Jego opanowanie nie jest

trudne, ale sprawne posługiwanie si  wymaga wprawy. My ograniczymy si  do kilku prostych polece ,

konfigurowanie

background image

umo liwiaj cych manipulowanie naszymi danymi.

Do wydobycia wszystkich rekordów z naszej bazy, uporz dkowanych alfabetycznie po polu artysta oraz

tytul, skorzystamy z nast puj cego zapytania:

SELECT * FROM CD ORDER BY Artysta, Tytul

Takie polecenie zapiszemy w zmiennej sql, której u yjemy przy odwoływaniu si  do bazy danych:

sql = "SELECT * FROM CD ORDER BY Artysta, Tytul"

Set rst = Conn.Execute(sql)

W wyniku wykonania powy szych polece  zostanie zadane zapytanie, a jego wyniki znajd  si  w

zmiennej rst. Zawiera ona wszystkie odczytane z bazy rekordy, ale w danej chwili pozwala na

odwoływanie si  tylko do jednego z nich. Chc c odczyta  kolejne, musimy wywoła  polecenie rst.Move-

Next, które przewija "okienko" w zbiorze rekordów na nast pny. Istnieje tak e mo liwo  poruszania si

wstecz - aby to zrobi , nale y u y  innej metody - rst.MovePreviousRst to kolekcja - zawiera wiele

zmiennych, w tym przypadku poszczególne pola rekordu, do których mo emy odwoływa  si  przez

nazwy. Po odczytaniu danych mo na zamkn  poł czenie, wywołuj c metod  Close. Je li tego nie

zrobimy, zostanie ono zamkni te automatycznie po zako czeniu wykonywania zawarto ci strony WWW.

Wypisanie na ekran tabeli z wszystkimi odczytanymi z bazy rekordami oraz zamkni cie poł czenia

realizowane jest nast puj c  grup  polece :

<TABLE><TR><TH>Artysta</TH>

<TH>Tytuł</TH><TH>Wła ciciel</TH>

<TH>Rodzaj muzyki</TH>

</TR>

<%Do While not rst.eof%>

<TR><TD><%=rst("Artysta")%></TD>

<TD><%=rst("Plyta")%></TD>

<TD><%=rst("Wlasciciel")%></TD>

<TD><%=rst("Rodzaj")%></TD>

<TD>

<% if rst("wypozyczona") = "1" then response.write "wypo yczona"

else response.write " "

end if%>

</TD></TR>

<%rst.movenext Loop Conn.Close%>

</TABLE>

W p tli wy wietlaj cej tabel  ze spisem zgromadzonych przez nas płyt u yli my EOF: wła ciwo ci zbioru

rekordów umo liwiaj cej sprawdzenie, czy dotarli my do ostatniej porcji danych. Aby by  pewnym,  e na

tworzonej wła nie stronie nie wyst puje  aden bł d, musimy zrobi  to samo zaraz po zadaniu zapytania.

Gdyby bowiem w bazie danych nie było  adnych informacji, wy wietliliby my pust  tabel  - znacznie

bardziej elegancko b dzie wygl dał komunikat Baza jest pusta.

Do umieszczenia czego  na ekranie u yli my funkcji

Response.Write, ale je li na stronie jest du o statycznego tekstu i w niewielu miejscach wypisujemy

warto ci zmiennych, zamiast konstrukcji

<%Response.write Request("imie")%>

mo emy u ywa

<%=Request("imie")%>

Wszystkie informacje przechowywane w bazie maj  polskie "ogonki" w standardzie CP-1250, tymczasem

w Internecie obowi zuje norma ISO-8859-2. Oznacza to,  e przed wy wietleniem czegokolwiek musi by

dokonana konwersja. Gdyby my przechowywali dane na serwerze SQL, odpowiedni sterownik ODBC

dokonywałby jej automatycznie. Poniewa  u ywamy plików Accessa, musimy robi  to samodzielnie - w

tym celu napiszemy własn  funkcj . U yjemy w niej funkcji Replace, która potrafi zamieni  dowolny

fragment ła cucha znaków na inny, np.: test = Replace(test, " ","Q"). Nie konwertujemy wszystkich

znaków, gdy  tylko literki  ,  ,  ,  ,  ,   maj  ró ne kody w obydwu standardach. Za ka dym razem, gdy

b dziemy odczytywa  jakie  dane z bazy, zamiast rst("nazwa_pola") b dziemy pisa

w2i(rst("nazwa_pola")). Przy zapisywaniu u yjemy funkcji wykonuj cej czynno  odwrotn .

background image

6.

 Dodawanie nowej płyty

Nasza witryna ma umo liwia  dodawanie płyt do bazy. W tym celu na stronie WWW musimy umie ci

formularz, w którym posiadacz nowego tytułu b dzie mógł poda  dotycz ce go informacje. Elementom

formularza nadamy takie nazwy, jakie maj  odpowiadaj ce im pola w bazie. Znajdzie si  tam równie

pole, w którym trzeba b dzie wpisa  swój identyfikator oraz hasło, co uniemo liwi postronnym osobom

dokonywanie zmian. Poniewa  hasła znajduj  si  w osobnej tabeli, na stronie wy wietlanej po wysłaniu

formularza musimy zada  dwa zapytania - jedno o hasło oraz drugie, umieszczaj ce informacje w bazie.

Dane do naszej bazy

mo emy dodawa  z

poziomu Accesa

Dane wysłane przez formularz znajduj  si  w kolekcji o nazwie Request. Odwołujemy si  do nich,

podaj c nazwy pól formularza, tak samo, jak robili my to w przypadku zmiennej rst. Polecenie

konstruuj ce zapytanie o hasło b dzie wi c wygl da  nast puj co (cało  to jedna linia):

sql = "SELECT Imie FROM Hasla WHERE Imie = '" & Request("Wlasciciel") & "' AND haslo = '" &

Request("haslo") & "'"

Je eli po jego zadaniu wła ciwo  EOF zbioru danych b dzie równa FALSE, oznacza to,  e został

zwrócony jaki  rekord. Istnieje wi c u ytkownik z takim hasłem i ma prawo do umieszczenia w naszej

bazie nowej płyty.

Dotychczas tylko wyci gali my informacje z bazy - aby w niej co  zapisa , musimy skonstruowa  nowe

zapytanie, oparte na słowie INSERT.

sql = "INSERT INTO Plyty VALUES ('"

sql = sql & Request("Artysta") & "', '"

sql = sql & Request("Tytul")

sql = sql & "', " & Request("Rodzaj")

sql = sql & ", '" & Request("Wlasciciel")

sql = sql & "', "

sql = sql & Request("Wypozyczona") & ")

Zwró my uwag ,  e pole Wypozyczona nie jest uj te w apostrofy. W przeciwie stwie do warto ci

pozostałych, b d cych typu tekstowego, jest ono liczb .

Mo e si  zdarzy ,  e z jakiego  powodu, na przykład usuni cia pliku z informacjami o płytach, na

naszych stronach wyst pi bł d. Mo e by  on spowodowany wieloma czynnikami, których nie jeste my w

stanie przewidzie . W przypadku napotkania nieprawidłowo ci ASP przerywa wykonywanie zawarto ci

strony i wy wietla komunikat o bł dzie. Nie wygl da to zbyt profesjonalnie, tym bardziej  e jest on

niezrozumiały dla typowego u ytkownika i zawiera dziwne liczby, nie mówi ce wiele zaskoczonemu

go ciowi naszej witryny. Ponadto, je li całe zdarzenie zajdzie podczas tworzenia tabeli z informacjami o

płytach, nie zostanie ona zako czona prawidłowo i jej zawarto  nie b dzie widoczna - tak e komunikat o

bł dzie. Mo emy jednak go "przechwyci " i wypisa  na ekranie informacj , która nikogo nie wprawi w

osłupienie.

Na stronie wy wietlaj cej zawarto  naszej bazy znajduje si , wzi te w komentarz, polecenie On Error

Resume Next. Je li usuniemy pocz tkowy apostrof, wszystkie pojawiaj ce si  pó niej bł dy zostan

zignorowane. Nie oznacza to jednak,  e nie b dziemy o nich wiedzie  i przegapimy je. Istnieje obiekt Err,

który zawiera informacje o ostatnim bł dzie. Niestety, sami musimy sprawdza , czy co  si  stało. Dlatego

po poleceniu, które zadaje zapytanie, umie cimy nast puj cy fragment kodu:

<% If (Err.Number <> 0) then

Response.Write "Wyst pił bł d, informacje nie zostały zapisane."

Else Response.Write "Informacje o płycie zostały zapami tane."

End if% >

Wła ciwo  Number obiektu Err zawiera informacje o nu-merze bł du, który wyst pił podczas

wykonywania ostatniego polecenia. Je li nic złego si  nie zdarzyło, jest ni  0. Pami tajmy o tym,  e je li

w jednym miejscu wył czyli my sygnalizowanie bł dów, obowi zuje to w całym dokumencie i mo emy

nie zauwa y  naszych kolejnych pomyłek. Dlatego polecenie On Error Resume Next powinno by

wzi te w komentarz, dopóki nie przekonamy si ,  e nasza strona działa poprawnie.

background image

7.

 Przeszukiwanie bazy

Nasz serwis nie byłby w pełni funkcjonalny, gdyby nie miał mo liwo ci przeszukiwania zgromadzonych w

nim informacji. Pierwsz  czynno ci  jest przygotowanie odpowiedniego formularza. B dzie on umo liwiał

przeszukiwanie bazy po dowolnym polu. Jego przykładowy kod znajduje si  w ramce na poprzedniej

stronie.

Pierwsz  czynno ci , która zostanie wykonana po wysłaniu formularza, powinno by  sprawdzenie, czy

był on wypełniony. Je li nie, u ytkownika ode lemy do strony, która wy wietla cał  zawarto  bazy.

U yjemy tzw. przekierowania, czyli komendy protokołu HTTP, wysyłaj cej informacj  o nowej lokalizacji

strony.

Poniewa  wszystkie nagłówki HTTP (równie  ten o przekierowaniu) s  wysyłane przed zawarto ci

strony, odpowiednie polecenia VBScriptu musz  znale  si  na samym pocz tku pliku ASP.

Nasza baza umo liwia

przeszukiwanie

zgromadzonych w niej

danych

Po sprawdzeniu,  e formularz nie został wypełniony, wysyłamy przekierowanie i ko czymy wykonywanie

strony:

If Request("artysta")="" AND Request("tytul")="" AND Request("wlasciciel")=""

then Response.Redirect ("http://" & Request.ServerVariables("SERVER_NAME") & "pokaz.asp")

Response.End

Gdyby my nie wykonali ostatniego polecenia, zawarto  strony zupełnie niepotrzebnie byłaby dalej

przetwarzana.

Je li formularz został wypełniony, musimy skonstruowa  zapytanie, które "wydob dzie" z bazy

odpowiednie informacje. B dzie si  ono zaczyna  nast puj co:

sql = "SELECT * from Płyty WHERE "

Tre  zapytania oznacza: "Wybierz z tabeli Płyty takie całe rekordy, w których...". Teraz po słowie

WHERE musz  nast pi  polecenia okre laj ce, jakie warunki musz  spełnia  wyszukane rekordy.

Poniewa  zakładamy,  e go  naszej witryny mo e zna  tylko cz

 nazwy płyty albo zespołu, zamiast

znaku =, do porównywania u yjemy operatora SQL-a LIKE i znaków %. Te ostatnie działaj  podobnie jak

gwiazdki przy listowaniu zawarto ci katalogu w DOS-ie - zast puj  dowolny ci g znaków. Dzi ki temu po

podaniu słowa "blue" w ród odpowiedzi znajd  si  zarówno "Kind of blue", jak i "Still got the blues".

Zakładamy,  e je li które  z trzech pól formularza nie zostało wypełnione, mo e mie  dowoln  warto .

Cz

 zapytania dotycz c  artysty formułujemy nast puj co:

<%

If Request("artysta") <> ""

then sql = sql & "artysta LIKE '%"

sql = sql &

Request("artysta") & "%' "

end if

%>

Podobnie post pujemy w przypadkach pozostałych dwu pól. Je li nasze zapytanie jest nieprawidłowe i

wywołuje bł d, dobrze jest, bezpo rednio przed jego zadaniem, wypisa  na ekranie warto  zmiennej

sql; pozwoli nam to przeanalizowa  zapytanie. Najcz stsz  przyczyn  bł dów s  nie domkni te

apostrofy lub operator AND znajduj cy si  na ko cu.

Formularz do przeszukiwania zawarto ci bazy

Podaj kryteria wyszukiwania:

<FORM ACTION="szukaj.asp">

Artysta: <INPUT TYPE="TEXT" NAME="artysta"> <BR>

Tytuł: <INPUT TYPE="TEXT" NAME="tytul"> <BR>

Wła ciciel: <INPUT TYPE="TEXT" NAME="wlasciciel"> <BR>

wyszukiwanie w naszej bazie

background image

Wypo yczona:

<SELECT NAME="wypozyczona">

<OPTION VALUE=""> oboj tnie

<OPTION VALUE="0"> nie

<OPTION VALUE="1"> tak

</SELECT>

<INPUT TYPE="Submit" VALUE="Szukaj"

</FORM>

8.

 Modyfikacja informacji

Ostatnimi funkcjami, w jakie wyposa ymy nasz  baz , jest mo liwo  modyfikowania wpisów oraz ich

usuwania. Najlepiej, na li cie płyt, obok ka dej pozycji zrobi  odno niki prowadz ce do dokumentów

wykonuj cych odpowiednie operacje. Musimy to wykona  tak, by na wywołanej stronie było wiadomo,

który rekord chcemy usun  lub zmodyfikowa . W tym celu do tego dokumentu przekazujemy parametry,

które pó niej odczytamy z kolekcji Request. Umie cimy je w odno niku prowadz cym do omawianej

strony, by wygl dał on np. tak (całe polecenie musi by  w jednej linii):

<A HREF="usun.asp?tytul=Cisza & artysta=Budka+Suflera">usu </A>

Zwró my uwag  na + zast puj cy spacje. Jest wiele znaków, które nie mog  wyst pi  w URL-u i dlatego

ASP ma specjaln  funkcj  - Server.URLEncode - która zamienia spacje na plusy, a pozostałe

niechciane znaki na ci g %nn, gdzie nn to kod znaku w systemie szesnastkowym. Niestety, nie istnieje

aden gotowy mechanizm wykonuj cy czynno  odwrotn  - nale y napisa  własn  funkcj . W projekcie

serwisu umieszczonym na płycie CD doł czonej do magazynu, znajduje si  ona w pliku drequest.inc.

Aby zmodyfikowa  informacje o wybranej płycie, najpierw musimy je odczyta , nast pnie wy wietli  w

formularzu i po naci ni ciu przez u ytkownika przycisku Zapisz zapisa  w bazie. Oczywi cie, za ka dym

razem musimy pami ta  o sprawdzaniu hasła, by tylko wła ciciel mógł dokona  zmian.