in reply to Extracting selected values from HTML Select Menus

here is the browser/server interaction --

On the browser you have a form (btw, your syntax is wrong)

<form> <select name="month" size="1"> <option value="">Select a month</option> <option value="0305">March 2005</option> <option value="0405">April 2005</option> <option value="0505">May 2005</option> <option value="0605">June 2005</option> <option value="0705">July 2005</option> </select> <input type="submit"> </form>

The user selects a month and hits submit. That action sends a form variable called month back to the server. Perl on the server grabs the form variable and stuffs it in a var like so --

my $month = $cgi->param('month'); # You are using CGI or CGI::Simple, are you not? # now do whatever you want with that $month

You want to actually generate the above form using Perl.

# here is one of the million ugly ways of doing this. # The better way would be to use a templating system. my @months = qw(03March 04April 05May 06June 07July); print makeform(); sub makeform { my $form = "<select name='month' size='1'>\n"; $form .= "<option value=''>Select a month</option>\n"; for (@months) { $_ =~ /(\d\d)(.*)/; $form .= "<option value='" . $1 . "05'>" . $2 . "2005</option>\n"; } $form .= "</select>\n"; return $form; }

yeewww. I haven't done that kind of code in a long time. Made me feel kinda dirty. I don't think I have written a web app without HTML::Template in 3 years.

Update: corrected stupid typos and mistakes in bad, ugly code. Reason #467 to use a templating system.

--

when small people start casting long shadows, it is time to go to bed

Replies are listed 'Best First'.
Re^2: Extracting selected values from HTML Select Menus
by kjg (Sexton) on Mar 15, 2005 at 10:47 UTC
    Oops I may have missed out some important information. This my code now:
    use CGI; use Win32::ODBC; use Time::Local; if (!($db=new Win32::ODBC($DSN))) { print "Error connecting to Database\n"; print "Error: " . Win32::ODBC::Error() . "\n"; } $SqlStatement = "SELECT StaffNo FROM FOSInput WHERE Username=\'$ntuser +'\)"; if ($db->Sql($SqlStatement)) { print "SQL failed.\n"; print "Error: " . $db->Error() . "\n"; if ($DebugMode) { print "<HR>$SqlStatement<HR>"; # Debug } } else { while($db->FetchRow()) { print "<form><select name=\"month\" size=\"1\">\n"; print "<option value=\"\">Select a month</option>\n"; print "<option value=\"0305\">March 2005</option>\n"; print "<option value=\"0405\">April 2005</option>\n"; print "<option value=\"0505\">May 2005</option>\n"; print "<option value=\"0605\">June 2005</option>\n"; print "<option value=\"0705\">July 2005</option>\n"; print "</select><input type=\"submit\"></form>\n"; print "At end of Input field\n"; my $filename= $cgi->param('month'); print "$filename\n"; } }
    I've gone for hard coding the drop down but when I select a month, the page just kind of refreshes, I get the 'At end of Input field' message but $filename isn't printed. What gives?
      I've just switched CGI errors on to screen and this is what I get: Can't call method "param" on an undefined value in my $filename= $cgi->param('month'); I thought 'month' was defined in the hard coding? I'm confused now! Help!
        OK I've sorted it now. Just realised that further up in my script there's a thing that handles CGI already so I've got it working! Ta!