adrive has asked for the wisdom of the Perl Monks concerning the following question:

hi guys, is there a way to add another key under similiar parameter name with the use of cgi.pm ? i understand that whenever a group of similiar data is posted on a html, cgi uses the append() method. Such as, i have a group of checkboxes that is named "hisname" :
$cgi->append("hisname", "alex"); $cgi->append("hisname", "alex2"); #to access my $names = $cgi->param("hisname"); #stores a list of "hisname" foreach ($names){ print $_; #outputs alex, alex2 }
Is there a way to add my own keys to the SIMILIAR group and how do i access it? such as :
$cgi->append("hisname" => "alex", "description" => "quite bold"); $cgi->append("hisname", "alex2", "description" => "healthy");

Replies are listed 'Best First'.
Re: need cgi param's help
by NetWallah (Canon) on Sep 17, 2007 at 05:24 UTC
    from perldoc cgi:
    Pass the param() method a single argument to fetch the value of the named parameter. If the parameter is multivalued (e.g. from multiple selections in a scrolling list), you can ask to receive an array. Otherwise the method will return a single value.
    To fix, simply change your syntax :
    my @names = $cgi->param("hisname"); # Use an ARRAY here foreach (@names){ ....} # ---- and HERE.
    Or, (based on an alternative interpration of your question), is this syntax you are looking for ?:
    $cgi->append(-name=>'foo',-values=>['yet','more','values']);

         "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom

Re: need cgi param's help
by adrive (Scribe) on Sep 17, 2007 at 06:00 UTC
    well, as according to this example :
    $query->append(-name=>'foo',-values=>['yet','more','values']);
    can it be..
    $query->append(-name=>'foo',-values=>['yet','more','values'], -description=>'foos description');
    ? it looks like we can only assign to specific keys of "name" and "value" for the cgi's param unless we put them into hash objects. problem is..if i change the way my checkbox group stores it data into the cgi (let's say my own hash objects), i won't be able to access it through :
    my @fooList = $cgi->param('foo');
    if only there was a way like this :
    $cgi->param('foo')->('description');
      It is not clear (to me) what you are trying to achieve with the "description" key.

      Perhaps you are trying to store additional (hidden) information in the form, that you can re-use when you receive user response. If this is your objective, you can use several "hidden" fields, with values. These can be retrieved via the usual $cgi->param syntax.

      If the "description" is for the benefit of the form user, perhaps you are looking for the "labels" key.

      From the CGI docs:

      The optional fifth argument is a pointer to an associative array relating the checkbox values to the user-visible labels that will be printed next to them (-labels). If not provided, the values will be used as the default.
      It is not clear from the docs whether or not this is applicable to the "append" method. "label" is a valid key when creating the checkbox.

           "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom