INTERNET ZASTOSOWANIA Workshop PHP Apache Płytoteka

background image

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.

background image

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

background image

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.

background image

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.

background image

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.

background image

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.

background image

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;

background image

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.

background image

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.


Wyszukiwarka

Podobne podstrony:
INTERNET Workshop BazaDanych ASP Płytoteka
Jak wymieniać dane pomiędzy różnymi językami skryptowymi z zastosowaniem WDDX, PHP Skrypty
Jak stworzyć koszyk zamówień do sklepu internetowego z wykorzystaniem cookies, PHP Skrypty
ZASTOSOWANIA Serwery WWW Apache
Protokoły internetowe, zasada działania internetu, zastosowanie arkusza kalkulacyjnego
INTERNET Workshop Język Perl Apache
PHP i MySQL Tworzenie sklepow internetowych Wydanie II
PHP, MySQL i Apache dla kazdego Wydanie III
PHP, MySQL i Apache dla kazdego Wydanie II
INTERNA, Interna - all, ALERGIE: niepożądane działanie leku jt szkodliwy wpływ substancji leczniczej
PHP, MySQL i Apache dla kazdego Wydanie II
Apache i skrypty PHP
PHP MySQL SQL CGI bazy danych w internecie, Oracle, Oracle - materiały różne
Oracle Database Tworzenie aplikacji internetowych w AJAX i PHP ordatw
PHP i MySQL Tworzenie sklepow internetowych Wydanie II
Apache SSL PHP fp
PHP 5 i MySQL Zastosowania e commerce p5meco
AJAX i PHP Tworzenie interaktywnych aplikacji internetowych Wydanie II ajpht2

więcej podobnych podstron