Wymiana danych

Aby uzyskać pełną funkcjonalność programistyczną, CGI musi umożliwiać wprowadzanie danych przez użytkownika, które będą mogły być wykorzystane przy wykonaniu programu. Rozwiązanie to musi mieścić się w specyfikacji HTMLa.

Najprostszym sposobem przekazywania danych są formularze. Formularz HTML (statyczny, lub generowany dynamicznie), zawiera pola o pewnych identyfikatorach (name=), a wpisane (lub wybrane) dane stają się wartościami tych pól.

  • Formularz musi mieć wpisaną akcję wskazującą na URL skryptu, który otrzyma dane z formularza. Wygląda to mniej więcej tak:
     <form action='skrypt.cgi'> ... </form>
  • Formularz musi mieć przycisk typu Submit, chyba, że składa się z dokładnie jednego pola tekstowego. Wtedy naciśnięcie klawisza Enter spowoduje wysłanie danych formularza.
  • Dane z formularza są kodowane (URL encode) i przesyłane do skryptu. Wysyłane są pary identyfikator=wartość rozdzielone znakiem '&', spacje zmienione są na znak '+', a inne znaki niealfanumeryczne na kody szesnastkowe poprzedzone znakiem '%'
  • Dane opisane powyżej mogą być przekazane w jeden z dwóch sposobów: GET - dane przekazane za pomocą zmiennej środowiska QUERY_STRING, lub POST - dane przekazane na standardowe wejście programu.
    Metodę przekazywania danych wybieramy w tagu from (domyślnie GET):
     <form action='skrypt.cgi' method='get'> ... </form>
    lub:
     <form action='skrypt.cgi' method='post'> ... </form>

Parametry wywołania mogą też być przekazywane bezpośrednio do skryptu jako parametry jego wywołania. Należy je zakodować tak jak byłby zakodowany QUERY_STRING i powstały ciąg umieścić w URLu po nazwie skryptu i znaku '?'.
Przykład: http://www/cgi-bin/skrypt.cgi?nazwisko=Slupski&imiona=Jan+Lukasz

Przekazywanie danych możesz przetestować na stronie z przykładami (skrypt formularz.cgi).
Prostym działającym przykładem jest sklep.cgi.

Zmienne

Serwer WWW uruchamiając skrypt ustawia wiele zmiennych systemowych, które mogą być wykorzystane (jako źródło informacji) w naszym programie.
Wartami zainteresowania mogą być np.:

  • REMOTE_ADDR
  • REMOTE_PORT
  • REQUEST_METHOD
  • SERVER_NAME
  • itp.

Wartości zmiennych można zobaczyć na stronie z przykładami (skrypt zmienne_systemowe.cgi).


Jan Słupski, jslupski@email.com