in reply to $query->param question

Ideally, you'd give checkboxes different names:
(Using a travel agent site as an example.)

# <input type="checkbox" name="search_first_class"> # <input type="checkbox" name="search_economy_class"> my $search_first_class = $cgi->param('search_first_class'); my $search_economy_class = $cgi->param('search_economy_class'); warn("Classes to search:" . ($search_first_class ? ' First' : '') . ($search_economy_class ? ' Economy' : '') ) if $DEBUG;

But you can give them the same name if they have different values:

# <input type="checkbox" name="search_class" value="first"> # <input type="checkbox" name="search_class" value="economy"> # Call $cgi->param in a list context. my @search_classes = $cgi->param('search_class'); warn("Classes to search: " . join(' ', @search_classes)) if $DEBUG; # # The array can be converted to a hash for easy to lookup. # my %search_classes; # @search_classes{@search_classes} = @search_classes; # # warn("Classes to search:" # . ($search_class{'first' } ? ' First' : '') # . ($search_class{'economy'} ? ' Economy' : '') # ) if $DEBUG;

Update: I concur with Ovid. The second case is the ideal one, not the first. What was I thinking??

Replies are listed 'Best First'.
Re^2: $query->param question
by Ovid (Cardinal) on Jun 09, 2005 at 15:48 UTC

    You have the order reversed. Ideally, you should give each input the same name with a different value. The reason for that is one of maintainability. If you have different names, you generally have to write code to handle each name. However, in a well-designed app, if the only a new value is added, you may not have to change the code:

    Football: <input name="sport" value="football" type="checkbox" /><br + /> Baseball: <input name="sport" value="baseball" type="checkbox" /><br + /> Soccer: <input name="sport" value="soccer" type="checkbox" /><br + />

    With those three inputs, you can often use just one basic line to handle them:

    foreach my $sport ($cgi->param('sport') { # do something with sport }

    If handled correctly, adding a new sport is now just adding a new input box. By using different names, I'd like have to write a new input box and write new code.

    Cheers,
    Ovid

    New address of my CGI Course.

      thanks for all those suggestions, proved to be very useful