in reply to Re: popup_menu CGI.pm problems
in thread popup_menu CGI.pm problems

Thanks for being my 2nd pair of eyes. I added the print (duh!)

Replies are listed 'Best First'.
Re^3: popup_menu CGI.pm problems
by kmullin5016 (Acolyte) on Jan 19, 2007 at 21:17 UTC
    OK, on the same lines, I notice that the order of the options is random, and on of my books says that, but the CGI doc contained in perl doc format in the CGI.pm module itself doesn't.

    I'm thinking that if I give it an ARRAY reference for the -values parameter, the order will be the same as in the array, and they I can give it a hash in the -labels parameter to contain the actual values I want my select to return to the CGI when a user selects a value.

    I try that with the following code:

    %menu_labels = ('one'=>'eenie',
                    'two'=>'meenie',
                    'three'=>'minie');
    @menu_values = ('eenie', 'meenie', 'minie');
    print $CGI->popup_menu(-name=>'menu_name',
                -values=>\@menu_values\,
                -labels=>\%menu_labels);
    

    which generates:

    <select name="menu_name">
    <option value="eenie">eenie</option>
    <option value="meenie">meenie</option>
    <option value="minie">minie</option>
    </select>
    

    which is close, the order is determined by the array, but I don't have the values from my label parameter (the hash). So again, what am I doning wrong. I'm frustrated because I'm finding incomplete/contradictory information in my book (Learning Perl by O'Reilly))and the Perl doc from CGI.pm.

      The popup_menu method wants an array of values (which will be passed back to you by the browser), and optionally an associative array that maps those values to labels (which will be what the user sees). Your associations are reversed, however. The contents of the values array should be keys in the labels hash, but you have your labels as keys instead. So, I think what you're shooting for here is:

      %menu_labels = ('one'=>'eenie', 'two'=>'meenie', 'three'=>'minie'); @menu_values = ('one', 'two', 'three'); print $CGI->popup_menu(-name=>'menu_name', -values=>\@menu_values, -labels=>\%menu_labels);

      ...unless you mean for the user to see "one, two, three". In that case:

      %menu_labels = ( eenie => 'one', meenie => 'two', minie => 'three', ); @menu_values = qw( eenie meenie minie ); print $CGI->popup_menu(-name => 'menu_name', -values => \@menu_values, -labels => \%menu_labels);

      About your bracket problem, have a look at Writeup Formatting Tips (specifically, put <code>...</code> tags around your code).

    A reply falls below the community's threshold of quality. You may see it by logging in.