PHP/Formularze: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nie podano opisu zmian
 
Linia 41:
Przyjrzymy się zawartości tablicy:
 
<sourcesyntaxhighlight lang="php" line><?php
var_dump($_GET);
</syntaxhighlight>
</source>
 
Wywołując skrypt normalnie: http://localhost/~programowanie_php/nazwaskryptu.php otrzymamy następujący rezultat:
Linia 57:
Napiszemy teraz prosty skrypt wyświetlający informacje powitalne na podstawie danych z adresu:
 
<sourcesyntaxhighlight lang="php" line><?php
if(sizeof($_GET) == 2)
{
Linia 66:
echo 'Nieprawidłowa liczba parametrów!';
}
</syntaxhighlight>
</source>
 
Nie przejmuj się istnieniem konstrukcji, której jeszcze nie poznaliśmy. Niektórzy pewnie domyślili się, co ona robi, ale szczegóły będą podane już w następnym rozdziale. Na razie wpiszmy ją tak, jak jest. Funkcja <code>sizeof()</code> pojawiająca się w kodzie zwraca ilość elementów w tablicy. Sprawdzamy w ten sposób, czy użytkownik podał to, co trzeba. Kontrola nadchodzących danych jest niezwykle istotna i '''nigdy''' nie wolno jej zlekceważyć. Pominięcie tego aspektu zazwyczaj kończy się dla skryptu tragicznie, bo jeżeli coś jest do zepsucia, na pewno znajdzie się ktoś, kto tego dokona.
Linia 72:
Wywołując skrypt z parametrami "imie" oraz "nazwisko" możemy wpływać na wyświetlane informacje: [http://localhost/~programowanie_php/nazwaskryptu.php?imie=Adam&nazwisko=Kowalski http://localhost/~programowanie_php/nazwaskryptu.php?imie=Adam&nazwisko=Kowalski]. Dla lepszego efektu stwórzmy prosty formularz XHTML wysyłający dane metodą GET:
 
<sourcesyntaxhighlight lang="xml" line><?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
Linia 92:
</body>
</html>
</syntaxhighlight>
</source>
 
Choć tworzenie formularzy teoretycznie pasuje do następnej sekcji, tak naprawdę w tym momencie zwyczajnie oszukujemy. Wypełnij ten formularz i wyślij go, a zobaczysz, że przeglądarka dokleiła do pliku podanego w znaczniku FORM parametry utworzone na podstawie pól! Tak więc nasz skrypt nawet nie ma możliwości stwierdzenia, skąd dane do niego przyszły! Poznajmy zatem metodę POST...
Linia 100:
Obsługa formularzy z prawdziwego zdarzenia, którymi można przesyłać setki informacji, odbywa się dosyć podobnie, jak w przypadku użycia w formularzu metody "get" do przesyłania adresów z parametrami. Różnica jest taka, że wszystko wysyła się wyłącznie z formularza, który posiada parametr "method" ustawiony na "post" oraz że korzysta się z tablicy <code>$_POST</code> wewnątrz samego skryptu. Przeróbmy nasze ostatnie dzieło tak, aby pracowało w ten sposób.
 
<sourcesyntaxhighlight lang="php" line><?php
if(count($_POST) == 2)
{
Linia 109:
echo 'Nieprawidłowa liczba parametrów!';
}
</syntaxhighlight>
</source>
 
W skrypcie podmieniamy jedynie nazwy tablic na <code>$_POST</code>. W formularzu musimy jeszcze zmienić metodę:
 
<sourcesyntaxhighlight lang="html4strict" line><html>
<head>
<title>Formularz HTML</title>
Linia 125:
</body>
</html>
</syntaxhighlight>
</source>
 
I gotowe. Wyślij teraz formularz. Zauważ, że żadna informacja nie jest doklejana do adresu, ponieważ transmisja odbywa się niejako innym kanałem.
Linia 145:
Na sam koniec zostawiliśmy sobie kilka informacji przekazywanych interpreterowi przez serwer WWW (np. Apache). Zacznijmy od określenia adresu IP gościa:
 
<sourcesyntaxhighlight lang="php" line><?php
echo 'Witaj, twój adres IP to '.$_SERVER['REMOTE_ADDR'].'!';
</syntaxhighlight>
</source>
 
Ten skrypt pokaże nam adres IP komputera lub sieci, w której znajduje się internauta. W tym drugim przypadku dalsze informacje są niepewne. Serwerowi potrzebny jest wyłącznie ten adres, aby móc gdzieś wysłać rezultat, a pola <code>$_SERVER['HTTP_X_FORWARDED_FOR']</code> lub <code>$_SERVER['HTTP_CLIENT_IP']</code> są bardzo niepewne - generuje je właśnie serwer proxy, ale nic nie stoi na przeszkodzie, by podszył się pod nie hacker. Uznawanie ważności informacji tu zawartych było przyczyną wielu błędów bezpieczeństwa w popularnym skrypcie forów dyskusyjnych phpBB i jeżeli naprawdę zależy Ci na nim, pozostań przy ''REMOTE_ADDR'', a resztę traktuj wyłącznie jako ciekawostkę.
Linia 153:
Korzystając z funkcji <code>gethostbyaddr()</code> możemy uzyskać nazwę hosta, którego dotyczy adres IP:
 
<sourcesyntaxhighlight lang="php" line><?php
echo 'Witaj, twój host to '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'!';
</syntaxhighlight>
</source>
 
Spróbujmy zidentyfikować przeglądarkę użytkownika:
 
<sourcesyntaxhighlight lang="php" line><?php
echo 'Twoja przeglądarka została zidentyfikowana jako: '.$_SERVER['HTTP_USER_AGENT'].'!';
</syntaxhighlight>
</source>
 
Pole to zawiera wyłącznie surowe informacje. Każda przeglądarka wpisuje tu co innego i dlatego wyciągnięcie ładnych i pogrupowanych w odpowiednie kategorie danych to zadanie na więcej, niż jeden artykuł. Pozostańmy zatem przy takiej postaci, a przetwarzaniem nagłówków przeglądarek zajmiemy się kiedy indziej.
Linia 169:
Uwaga: nie można polegać na obecności i prawidłowości tej informacji. Istnieją przeglądarki i zapory ogniowe, które ją usuwają lub wstawiają tam dowolny adres podany przez użytkownika.
 
<sourcesyntaxhighlight lang="php" line><?php
echo 'Przybyłeś do nas ze strony: '.$_SERVER['HTTP_REFERER'].'!';
</syntaxhighlight>
</source>
 
W chwili obecnej to tyle, jeżeli chodzi o pobieranie danych. Dalszych informacji dowiemy się w trakcie następnych rozdziałów w miarę potrzeby.