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

Stronę tą wyświetlono już: 220 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:

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

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

Listing 2
  1. 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:

Listing 3
  1. 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ść:

Listing 4
  1. 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ą:

Listing 5
  1. 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:

Listing 6
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Wyświetlanko!</title>
  6. </head>
  7. <body>
  8. <?php
  9. $who = htmlentities($_POST['who'], ENT_QUOTES, "UTF-8"); // funkcja htmlentities zamienia znaczniki tagów html na encje
  10. $from = htmlentities($_POST['from'], ENT_QUOTES, "UTF-8");
  11. $description = htmlentities($_POST['description'], ENT_QUOTES, "UTF-8");
  12. if($who == "Człowiek"){
  13. echo("<p>Witaj Człowieku!</p>");
  14. 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");
  15. echo("<pre>A on mnie tylko ziweną:\nJam z $from wszakże jestem</pre>");
  16. echo("<pre>I dalej się rozgadał:\n$description");
  17. }else if($who == "Kosmita"){
  18. echo("<p>Więc kosmitą jesteś!</p>");
  19. 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>");
  20. echo("<pre>A on mnie tylko ziewną\nI tak mi powiada:\nPrzybywam tu z $from i ja ci powiadam</pre>");
  21. echo("<pre>I tu zaczyna bredzić\nKosmiczna pokraka:\n$description");
  22. }else if($who == "Urzędnik państwowy"){
  23. echo("<p>Cha! Więc jesteś urzędasem!</p>");
  24. echo("<pre>Czekaj no gagatku\nNiech no ja coś chwycę\nByle by ciężkiego\nBy czymprędzej pogonić\nCię z domu mojego</pre>");
  25. echo("<pre>A on mnie tylko ziewną\nI tak urzedniczo gada:\nPrzybywam tu z $from i ja ci powiadam</pre>");
  26. echo("<pre>I tu zaczyna bredzić urzędniczyna\nI swoje głupoty przede mną opisywać:\n$description</pre>");
  27. }
  28. ?>
  29. </body>
  30. </html>

Komentarze