ITW.Tajemnicza.Metoda.GET

advertisement
1
Metoda GET, czyli skąd strona "wie" o co nam chodzi.
1.1 Wprowadzenie
W tym tutorialu spróbujemy zrozumieć, na czym polega przesyłanie danych do strony i w jaki
sposób strona WWW może tych danych użyć do budowania dynamicznej zawartości.
Powstaje pytanie: po co przesyłać jakieś dane do strony? Odpowiedź jest prosta: bo istnieją
strony WWW, które wyświetlają treść, która nie jest statyczna (to znaczy: znana w
momencie, gdy strona jest tworzona).
Przykład #1: serwis bankowy. To jest strona WWW, która wyświetla treść, która jest zmienna
w każdej chwili. Dziś mamy na koncie 40.000., za chwilę możemy mieć 50.000. Innymi słowy,
powinniśmy mieć szablon strony, do którego przekażemy aktualną wysokość środków.
Przykład #2: gra przeglądarkowa, w której chodzimy po mieście. W momencie pisania strony
nie wiemy przecież, ile doświadczenia, przedmiotów itp. ma w danej chwili gracz.
Istnieje bardzo wiele sposobów, w jaki strona może otrzymać dane. My omówimy jeden z
nich - przekazywanie metodą GET. Jest to sposób wykorzystujący mechanizm, który używany
jest także przy tworzeniu formularzy HTML (tu warto by było zajrzeć do odpowiedniego
tutoriala...).
1.2 Podstawy metody GET
Do przekazywania danych do strony używamy adresu jej URL1. Po jego wpisaniu dodajemy
znak zapytania i parę NazwaDanej i WartośćDanej.
Przykład #1:
http://www.wojmos.com/index.php?name=Peter
oznacza, że wywołujemy stronę index.php z serwera www.wojmos.com i prosimy, aby
parametr name miał wartość Peter (co z nim zrobimy - to już druga sprawa).
Przykład #2:
http://szuflandia.pjwstk.edu.pl/~wojmos/itw/sample.php?cena=13
oznacza, że wywołujemy stronę sample.php z katalogu itw, który znajduje się w katalogu
domowym użytkownika wojmos na serwerze szuflandia.pjwstk.edu.pl i prosimy, aby
parametr cena miał wartość 13.
1.3 Metoda GET a formularze
Dlaczego ta metoda nazywa się GET i jaki jest jej związek z formularzami? Przypomnijmy z
wiadomości o tworzeniu formularzy w HTML (dla tych, którym nie chce się zajrzeć do
notatek...), że formularz to zestaw kontrolek, umożliwiających użytkownikowi strony
wprowadzenie danych. Formularze składają się właściwie z dwóch stron: ze strony z polami
do wprowadzenia i ze strony, która "coś robi" z wartościami, które zostały wprowadzone.
1
przypomnijmy: URL (Uniform Resource Locator) to nic innego, jak adres strony WWW.
Spróbujmy zrobić najpierw bardzo prostą stronę z formularzem, zawierającym tylko jedno
pole tekstowe (w formularzu można także umieszczać inne kontrolki - np. checkboxy) i
przycisk OK.
W tym celu umieszczamy w pliku HTML obiekt <form>, a w nim - obiekt <input> oraz obiekt
<button>.
Zwróćmy najpierw uwagę na <form>. Są tam dwa atrybuty: action i method. Atrybut action
określa nazwę pliku, który ma być wczytany wtedy, gdy użytkownik naciśnie na OK. Atrybut
method określa sposób przekazywania danych i powinien być ustawiony na wartość "get"2.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<form action="odbierz.php" method="get">
Podaj imię: <input name="firstname" type="text" />
<button type="submit">OK</button>
</form>
</body>
</html>
Strona wygląda tak (jej adres URL to http://localhost/itw/formularz.html ):
Gdybyśmy teraz nacisnęli OK, pojawi się błąd (bo nie stworzyliśmy jeszcze pliku odbierz.php).
Stwórzmy więc taki plik (na razie będzie w nim sam kod HTML, ale nazwijmy go odbierz.php,
bo za chwilę dołożymy tam kod php):
Plik odbierz.php:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body></body>
</html>
2
dla zainteresowanych - istnieje również druga metoda, nazywa się POST (i, jak łatwo się domyślić, działa
trochę inaczej :D)
Spróbujmy teraz ponownie wczytać plik z formularzem i wypełnić go przykładowym
imieniem:
Klikamy OK i... otrzymujemy stronę na której nic się nie wyświetla:
Nie powinno nas to dziwić - nasz prosty plik odbierz.php właściwie nic nie wypisuje na
ekranie. Ważne jednak jest, aby zwrócić uwagę na adres URL:
http://localhost/itw/odbierz.php?firstname=Paul
Jak widać, nasz formularz dołączył do adresu pliku (http://localhost/itw/odbierz.php)
informację o wpisanym imieniu (?firstname=Paul). To jest właśnie metoda GET. W tym
miejscu warto zastanowić się, skąd wzięła się nazwa danej (firstname). Jeśli zajrzymy do pliku
formularz.html, to zauważmy, że taką obiekt input ma nazwę firstname (<input
name="firstname" type="text" />).
Pozostaje teraz zastanowić się, jak można wykorzystać wpisane w formularzu dane. Tu
właśnie przychodzi nam z pomocą skrypt w PHP. Przed nami dwa zadania. Trzeba:
 przenieść dane z adresu URL do pliku (sprawić, aby były w pliku widoczne)
 zrobić coś z danymi (na przykład wypisać je na ekranie)
Pierwsze z tych zadań wymaga skorzystania ze specjalnej zmiennej języka PHP o nazwie
$_GET. Wygodnie jest po prostu utworzyć zmienną, a następnie przypisać do niej wartość z
adresu URL. Robi się to tak:
<?php
$imie = $_GET['firstname'];
?>
Od tej pory w naszym skrypcie wystarczy odwołać się do zmiennej $imie.
Drugie zadanie jest równie proste. Wystarczy wykonać polecenie echo, na przykład w ten
sposób:
<?php
$imie = $_GET['firstname'];
echo "Wpisałeś imię: $imie";
?>
Nasz plik odbierz.php będzie teraz wyglądał tak:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$imie = $_GET['firstname'];
echo "Wpisałeś imię: $imie";
?>
</body>
</html>
A tak wygląda nasz kod w działaniu:
1.4 Metoda GET z kilkoma polami danych
Powstaje pytanie - czy można przekazać do strony więcej niż tylko jedną daną? Oczywiście tak. Wystarczy zrobić proste doświadczenie z dwoma różnymi polami danych. Nasz plik
formularz.html będzie teraz wyglądał tak:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<form action="odbierz.php" method="get">
Podaj imię: <input name="firstname" type="text" /><br />
Podaj wiek: <input name="age" type="text" /><br />
<button type="submit">OK</button>
</form>
</body>
</html>
Po kliknięciu OK, adres URL pliku będzie wyglądał tak:
http://localhost/itw/odbierz.php?firstname=Paul&age=15
Jak widać, teraz do adresu po znaku ? dodawane są dwie pary nazwa-wartość, rozdzielone
znakiem &:
http://localhost/itw/odbierz.php?firstname=Paul&age=15
Warto też sprawdzić, jak można zbudować plik odbierz.php, który będzie działał tak:
Poniżej - jego kod:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$imie = $_GET['firstname'];
$wiek = $_GET['age'];
echo "Twoje imię to $imie i masz $wiek lat.";
?>
</body>
</html>
1.5 Metoda GET bez formularzy
Co ciekawe, wcale nie trzeba stosować metody GET w połączeniu z formularzami! Okazuje
się, że możemy "udawać", że skorzystaliśmy z formularza po prostu wpisując w przeglądarkę
odpowiednio przygotowany adres URL.
Powróćmy do poprzedniej wersji pliku odbierz.php:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$imie = $_GET['firstname'];
echo "Twoje imię to $imie.";
?>
</body>
</html>
Załóżmy, że nie korzystamy z pliku formularz.html i po prostu wpisujemy w pole adresowe
przeglądarki taki oto URL: http://localhost/itw/odbierz.php?firstname=Stephen
1.6 Metoda GET w połączeniu z if
Pozostaje ostatni krok - wykorzystanie polecenia warunkowego (if) do zmiany zachowania
strony w zależności od tego, co wprowadził użytkownik.
Spróbujmy zrobić plik, który pokaże na ekranie przedmiot, którego nazwę podamy metodą
GET. Załóżmy, że wystarczy nam, że nasz skrypt będzie rozpoznawał dwa przedmioty: fajkę i
kieliszek. Zanim jednak będziemy pokazywać przedmiot, spróbujmy zrobić prostsze zadanie napiszmy po prostu jego nazwę.
Oto skrypt (nazwaliśmy go item.php):
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$przedmiot = $_GET['nazwa'];
if ($przedmiot=="fajka") echo "To jest FAJKA";
if ($przedmiot=="kieliszek") echo "To jest KIELISZEK";
?>
</body>
</html>
I jego działanie:
Ważna uwaga: instrukcja if sprawdza tzw. warunek (czy to, co jest w nawiasie jest PRAWDĄ).
Zwróćmy uwagę na BARDZO WAŻNĄ RZECZ: do budowy warunków używa się znaku
podwójnego "równa się". Podwójne "równa się" oznacza "sprawdź, czy to prawda", zaś
pojedyncze "równa się" to przypisanie wartości do zmiennej.
Dlatego instrukcja poprawna instrukcja if wygląda tak:
if ($przedmiot=="fajka") echo "To jest FAJKA";
a to jest źle:
if ($przedmiot="fajka") echo "To jest FAJKA";
Teraz pozostaje już ostatni krok - wyświetlanie obrazków. Aby było to możliwe, trzeba sobie
takie obrazki wcześniej przygotować.
Załóżmy, że w naszym katalogu utworzymy dwa obrazki (fajka.jpg i kieliszek.jpg):
Teraz musimy sprawić, aby nasz skrypt pokazywał odpowiedni obrazek. Posłużymy się do
tego znowu instrukcją echo (w połączeniu z if):
W HTML wstawienie obrazka wygląda tak: <img src="fajka.jpg" />
Aby zrobić to z poziomu (czyli "z wnętrza") skryptu php, stosujemy echo:
echo "<img src="fajka.jpg" />";
Tu jednak drobna uwaga - taka instrukcja w PHP nie zadziała poprawnie, bowiem echo
wypisuje wszystko POMIĘDZY pierwszym a drugim cudzysłowem! To oznacza, że nasz serwer
sądzi, że chcemy wykonać taką instrukcję:
echo "<img src="
Powinna się ona kończyć średnikiem, ale tam go nie ma - skrypt działa błędnie.
Aby go poprawić, musimy "powiedzieć" skryptowi php, że oznaczone na czerwono
cudzysłowy nie są początkiem i końcem napisu, tylko zwykłymi znaczkami do wypisania:
echo "<img src="fajka.jpg" />";
Takie "powiedzenie" uzyskujemy stosując specjalny znak zwany backslashem: \. Jego
znaczenie (czasem nazywa się go znakiem ucieczki, czyli escape code) jest następujące:
następny po nim znak jest traktowany wyłącznie jako coś do wypisania na ekranie.
Nasza postać instrukcji echo będzie więc wyglądała tak:
echo "<img src=\"fajka.jpg\" />";
Teraz dodajmy do tego instrukcję if. Jeśli nasz przedmiot to fajka, to trzeba wyświetlić
obrazek fajki:
if ($przedmiot=="fajka") echo "<img src=\"fajka.jpg\" />";
Pozostaje tylko przygotować skrypt do wyświetlenia fajki lub kieliszka:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$przedmiot = $_GET['nazwa'];
if ($przedmiot=="fajka") echo "<img src=\"fajka.jpg\" />";
if ($przedmiot=="kieliszek") echo "<img src=\" kieliszek.jpg\" />";
?>
</body>
</html>
A oto działanie naszego skryptu, gdy podamy jako nazwę słowo fajka lub kieliszek:
Download