ZASTOSOWANIA:
workshop - PHP 3.0.12
Płytoteka inaczej
Wst p
1.Wybieramy narz dzia
2.Instalacja PostgreSQL
3.Apache i PHP - dobra z nich...
4.Projekt płytoteki
5.Projekt serwisu WWW
6.Dost p do bazy
7.Przekazywanie parametrów
8.Konstrukcja stron
Składnia podstawowych polece ...
Jerzy Kebel
Ju dawno temu witryny internetowe przestały prezentowa statyczny tekst i pełni
wył cznie funkcje informacyjne. Udost pnianie i modyfikowanie zawarto ci baz danych za
po rednictwem WWW stały si jedn z podstawowych usług tego medium.
Obsługa baz danych nie jest ju tylko domen wielkich korporacji, dysponuj cych znacznymi rodkami.
Istnieje sporo darmowych narz dzi wysokiej jako ci, pozwalaj cych praktycznie ka demu prezentowa dane
w Sieci. Zalet podobnych rozwi za nie trzeba nikomu wyja nia . Ka da zmiana zawarto ci bazy jest
natychmiast widoczna w Internecie, bez konieczno ci modyfikowania odpowiednich plików HTML.
Informacje w Internecie i na CHIP-CD
Grupa dyskusyjna:
pl.comp.www
PostgreSQL:
http://www.postgresql.org/
Apache:
http://www.apache.org/
PHP:
http://www.php.net/
J zyk SQL:
http://www.jcc.com/sql_stnd.html
Lista dyskusyjna po wi cona PHP:
http://www.tryc.on.ca/php3.html
Na CD-ROM-ie doł czonym do CHIP-a w dziale
CHIP-offline
|
Zastosowania
|
PostgreSQL i PHP
znajduj si opisywane aplikacje oraz pliki witryny zrealizowanej wg wskazówek zawartych w artykule
Poni ej przedstawiono implementacj bazy danych zawieraj cej zbiór płyt, prezentowany i modyfikowany
za po rednictwem Internetu. Podobne rozwi zanie było ju przedstawiane na łamach naszego magazynu. W
CHIP-ie 1/99 pokazano, jak utworzy podobn "płytotek " w rodowisku Windows za pomoc ASP, Personal
Web Servera oraz Accessa. Tym razem do realizacji tego samego zadania u yjemy Linuksa i aplikacji
pracuj cych w tym systemie.
1.
Wybieramy narz dzia
Wszystkie potrzebne nam programy doł czone s do wi kszo ci dystrybucji Linuksa. W tym tek cie
zakładamy, e Czytelnik dysponuje
Red Hatem 6.0
, jednak równie dobrze mo na tu zastosowa ka d inn
dystrybucj tego systemu oraz wi kszo rodowisk uniksowych, np.
Free BSD
.
tabela CD
Klucz
Nazwa
Typ
tak
Artysta
varchar, 100 znaków
tak
Tytul
varchar, 100 znaków
tak
Wlasciciel
varchar, 30 znaków
Wypozyczona
bool
Rodzaj
varchar, 20 znaków
Zamiast ASP, które jest dost pne wył cznie dla platformy Windows, u yto
PHP
- j zyka skryptowego o
składni wzorowanej na j zyku C. Najnowsz stabiln edycj PHP jest pakiet oznaczony numerem 3.0.12. S
tak e dost pne wersje beta PHP 4, który niedługo powinien pojawi si w postaci
ostatecznej. PHP znakomicie współpracuje z
Apachem
- najpopularniejszym na wiecie serwerem WWW,
którego sposób instalacji został opisany w CHIP-ie 9/99. Dystrybucja Red Hat 6.0 zawiera Apache'a
oznaczonego symbolem 1.3.6, my jednak u yli my jego najnowszej edycji - 1.3.9. Do przechowywania
danych wykorzystano pakiet
PostgreSQL
w wersji 6.5.2. Obok serwerów mySQL i Microsoft SQL jest on
jedn z najcz ciej stosowanych w Internecie baz danych. Podobnie jak wszystkie opisywane w artykule
narz dzia, PostgreSQL jest całkowicie bezpłatny.
Uwaga: mimo i u ywamy najnowszych wersji narz dzi, nale y wcze niej zainstalowa pakiety w formacie
RPM, dostarczane z systemem, z reguły zawieraj ce programy w troch starszych wersjach. Dzi ki temu
zostaniemy wyr czeni z wykonywania niektórych czynno ci, m.in. tworzenia niezb dnych katalogów.
U ytkownicy systemów uniksowych, nie dysponuj cych mened erami pakietów (oprócz Red Hata w
podobne narz dzia wyposa one s Linuksy S.u.S.e., Slackware oraz Debian), musz zapozna si z plikami
INSTALL, doł czonymi do ródeł wszystkich kompilowanych programów. W nich bowiem znajduje si
zawsze dokładny opis dodatkowych zada , z których wykonywania zwolnieni s u ytkownicy wymienionych
dystrybucji Linuksa.
tabela hasła
Klucz
Nazwa
Typ
tak
Imie
varchar, 30 znaków
Haslo
varchar, 20 znaków
2.
Instalacja PostgreSQL
Najbardziej uniwersaln metod instalacji serwera SQL jest przekompilowanie odpowiednich plików
ródłowych. Pierwsza czynno to skopiowanie archiwum zawieraj cego pliki PostgreSQL-a do foldera
/usr/src
. Nast pnie w celu dekompresji pakietu wydajemy polecenie
Zainstalowanie pakietów w formacie RPM uwolni
nas od konieczno ci r cznego wykonywania
niektórych czynno ci
tar -xzf postgresql-6.5.2.tar.gz
W wyniku wykonania tej komendy w katalogu, w którym znajdowało si archiwum, powstanie kartoteka
postgresql-6.5.2
, zawieraj ca pliki ródłowe programu. Do ustawienia warunków kompilacji nale y u y
komendy
configure
, znajduj cej si w podkatalogu
src
. Lista jej parametrów jest długa, ale w praktyce, aby
aplikacja działała poprawnie, wystarczy poda tylko kilka z nich (pozostałe przyjm warto ci domy lne).
Przygotowujemy kompilacj nast puj cym poleceniem:
./configure --prefix=/usr/local/pgsql --enable-locale
Parametr --prefix okre la katalog, w którym zostanie zainstalowana aplikacja, a --enable-locale umo liwia
wykorzystanie lokalnych ustawie systemu, takich jak regionalne znaki diakrytyczne, oznaczenia walut itp.
Nast pnie poleceniem make all rozpoczynamy kompilowanie i - je eli nie wyst pi adne bł dy -
komend make install kopiujemy niezb dne pliki w ich miejsce docelowe. Po zako czeniu tych operacji
baza danych jest gotowa do pracy. Aby uruchomi serwer, wystarczy z konta u ytkownika
postgres
(zostało
ono utworzone przy instalacji pakietu RPM) wykona komend postmaster -i. Dzi ki temu, e
zainstalowali my wcze niej PosgreSQL-a z pliku w formacie RPM, serwis bazy danych b dzie tak e
uruchamiany automatycznie przy kolejnych startach systemu.
3.
Apache i PHP - dobra z nich para
Szczegółow procedur oraz parametry konfiguracyjne Apache'a opisano w CHIP-ie 9/99. Wykorzystamy
pliki ródłowe serwera WWW, gdy musimy go jeszcze raz skompilowa , dodaj c moduł zawieraj cy
obsług PHP.
Najpierw wykonujemy polecenie konfiguruj ce, opisane w CHIP-ie 9/99. Kolejnym krokiem jest
przygotowanie modułu PHP. Czynno t zaczynamy od rozpakowania pakietu:
tar -xzf php-3.0.12.tar.gz
a nast pnie konfigurujemy program komend
./configure --with-apache= /sciezka_do_zrodel/apache-1.3.9 --with-pgsql
PHP mo e zosta skompilowany na wiele sposobów - mo na utworzy moduł Apache'a, zewn trzny
program, mo na te doł czy wiele bibliotek dostarczaj cych ciekawych funkcji, jak na przykład online'owe
tworzenie obrazków w formacie GIF. Parametry u yte przez nas spowoduj , e wynikiem kompilacji b dzie
moduł Apache'a zawieraj cy obsług PostgreSQL-a. cie ka u yta po parametrze --with-apache okre la
katalog, w którym znajduj si pliki ródłowe serwera WWW.
Kolejnym krokiem jest kompilacja, któr rozpoczynamy komend make. Nast pnie nale y przekopiowa
plik konfiguracyjny do katalogu
/usr/local/lib/
poleceniem:
cp php3.ini-dist /usr/local/lib/php3.ini.
Na koniec dodajemy nowo powstały moduł do Apache'a. W tym celu musimy ponownie skompilowa serwer
z opcj aktywuj c moduł PHP. Najpierw przygotowujemy ten proces t sam komend co poprzednio,
dodaj c jeszcze jeden argument:
--activate-module=src/modules/php3/libphp3.a
Nast pnie wydajemy polecenia make oraz make install. Musimy jeszcze skopiowa zbiór
httpd
z
podkatalogu
src
do
/usr/sbin
oraz zmieni nazw pli-
kowi
httpd.conf-default
znajduj cemu si w kartotece
/etc/httpd/conf
na
httpd.conf
.
Ostatni czynno ci jest zmodyfikowanie w zbiorze
httpd.conf
wiersza
#AddType application/x-httpd-php3 .php3,
który okre la, e pliki o rozszerzeniu PHP3 b d rozpoznawane przez serwer jako zawieraj ce skrypty.
Musimy usun pierwszy oraz ostatni znak, gdy nasze skrytpy maj rozszerzenie php.
4.
Projekt płytoteki
Po przygotowaniu wszystkich niezb dnych narz dzi, przyst pujemy do projektowania bazy. W ród narz dzi
doł czonych do PostgreSQL-a jest program
createdb
, przeznaczony do tworzenia nowej bazy. Wykonanie
polecenia createdb plytoteka spowoduje utworzenie w systemie potrzebnej nam bazy. Wraz z ni
powstanie plik
pg_hba.conf
, w którym zdefiniowane s prawa dost pu do zawartych w niej informacji.
Domy lnie dost p do danych maj wszyscy u ytkownicy pracuj cy lokalnie. Dla naszych potrzeb to w
zupełno ci wystarczy, wobec tego nie b dziemy niczego w tym zbiorze zmienia . Do manipulacji
zawarto ci bazy słu y program
psql
, który wywołujemy poleceniem psql plytoteka. Od tej chwili ka da
wpisana komenda traktowana jest jak polecenie SQL. Aplikacja wymaga, aby ka de zapytanie zako czone
było rednikiem.
Utworzony przez nas serwis pozwala prezentowa
zawarto płytoteki na stronie WWW w formie
tabeli
Ten artykuł nie jest po wi cony j zykowi SQL, musimy jednak poda kilka jego podstawowych komend,
gdy komunikacja z baz odbywa si tylko i wył cznie przez zapytania sformułowane w SQL-u. Do
tworzenia tabel słu y konstrukcja
CREATE TABLE Nazwa_tabeli (nazwa_pola1 typ_pola1, nazwa_pola2
typ_pola2...)
. Aby w bazie pojawiły si niezb dne tabele, nale y wykona nast puj ce polecenia:
CREATE TABLE CD (artysta varchar(100), tytul varchar(100), wlasciciel varchar(30), wypozyczona
bool, rodzaj varchar(20),
PRIMARY KEY (artysta, tytul, wlasciciel));
CREATE TABLE Hasla (wlasciciel varchar(30),
haslo varchar(20),
PRIMARY KEY (wlasciciel));
Słowo kluczowe
PRIMARY KEY
definiuje tzw. klucz podstawowy tabeli. W tym przypadku okre la on, e
w tabeli CD nie mog si znale dwa rekordy maj ce takie same warto ci w polach
artysta
,
tytul
i
wlasciciel
oraz e jednej osobie mo e by przyporz dkowane tylko jedno hasło. Zakładamy, i za po rednictwem
przegl darki WWW zmieniane mog by tylko dane zawarte w tabeli CD - konta u ytkowników oraz ich
hasła musz by wpisane wcze niej.
Jedna z konstrukcji j zyka SQL, słu cych do wstawiania nowych rekordów, ma posta :
INSERT INTO nazwa_tabeli VALUES(warto _pola1,warto _pola2)
Ta skrócona forma zapytania wstawia dane do tabeli w takiej kolejno ci, w jakiej zostały one
zadeklarowane przy jej tworzeniu. Prawidłowe wywołanie polecenia definiuj cego hasła dla dwóch
u ytkowników powinno wygl da tak:
INSERT INTO hasla VALUES("Jurek", "ogorek");
INSERT INTO hasla VALUES("Jacek", "placek");
Psql umo liwia tak e wykonanie komend zapisanych w pliku tekstowym. Jest to wygodniejsze, bo
pozwala na wcze niejsze
ich przygotowanie. Słu y do tego polecenie
psql plytoteka -f nazwa_pliku.
5.
Projekt serwisu WWW
Nie mniej wa na od samej bazy danych jest struktura serwisu WWW umo liwiaj cego przegl danie i
modyfikowanie rekordów. Nasz projekt przewiduje utworzenie strony głównej (
default.php
), osobnych
dokumentów do prezentacji zawarto ci bazy (
pokaz.php
), dodawania (
dodaj.php
), modyfikowania
(
modyfikuj.php
) i usuwania rekordów (
usun.php
) oraz strony umo liwiaj cej przeszukiwanie naszego
katalogu płyt (
szukaj.php
). Niektóre z tych zbiorów musz by ze sob logicznie i funkcjonalnie powi zane.
Na przykład aby przej do dokumentu usuwaj cego rekord, trzeba go wcze niej wskaza na stronie
prezentuj cej zawarto bazy. Pliki słu ce do dodawania lub przeszukiwania danych powinny by dost pne
z dowolnego miejsca serwisu.
6.
Dost p do bazy
W wersji bazy przedstawionej w numerze 1/99 dost p do danych zgromadzonych w bazie odbywał si za
pomoc mechanizmu ODBC. Niestety - ten interfejs jest dost pny wył cznie w rodowisku Windows. W PHP
zaimplementowano osobne zestawy funkcji dla najpopularniejszych produktów bazodanowych (mySQL,
Oracle, Adabase, mSQL). PHP, podobnie jak ASP, pozwala na przeplatanie wewn trz strony WWW komend
HTML-a oraz polece j zyka skryptowego. Te ostatnie oddzielone s od reszty znacznikami <? i ?> .
Nawi zanie komunikacji z baz danych wykonujemy nast puj cym poleceniem:
$conection=pg_Connect("host=localhost port=5432 user=postgres dbname=plytoteka");
Zmienna
$conection
identyfikuje nawi zane poł czenie i jest wykorzystywana na przykład przy
odczytywaniu danych z bazy. Parametrem funkcji
pg_Connect
jest ci g znaków zawieraj cy adres serwera
oraz port, na którym pracuje PostgreSQL, nazw u ytkownika, z którego prawami b dziemy odczytywa
informacj , oraz nazw bazy. W PHP wszystkie zmienne poprzedzone s znakiem "$" i - w przeciwie stwie
do VBScriptu u ywanego w ASP - mog wyst powa wewn trz ci gów wypisywanych na ekranie.
Kolejn wa n , wykorzystywan przez nas funkcj jest
pg_Exec()
, która wysyła zapytanie do bazy
identyfikowanej przez zmienn
$conection
. Odpowiednie wywołanie ma posta :
$result=pg_Exec($conection,$sql);
Na podstawie zwracanej warto ci mo na oceni , czy operacja przebiegła pomy lnie i - w razie potrzeby -
obsłu y napotkany bł d. Je li funkcja zwróciła 0, oznacza to, e próba poł czenia z baz si nie powiodła.
Zmienna
$sql
zawiera komend j zyka SQL zadawan bazie.
Funkcja
pg_Exec
jest wykorzystywana zawsze, gdy chcemy co odczyta albo zapisa w bazie; zmienia
si tylko tre zapytania. Na stronie
dodaj.php
jest to opisana ju konstrukcja
INSERT
, wstawiaj ca nowe
rekordy. Do wy wietlania zawarto ci bazy w dokumencie
pokaz.php
u ywamy najwa niejszego polecenia
SQL-a -
SELECT
. W skryptach znajduj cych si w pliku
usun.php
zmienna $sql zawiera konstrukcj
DELETE, a przy tworzeniu dokumentu
modyfikuj.php
wykorzystano polecenie UPDATE. Je eli funkcja
pg_Exec
została wykonana poprawnie, a zapytanie zwróciło jakie
rekordy, to zmienna
$result
zawiera kolekcj danych przesłanych przez baz . Do odczytywania otrzymanych
informacji słu y procedura
pg_Result
, której wywołanie ma posta :
pg_Result($result,$i,nazwa_pola);
gdzie $i jest numerem rekordu odczytywanego z kolekcji.
7.
Przekazywanie parametrów
W PHP s dwa sposoby odczytywania parametrów przekazanych do strony. Pierwszy jest wzi ty
bezpo rednio z j zyka C. Istnieje funkcja
argc()
, która zwraca liczb przekazanych argumentów, a tak e
tablica
argv[]
, przechowuj ca ich nazwy oraz warto ci. S te zmienne o nazwach odpowiadaj cych
parametrom wywołania strony, zawieraj ce ich warto ci. W przypadku odczytania strony w nast puj cy
sposób:
http://adres.pl/usun.php?artysta=madonna
zostanie zainicjowana zmienna
$argv[0]
przechowuj ca warto artysta=madonna oraz
$artysta
równa
madonna.
We wszystkich dokumentach wymagaj cych danych wej ciowych najpierw b dziemy sprawdza , czy
podano odpowiednie parametry. Je li nie, zostanie wy wietlony formularz, w którym u ytkownik b dzie mógł
poda brakuj ce informacje. Po wpisaniu przez niego wszystkich danych bazie zostanie zadane
odpowiednie zapytanie. W poni szym przykładzie sprawdzamy, czy u ytkownik wpisał hasło:
<?
if($haslo==""):?>
<FORM ACTION="usun.php">
<INPUT TYPE="HIDDEN" VALUE=" <? echo $artysta?> " NAME="artysta">
<INPUT TYPE="HIDDEN" VALUE=" <? echo $tytul?> " NAME="tytul">
<INPUT TYPE="HIDDEN" VALUE=" <? echo $wlasciciel?> " NAME="wlasciciel">
Hasło: <INPUT TYPE="PASSWORD" NAME="haslo">
<INPUT TYPE="SUBMIT" VALUE="Usu ">
</FORM>
<?else:
.......
$conection=pg_Connect("host=localhost port=5432 user=postgres dbname=plytoteka");
$result=pg_Exec($conection,$sql);
......
endif;
8.
Konstrukcja stron
Główny dokument, pomimo rozszerzenia PHP, jest zwykł stron HTML. Znajduj si na niej odno niki do
pozostałych cz ci serwisu. Na pierwszym miejscu tej listy umieszczony jest odsyłacz do dokumentu
prezentuj cego zawarto naszego katalogu. Je li ten plik (
pokaz.php
) zostanie wywołany bez parametrów,
nast pi nawi zanie poł czenia z baz i wy wietlenie wszystkich rekordów. Je eli jednak stronie przekazano
parametry pozwalaj ce zaw zi prezentowany zbiór, w oknie przegl darki poka si tylko niektóre rekordy.
Za podanie kryteriów wyszukiwania odpowiedzialny jest dokument
szukaj.php
. Znajduje si tam odpowiedni
formularz, a po naci ni ciu przycisku Szukaj odczytywana jest ponownie strona
pokaz.php
. Tam skrypt PHP
sprawdza, które parametry zostały przekazane, i na tej podstawie modyfikuje zapytanie b d ce argumentem
funkcji
pg_Exec
. Odpowiedni fragment kodu ma posta :
$sql="SELECT * FROM CD WHERE Artysta IS NOT NULL";
if($artysta!=""):
echo " <BR> Artysta: <B> $artysta </B> ";
$sql = "$sql AND artysta like '%'
$artysta .'%'";
endif;
........
$result=pg_Exec($conection,"$sql ORDER BY Artysta,Tytul");
Ka da pozycja naszego katalogu jest wy wietlana w postaci wiersza tabeli, w której ostatnia kolumna
zawiera odno niki do strony modyfikuj cej lub usuwaj cej dane o płycie z bazy. W odsyłaczu, oprócz adresu
dokumentu, znajduj si te parametry kompaktu przeznaczonego do usuni cia lub modyfikacji. W
przykładzie znajduj cym si poni ej u yta została funkcja
UrlEncode
. Dba ona o to, aby niektóre znaki
specjalne wyst puj ce w adresach internetowych (na przykład spacje) były wy wietlane prawidłowo.
Po zainstalowaniu odpowiednich sterownikików
ODBC, mo emy odwoływa si do bazy tak e za
po rednictwem Accesa
<td><A HREF="usun.php?artysta= <? echo UrlEncode(pg_Result($result,$i, "artysta"))?> &tytul= <?
echo UrlEncode(pg_Result($result,$i, "tytul"))?> &wlasciciel= <? echo
UrlEncode(pg_Result($result,$i, "wlasciciel"))?> '> usu </A><A HREF="modyfikuj.php?artysta= <?
echo UrlEncode(pg_Result($result,$i, "artysta"))?> &tytul= <? echo UrlEncode(pg_Result($result,$i,
"tytul"))?> &wlasciciel= <? echo UrlEncode(pg_Result($result,$i, "wlasciciel"))?> "> modyfikuj
</A></td>
Strony modyfikuj.php, usun.php i dodaj.php s zbudowane podobnie. Pierwsze wywołanie dokumentu
wypisuje na ekranie dane płyty przeznaczonej do usuni cia lub modyfikacji oraz formularz do wpisania
hasła. Je eli jednym z parametrów strony jest prawidłowe hasło, wybrana pozycja jest usuwana z bazy lub
modyfikowana. W przypadku wywołania strony dodaj cej rekordy bez parametrów, na ekranie pojawi si
odpowiedni formularz. Je li wszystkie parametry zostały przekazane, odpowiednie warto ci zostan
umieszczone w bazie.
Składnia podstawowych polece SQL-a
CREATE TABLE nazwa_tabeli (nazwa_pola1 typ_pola1, nazwa_pola2 typ_pola2,...,
PRIMARY KEY (nazwa_pola_klucz,...))
Tworzenie tabeli o nazwie
nazwa_tabeli
, o kolumnach
nazwa_polax
i kluczu podstawowym zło onym z pól
zawartych w sekcji
nazwa_pola_klucz
.
SELECT nazwa_pola1, nazwa_pola2 FROM nazwa_tabeli WHERE warunek
Odczytywanie z tabeli
nazwa_tabeli
pól
nazwa_polax
z rekordów spełniaj cych
warunek
. Zamiast nazw pól
mo na wpisa znak
*
, oznaczaj cy wszystkie pola.
INSERT INTO nazwa_tabeli VALUES (warto _pola1,warto _pola2)
Wstawianie rekordu do tabeli
nazwa_tabeli
. Kolejno wypełniania pól jest zgodna z kolejno ci podan
podczas jej tworzenia.
DELETE FROM nazwa_tabeli
WHERE warunek
Usuwanie z tabeli
nazwa_tabeli
wszystkich rekordów spełniaj cych
warunek
.
UPDATE nazwa_tabeli SET nazwa_pola=nowa_wartosc WHERE warunek
Aktualizacja warto ci pola
nazwa_pola
we wszystkich rekordach spełniaj cych
warunek.