# Parameterübergabe an den Webserver # Parameterübergabe mit Get # Informationen wird an URL angehängt # z.B. http://www.xyz.com/prog.cgi?feld1=value1&feld2=value2 # normale URL # ? # Attribut=Wert # & # Attribut=Wert # Hexadecimal-Darstellung wird mit % eingeleitet # + statt Leerzeichen # <form method="get" action="/cgi-bin/prog.cgi"> # ... # </form> # Parameterübergabe mit Post # Übertragung im Request (unbegränzte Länge) # <form method="post" action="/cgi-bin/prog.cgi"> # ... # </form> # Eingabefelder # einzeiliges Eingabefeld # <input type=text name="name1" size=60 maxlength=80> # mehrzeiliges Eingabefeld # <textarea name="name2" rows=15 cols=40> # Dieser Text erscheint im Textfeld als Vorbelegung. # </textarea> # Auswahllisten-Felder # <select name="auswahl" size=1 multiple> # <option value="1"> Anzeigename1 # <option value="2" selected> Anzeigename2 # <option value="3"> Anzeigename3 # </select> # Radiobuttons # <input type=radio name="name3" value="wert1"> Anzeigename1 # <input type=radio name="name3" value="wert2"> Anzeigename2 # <input type=radio name="name3" value="wert3"> Anzeigename3 # Checkboxen # <input type=checkbox name="name4" value="wert1"> Anzeigename1 # <input type=checkbox name="name4" value="wert2"> Anzeigename2 # <input type=checkbox name="name4" value="wert3"> Anzeigename3 # Formular absenden # <input type=submit value="Formular abschicken"> # Formular rücksetzen # <input type=reset value="Inhalt löschen"> # Formular-Daten lesen sub CGIDatenlesen { local $cgidaten; if ($ENV{"REQUEST_METHOD"} eq "POST") # Erkennen der Sende-Methode { # bei der Post-Methode wird von der Standard-Eingabe lesen read (STDIN, $cgidaten, $ENV{"CONTENT_LENGTH"}); } else { # bei der Get-Methode wird der Query_String verwendet $cgidaten = $ENV{"QUERY_STRING"}; } return $cgidaten; } # CGI Daten Aufbereiten sub CGIDatenaufbereiter { local ($cgidatenskalar, $name, $daten); local @cgidatenliste; local %cgidatenhash; # Übergegebene Daten zwischenspeichern if ($_[0]) { $cgidatenskalar = $_[0]; } else { print STDERR "Es wurden keine Daten uebergeben\n"; } # einzelne Daten teilen @cgidatenliste = split(/[&;]/ , $cgidatenskalar); foreach $listeneintrag (@cgidatenliste) # für jede Daten { # "+" durch Leerzeichen ersetzen $listeneintrag =~ s/\+/ /go; # in Variablenname und -wert trennen ($name, $daten) = split( /=/ , $listeneintrag); # Hexwerte durch Zeichen ersetzen $name =~ s/\%(..)/pack("c",hex($1))/ge; $daten =~ s/\%(..)/pack("c",hex($1))/ge; # Key-Werte-Paar dem Hash hinzufügen $cgidatenhash{$name} = $daten; } # getrennte Daten retournieren return %cgidatenhash; } # weitere CGI-Umgebungsvariablen # DOCUMENT_ROOT Absoluter Pfad der Document-Root # GATEWAY_INTERFACE vom Web-Server verwendete CGI-Version # HTTP_ACCEPT welche Dateiformate vom Benutzer akzeptiert werden # HTTP_ACCEPT_LANGUAGE eingestellte Browser-Sprache # HTTP_HOST Hostname des Web-Servers # HTTP_REFERER Aufrufer # HTTP_USER_AGENT Bezeichnung des Web-Clients # PATH vom CGI-Skript sichtbarer Pfad # PATH_INFO an die URL hinzugefügte Pfad # PATH_TRANSLATED absoluter Pfad des CGI-Skripts # QUERY_STRING alles nach dem ? in der URL - bei der Get-Methode # REMOTE_ADDR IP-Adresse des Client-Hosts # REMOTE_HOST FQDN (DNS) des Client-Hosts # REMOTE_PORT lokaler TCP-Port des Clients # REMOTE_USER Name des entfernten Users (bei Authentifizierung) # REQUEST_METHOD HTTP-Methode: Get, Post # SCRIPT_FILENAME absoluter Name des CGI-Skripts # SCRIPT_NAME Name des CGI-Skripts (relativ zur Document-Root) # SERVER_NAME Name des Web-Servers # SERVER_PORT HTTP-Port, auf dem der Server kontaktiert wurde # SERVER_PROTOCOL Protokoll zwischen Server und Client # SERVER_SOFTWARE Web-Server-Software-Information