Formularze i Adresy
14 July 2008
Comments
Interaktywne aplikacje PHP odbierają od użytkownika setki informacji. Pozwalają one nie tylko zorientować się, kto nas odwiedził, ale także odczytywać zawartość formularzy oraz adresów URL. Mechanizm ich odbierania ewoluował stopniowo. Pierwsze wersje rejestrowały wszystkie nadesłane parametry jako zwyczajne zmienne, lecz począwszy od PHP 4 zarzucono to, gdyż zagrażało bezpieczeństwu wielu skryptów. Dodając nowe parametry można było rejestrować nowe zmienne, które mogły nadpisać zmienne używane w kodzie aplikacji powodując jego błędne działanie (np. zyskanie praw administratora strony przez atakującego). Programista nie mógł także policzyć, ile danych w ogóle do niego trafiło i w jakich zmiennych są zawarte.
Obecnie wszystkie pola są rejestrowane w specjalnych, tworzonych przez skrypt, tablicach asocjacyjnych posegregowane według miejsca, z którego nadeszły. PHP potrafi odbierać informacje:
- Metodą GET (parametry w adresach URL)
- Metodą POST (formularze)
- z serwera
- z ciasteczek
- z sesji (emulowanych przez PHP)
Register_globals
W PHP4 i 5 istnieje w konfiguracji PHP dyrektywa register_globals, która jeżeli jest włączona powoduje rejestrowanie zmiennych otrzymanych z formularzy, odnośników, ciastek czy sesji jako zmienne globalne, co stwarza potencjalne niebezpieczeństwo dla aplikacji. Opcja ta powinna być wyłączona, a skrypt powinny korzystać z omawianych poniżej tablic. Nie należy stosować skryptów wymagających włączonych register_globals. W PHP6 dyrektywa ta zostanie usunięta podobnie jak safe_mode.Adresy URL
Dane pochodzące z adresu URL przechowywane są w tablicy $_GET. Możemy prosto obejrzeć sobie jej konstrukcję:<pre><?php
print_r($_GET);
?>
Formularze
Obsługa formularzy z prawdziwego zdarzenia, którymi można przesyłać setki informacji, odbywa się dosyć podobnie, jak adresów. Różnica jest taka, że wszystko wysyła się wyłącznie z formularza, który posiada parametr "method" ustawiony na "post" (a nie "get") oraz że korzysta się z tablicy $_POST wewnątrz samego skryptu.<?php
if(count($_POST) == 2)
{
echo 'Witaj, '.$_POST['imie'].' '.$_POST['nazwisko'].'!';
}
else
{
echo 'Nieprawidłowa liczba parametrów!';
}
?>
<html>
<head>
<title>Formularz HTML</title>
</head>
<body>
<form method="post" action="nazwaskryptu.php">
Podaj imię: <input type="text" name="imie"/><br/>
Podaj nazwisko: <input type="text" name="nazwisko"/><br/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
I gotowe. Wyślij teraz formularz.
Z kursów języka HTML wiadomo, że istnieją różne typy pól formularzy. Oto, jakie wartości otrzymuje od nich PHP:
<input type="text" name="nazwa"/>
<input type="hidden" name="nazwa"/>
<input type="radio" name="nazwa"/>
<input type="checkbox" name="nazwa"/>
<select name="nazwa">...</select>
<input type="submit" name="nazwa"/>
Na podstawie kursu PHP na Wikibooks, licencja GNU Free Documentation License
RkBlog
Comment article