Przechwytywanie danych w PHP przesłanych za pomocą formularza HTML

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 13047 razy

Metody przesyłania danych

Istnieją dwie metody przesyłania danych do PHP za pomocą formularza HTML. Pierwsza z nich to GET - przesyła dane jawnie dołączając je do adresu strony. Przykład wyglądu tak wysłanych danych wraz z adresem strony na localhoście wyglądać może następująco: localhost/index.php/?id=100&find=fraza - w tym przykładzie po znaku ? wypisane są zmienne i ich wartości, kolejne zmienne oddzielane są przez znak &. Nazwa zmiennej jest przed znakiem równości a wartość jej przypisana po nim. Dane przesłane tą metodą umieszczane są w specjalnej globalnej tablicy asocjacyjnej o jakże przewrotnej nazwie $_GET.

Druga metoda jest mniej jawna i niewidoczna gołym okiem dla użytkownika a jest to metoda POST. Wysłane tą metodą dane umieszczane są również w globalnej tablicy asocjacyjnej o równie przewrotnej nazwie $_POST.

Przykład formularza w HTML-u

Prosty przykład formularza HTML z wykorzystaniem kilku podstawowych kontrolek:

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Formularz</title> </head> <body> <form action="show_me.php" method="POST"> <p>Kim jesteś?</p> <pre><input type="radio" name="who" value="Kosmita"/>Kosmitą <input type="radio" name="who" value="Człowiek"/>Człowiekiem <input type="radio" name="who" value="Urzędnik państowy"/>Urzędnikiem państwowym</pre> <p>I skąd przybywasz? <input type="text" name="from"/></p> <p>Napisz coś o sobie (tylko krótko powiem):</p> <p><textarea rows="4" name="description" cols="80"></textarea></p> <input type=submit value="Wyślij"/> </form> </body> </html>

W linijce 8 powyższego kodu tworzę sekcję formularza za pomocą znacznika form. Znacznik ten ma dwie opcje:

action="show_me.php"

określającą ścieżkę do pliku, który zostanie wyświetlony po wciśnięciu przycisku utworzonego za pomocą znacznika input z właściwością type = "submit" (przycisk ów znajduje się w linijce 16).

Druga opcja:

method="POST"

określa w jaki sposób będą wysyłane dane z formularza a tym samym gdzie PHP te dane umieści.

W linijce od 10 do 12 tworzone są kontrolki przycisków jednokrotnego wyboru. Przyciski te mają wspólną wartość:

name="who"

dzięki czemu dane z zaznaczonego przycisku zostaną zapisane w tablicy asocjacyjnej $_POST pod indeksem "who". Wartość jaka zostanie wstawiona do tejże tablicy będzie pobrana z opcji value wybranego przycisku.

W linijce 13 wstawiona została kontrolka tekstowa, która jest tutaj jako znacznik input z ustawioną opcją:

type = "text"

Również i w przypadku tej kontrolki wartość opcji name określa indeks w tablicy asocjacyjnej $_POST, gdzie zapisana zostanie tekst wpisany w tą kontrolkę.

Podobną funkcjonalność zapewnia znacznik textarea, który umożliwia wpisywanie tekstu wieloliniowego.

Plik PHP z obsługą wyświetlania danych z formularza

Skoro formularz został już utworzony, najwyższy nadszedł czas i pora by stworzyć plik show_me.php, który obsłuży wyświetlanie danych:

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Wyświetlanko!</title> </head> <body> <?php $who = htmlentities($_POST['who'], ENT_QUOTES, "UTF-8"); // funkcja htmlentities zamienia znaczniki tagów html na encje $from = htmlentities($_POST['from'], ENT_QUOTES, "UTF-8"); $description = htmlentities($_POST['description'], ENT_QUOTES, "UTF-8"); if($who == "Człowiek"){ echo("<p>Witaj Człowieku!</p>"); echo("<pre>Witaj człowieku\nw moich skromnych prograch!\nWidać żeś strudzony\nWięc czym prędzej siadaj\nI mi opowiadaj\nCo tam w wielkim świcie"); echo("<pre>A on mnie tylko ziweną:\nJam z $from wszakże jestem</pre>"); echo("<pre>I dalej się rozgadał:\n$description"); }else if($who == "Kosmita"){ echo("<p>Więc kosmitą jesteś!</p>"); echo("<pre>Czekaj no tu bratku\nKapitana Bombę sprowadzę\nNajesz się tu strachu\nJak cię w trąbę rąbnie\nJak ci przyfasoli\nTo zobaczysz z bliska\nRóżne gwiazdozbiory!</pre>"); echo("<pre>A on mnie tylko ziewną\nI tak mi powiada:\nPrzybywam tu z $from i ja ci powiadam</pre>"); echo("<pre>I tu zaczyna bredzić\nKosmiczna pokraka:\n$description"); }else if($who == "Urzędnik państwowy"){ echo("<p>Cha! Więc jesteś urzędasem!</p>"); echo("<pre>Czekaj no gagatku\nNiech no ja coś chwycę\nByle by ciężkiego\nBy czymprędzej pogonić\nCię z domu mojego</pre>"); echo("<pre>A on mnie tylko ziewną\nI tak urzedniczo gada:\nPrzybywam tu z $from i ja ci powiadam</pre>"); echo("<pre>I tu zaczyna bredzić urzędniczyna\nI swoje głupoty przede mną opisywać:\n$description</pre>"); } ?> </body> </html>