Studio projektowe
 



<<< Powrót


Formularze

 

                Formularz w php jest tak ważny jak samo wypisywanie tekstu, żeby nie powiedzieć że bardziej, bo przecież zwykły tekst możemy napisać zwykłym HTML-em. Za pomocą formularza możemy przekazywać dane (zmienne) pomiędzy stronami, wysyłać informacje tekstową do serwera i ją np. zapisywać. Składnia formularza jest zawsze taka sama, zaczynamy od znacznika <FORM> a kończymy na </FORM>. Wewnątrz znaczników wprowadzamy pola tekstowe, pola wyboru radio, przyciski itp.. Na samym początku musimy określić właściwości naszego formularza, robimy to poprzez ustawienie właściwości action oraz method.
 

Właściwość ACTION

określamy tutaj do jakiej strony będziemy przekazywać nasze dane (zmienne). Może to być dowolna strona ze skryptem. Właściwość ustawiana jest za pomocą adresu URI.

Właściwość METHOD

Możemy tu okteślić w jaki sposób będziemy przekazywać informacje, a mamy do dyspozycji dwie metody:

POST – Jest to metoda poufnego przekazywania danych. Informacje przekazywane są ze strony na stronę w zmiennych zadeklarowanych w odpowiednich polach formularza.

GET – Jeśli zdecydujemy że naszą metodą przekazywania danych będzie metoda GET to dane jakie będziemy chcieli przekazać do kolejnej strony będą znajdowały się w adresie URI np. Jeśli zmienną gora wyślemy do strony sudety.php a wartość ustawimy na 1422m to po zatwierdzeniu przyciskiem formularza ukarze nam się strona  o adresie: http://localhost/sudety.php?gora=1422m

 Dodatkowe właściwości jakie możemy nadać naszemu formularzowi to:

·         enctype

·         accept-charset

·         accept

·         name

 W celu poznania szczegółowych opcji wyżej wymienionych właściwości lub zapoznania się z możliwymi atrybutami formularza zachęcam do sięgnięcia po jakiś podęcznik HTML-a lub na jakis dobry kurs albo dokumentacje.

                Jak już wcześniej wspomniałem, wewnątrz naszego formularza może znajdować się kilka różnych pól w których możemy umieścić informację. Każde z tych pól wprowadzamy do naszego formularza za pomocą elementu <INPUT>, a typy naszych inputów mamy następujące:

·         TEXT

·         PASSWORD

·         CHECKBOX

·         RADIO

·         SUBMIT

·         RESET

·         FILE

·         HIDDEN

·         IMAGE

·         BUTTON

 Dla przećwiczenie powyższych elementów i dla zobrazowania struktury formularza napiszmy następujący przykład:

 <form action="gora.php" method="GET">

plik:   <input type=file name=f0><br>
e-mail: <input type=text name=f1><br>
hasło:  <input type=password name=f2><br>

<input type=checkbox name=f3 value=1>Jestem użytkownikiem "Sudety.pl"<br>
<input type=checkbox name=f4 value=1>zgadzam się na przetwarzanie moich danych<br>

<input type=radio name=f5 value="mala">Mała<br>
<input type=radio name=f5 value="duza">Duża<br>

<input type=radio name=f5 value="srednia">Średnia<br>

<input type=submit value="Wyślij">
<input type=reset><br>

</form> 

 Tak skonstruowany formularz przekaże nasze dane do następnej strony czyli gora.php. Oczywiście skrypt który będzie odbierał dane z formularza musi być odpowiednio przygotowany. Można to zrobić następująco: 

gora.php

 <?php

print "twoje dane:<br><br>\n\n\t";
//pobieranie pierwszej zmiennej

print $_GET['f0'];
print "<br>\n\t";

//pobieranie drugiej zmiennej
print $_GET['f1'];
print "<br>\n\t";

//pobieranie trzeciej zmiennej
print $_GET['f2'];
print "<br>\n\t";

//pobieranie czwartej zmiennej
print $_GET['f3'];
print "<br>\n\t";

//pobieranie piątej zmiennej
print $_GET['f4'];
print "<br>\n\t";

//pobieranie szóstej zmiennej
print $_GET['f5'];
print "<br>\n\t";

print "<br><br>zostały wysłane...\n\n\t";
?>

Odebraliśmy i wypisaliśmy dane w formie w jakiej zostały wysłane z formularza. Dla kogoś kto korzystałby z naszego skryptu, sposób w jaki wypisaliśmy dane nie jest do końca czytelny dlatego musimy zamieścić w skrypcie góra.php interpretator który jaśniej przedstawi nam to co właśnie wysłaliśmy. Do interpretowania danych nadesłanych z formularza możemy używać każdej funkcji, jednak jest funkcja która szczególnie przydaje się przy odbieraniu danych. Jest to funkcja „empty” i służy do sprawdzania czy zmienna z której mamy zamiar korzystać w ogóle istnieje i czy nie jest ona pusta. Napiszmy zatem skrypt który będzie nam sprawdzał w pierwszej kolejności czy istnieje zmienna a później będzie tą zmienną odpowiednio interpretował:

<?php

print "twoje dane:<br><br>\n\n\t";
//pobieranie pierwszej zmiennej
if (!empty($_GET['f0'])) //jeśli $_GET['f0']) jest NIE puste
{
print "dołączono plik: \n\t";
print $_GET['f0'];
print "<br>\n\t";
}

//pobieranie drugiej zmiennej
if (!empty($_GET['f1'])) //jeśli $_GET['f1']) jest NIE puste
{
print "Użytkownik: \n\t";
print $_GET['f1'];
print "<br>\n\t";
}

//pobieranie trzeciej zmiennej
if (!empty($_GET['f2']))
{
print "hasło: \n\t";
print $_GET['f2'];
print "<br>\n\t";
}

//pobieranie czwartej zmiennej
if (!empty($_GET['f3']))
{
print "Użytkownik serwisu 'sudety.pl'";
print "<br>\n\t";
}else
{
print "nie jestem użytkownikiem serwisu";
print "<br>\n\t";
}

//pobieranie piątej zmiennej
if (empty($_GET['f4'])) //jeśli $_GET['f4']) jest puste
{
print "Nie zgadzam się na przetwarzanie moich danych";
print "<br>\n\t";
}else
{
print "zgadzam się na przetwarzanie moich danych";
print "<br>\n\t";
}

//pobieranie szóstej zmiennej
if (!empty($_GET['f5']))
{
print "Kategoria góry: \n\t";
if ($_GET['f5'] == "duza") print "Duża";
if ($_GET['f5'] == "mala") print "Mała";
if ($_GET['f5'] == "srednia") print "Średnia";
print "<br>\n\t";

}
else print "nie określono kategorii";
print "<br><br>zostały wysłane...\n\n\t";
?>

Jak do tej pory zajmowaliśmy się formularzami których dane wysyłaliśmy za pomocą metody GET. Nadszedł czas aby przyjrzeć się drugiej z metod POST. Za każdym razem kiedy wysyłaliśmy jakieś informacje za pomocą naszego formularza, w pasku adresu naszej strony pojawiał się dziwny długi "szyfr". Składał on się z nazwy naszego hosta, nazwy naszej strony php i z ciągu znaków zaczynającego się od znaku "?". Ten ciąg znaków to własnie dane jakie wysyłaliśmy do następnej strony. Dane są przekazywane w formie dosyć czytelnej, bo dla każdej zmiennej wypisywana jest jej nazwa oraz po znaku "=" wartość. Każda następna zmienna zaczyna się "&" - łącznik danych. np.:

http://localhost/gora.php?f0=Michał&f1=dd45&f2=&f3=1&f4=1&f5=srednia

Na podanym przykładzie widać jakie dane wpisaliśmy w formularzu. O ile czasami jest to bardzo wygodne to w tym przypadku nie jest to po prostu bezpieczne. Jednym z naszych pól było pole "hasło", pole to wymaga specjalnego traktowania. Jeśli wyślemy dane z hasłem za pomocą metody GET to istnieje możliwość że ktoś może poznać nasze poufne dane i korzystać z naszych usług bez naszej wiedzy. Trzeba bowiem pamiętać że system Windows zapamiętuje adresy przeglądanych stron. Jak zatem zrobić bezpieczną stronę która będzie mogła nam służyć np. do logowania użytkowników? Stwórzmy stronę login.php:

<form action=form.php method=post>

użytkownik: <input name='log' type=text ><br>
hasło: <input name='pass' type=password>
<br><br>
<input type=submit walue="wejdź">

</form>

Oraz skrypt form na której umieszczamy wszystkie usługi użytkownika:

<?php

if (!empty($_POST['log']))
{
if (!empty($_POST['pass']))
{
if (($_POST['log'] == "michal") && ($_POST['pass'] == "bbx3"))
{
print "Zalogowałeś się prawidłowo<br><br>Witamy w serwisie!";
}else print "Nie ma takiego użytkownika lub hasło jakie wprowadziłeś jest nieprawidłowe<br><br>Prosimy spróbuj ponownie.";

}else print "Nie wpisałeś hasła!";

}else print "Żeby wejść do serwisu musisz wpisać swój login a póżniej hasło!";

?>

Za pomocą formularza login wprowadzamy nasze poufne dane a skrypt form.php (czyli ten drugi) analizuje je i wyświetla odpowiedni komunikat. Naszych danych nigdzie nie widać a metoda przekazywania informacji jest bardzo podobna do metody GET. Na wypadek gdyby ktoś się nie dopatrzył się jaki jest prawidłowy login i hasło i nie może się prawidłowo zalogować podaję: login: michal, hasło: bbx3.