I'll take a plain english stab at this.....others feel free to elaborate where I miss stuff.<br><br>When you submit an HTML page that has a <form> tag, the inputs (text, radio button,scrollmenu, etc.) each have a name and a value (kind'a like a hash). Depending on which <form> method you use in your HTML page, POST or GET, the data is shipped to the web server in one of two ways. If you use GET, you will see the names and values of the <form> inputs show up in the URI string in the browser. There is a max size for that URI buffer, so if you have to much data, you can loose some of it with GET. If you use POST, the name/value pairs are passed through STDIN into the CGI program. So, either way, the browser sends a list of name-value pairs to the web server.<br><br>The web server then, catches the request, identifies it as a request for an executable (CGI kind'a stuff), and passes the data via the URI string or STDIN to the CGI code.<br>The CGI then, simply cleans up the name/value pairs and stuffs them in an array.<br><br>If you are using CGI.pm, this is done when you do <FONT FACE=monospace>$query = new CGI;</font> All of the ugly stuff is in the CGI.pm box. If you are not using CGI .pm, or some other similar package/module, then you might have a sub routine that parses the data passed from the browser, cleans it up a little and puts it in an associative array (hash).<br><br>might look something like......<br><br><FONT FACE=monospace><br>sub cgidecode<br>{<br>local(%vars, $val, $key, $last, $buffer, $pair, @pairs);<br><font color=red># read data from URI or STDIN as appropriate</font><br>if ($ENV{'REQUEST_METHOD'} eq "POST"

<br> { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});}<br>else { $buffer = $ENV{'QUERY_STRING'}; }<br><br><font color=red># Splitting up the data fields and store in array @pairs, they are seperated with &</font><br>@pairs = split(/&/, $buffer);<br><br><font color=red># Splitting the variable names and the values and storing them in the assoc. array %vars </font><br>foreach $pair (@pairs)<br> {<br> ($key, $val) = split(/=/, $pair);<br><font color=red> # get rid of URI encoding</font><br> $val =~ s/\+/ /g;<br> $val =~ s/%(..)/pack("C",hex($1))/eg;<br> if ($key eq $last) <br> { $vars{$key} .= " ".$val; }<br> else <br> { $vars{$key} = $val; }<br> $last = $key;<br> }<br><font color=red># return a hash of the name value pairs.</font><br>return(%vars);<br>}<br></font><br><br>Some where else in your CGI code you might have a line like...<br><FONT FACE=monospace>%FORM = &cgidecode;</font><br>which takes the hash built by the sub routine and calls it %FORM.<br>You can then get at a variable like......<br><FONT FACE=monospace>$esktype = $FORM{'esktype'};</font><br><br>or, if you used CGI.pm, <br><FONT FACE=monospace>$esktype = $query->param('esktype');</font><br><br>'hope this helps... <p> <br><a href=mailto: > </a><br><a href= > </a><br> keep the rudder amid ship and beware the odd typo