This is an artifact of how CGI.pm works.  You need to use -override here:

    $out .= hidden ( -name => 'rm',
                     -override,
                     -value => $sa);

because the rm parameter already exists.  CGI.pm will not overwrite an
existing parameter.

--[Lance]

Dmitry Semkin wrote:
> have a strange behavior with CGI::App
> 
> -+-
> #!/usr/bin/perl -w
> 
> package CApp;
> 
> use strict;
> use CGI qw/-compile :all/;
> use base 'CGI::Application';
> use CGI::Application::Plugin::Session;
> use DBI;
> [...]
> sub _Get_Actions {
>        carp ("_Get_Actions IN") if $___D;
>        carp (scalar ((caller(1))[3])) if $___D;
>        # internal function
>        # in - login
>        # out - html with actions allowed
>        my $login = shift;
>        my $sql = "SELECT s_actions from staff where s_login='$login'";
>        my $sth = $DBH->prepare($sql);
>        my ($actions) = $DBH->selectrow_array($sth);
>        my $out = '';
>        return $out unless ((defined ($actions)) or ($actions eq ''));
>        carp ("\$actions = $actions") if $___D;
>        foreach my $sa (split (/\s+/, $actions)) {
>                unless ($sa =~ /^_,*/) { # skip internal acions named _XXXX
>                        $out .= start_form ();
>                        $out .= hidden ( -name => 'rm',
>                                        -value => $sa);
>                        $out .= submit ( #-name => $sa).
>                                        -value => $A_NAMES{$sa}).
>                                end_form().' ';
>                                carp ("\$act = $sa") if $___D;
>                        }
>                }
>        $out .= hr();
>        carp ("_Get_Actions OUT") if $___D;
>        return $out;
> 
>        }
> 
> sub m_New_Order {
>        carp ("m_New_Order IN") if $___D;
>        carp (scalar ((caller(1))[3])) if $___D;
>        my $me = shift;
>        my $out = Header("New order");
>        $out .= _Get_Actions ($me->session->param('logged_as'));
>        $out .= "new order runmode";
>        return $out;
>        #carp (Dumper $out) if $___D;
>        carp ("m_New_Order OUT") if $___D;
>        }
> 
> [...]
> -+-
> A_NAMES is a hash with runmode "names" (I mean button names)
> 
> so, during m_New_Order I have for example 4 buttons. with _right_names.
> but hidden field 'rm' in _all_ form is _the current runmode_.
> like this.
> -+-
> [EMAIL PROTECTED]>./z.pl nick=lslarry pass=zzz rm=New_Order
> Set-Cookie: CGISESSID=1e7e0ad29b39bb3cdeaebaf42ff7567e; path=/;
> expires=Wed, 30-Mar-2005 16:43:37 GMT
> Date: Tue, 29 Mar 2005 16:43:37 GMT
> Content-Type: text/html; charset=koi8-r
> 
> <?xml version="1.0" encoding="koi8-r"?>
> <!DOCTYPE html
>        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
> <html xmlns="http://www.w3.org/1999/xhtml"; lang="ru_RU"
> xml:lang="ru_RU"><head><title>New order</title>
> <meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
> <link rel="stylesheet" type="text/css" href="/style.css" />
> </head><body charset="koi8-r"><form method="post" action="/./z.pl"
> enctype="application/x-www-form-urlencoded">
> <input type="hidden" name="rm" value="New_Order"  /><input type="submit"
> name=".submit" value="Close session" /><div></div>
> </form>&nbsp;<form method="post" action="/./z.pl"
> enctype="application/x-www-form-urlencoded">
> <input type="hidden" name="rm" value="New_Order"  /><input type="submit"
> name=".submit" value="New order" /><div></div>
> </form>&nbsp;<form method="post" action="/./z.pl"
> enctype="application/x-www-form-urlencoded">
> <input type="hidden" name="rm" value="New_Order"  /><input type="submit"
> name=".submit" value="View orders" /><div></div>
> </form>&nbsp;....
> -+-
> 
> during debug we can see the following:
> -+-
> [EMAIL PROTECTED]>!pe
> perl -d ./z.pl nick=lslarry pass=zzz rm=New_Order
> 
> Loading DB routines from perl5db.pl version 1.28
> Editor support available.
> 
> Enter h or `h h' for help, or `man perldebug' for more help.
> 
> main::(./z.pl:8):       my $app = CApp->new();
>  DB<1> f CApp.pm
> 1       #!/usr/bin/perl -w
> 2
> 3       package CApp;
> 4
> 5:      use strict;
> 6:      use CGI qw/-compile :all/;
> 7:      use base 'CGI::Application';
> 8:      use CGI::Application::Plugin::Session;
> 9:      use DBI;
> 10:     use HTML::Template;
>  DB<2> c 233
> CApp::_Get_Actions(CApp.pm:233):                                $out .=
> hidden ( -name => 'rm',
> CApp::_Get_Actions(CApp.pm:234):                                              
>  
> -value => $sa);
>  DB<3> x $out
> 0  '<form method="post" action="/./z.pl"
> enctype="application/x-www-form-urlencoded">
> '
> === looks OK here
>  DB<4> n
> CApp::_Get_Actions(CApp.pm:235):                                $out .=
> submit ( #-name => $sa).
> CApp::_Get_Actions(CApp.pm:236):                                              
>  
> -value => $A_NAMES{$sa}).
> CApp::_Get_Actions(CApp.pm:237):                                       
> end_form().'&nbsp;';
>  DB<4> x $out
> 0  '<form method="post" action="/./z.pl"
> enctype="application/x-www-form-urlencoded">
> <input type="hidden" name="rm" value="New_Order"  />'
>  DB<5> x $sa
> 0  'Logout'
>  DB<6> x hidden ( -name => 'rm', -value=> "$sa")
> 0  '<input type="hidden" name="rm" value="New_Order"  />'
> === but here isn't - pay attention for value
>  DB<7> x $A_NAMES{$sa}
> 0  'Close session'
> -+-
> 
> carp output is:
> -+-
> [Tue Mar 29 20:43:37 2005] CApp.pm: BEGIN at CApp.pm line 45
> [Tue Mar 29 20:43:37 2005] z.pl: cgiapp_init IN at CApp.pm line 75
> [Tue Mar 29 20:43:37 2005] z.pl: CGI::Application::new at CApp.pm line 76
> [Tue Mar 29 20:43:37 2005] z.pl: verify_login IN at CApp.pm line 97
> [Tue Mar 29 20:43:37 2005] z.pl: CApp::cgiapp_init at CApp.pm line 98
> [Tue Mar 29 20:43:37 2005] z.pl: $VAR1 = 'lslarry';
> [Tue Mar 29 20:43:37 2005] z.pl:  at CApp.pm line 92
> [Tue Mar 29 20:43:37 2005] z.pl: cgiapp_init OUT at CApp.pm line 93
> [Tue Mar 29 20:43:37 2005] z.pl: setup IN at CApp.pm line 50
> [Tue Mar 29 20:43:37 2005] z.pl: CGI::Application::new at CApp.pm line 51
> [Tue Mar 29 20:43:37 2005] z.pl: setup OUT at CApp.pm line 70
> [Tue Mar 29 20:43:37 2005] z.pl: cgiapp_prerun IN at CApp.pm line 158
> [Tue Mar 29 20:43:37 2005] z.pl: (eval) at CApp.pm line 159
> [Tue Mar 29 20:43:37 2005] z.pl: cgiapp_prerun OUT at CApp.pm line 163
> [Tue Mar 29 20:43:37 2005] z.pl: m_New_Order IN at CApp.pm line 248
> [Tue Mar 29 20:43:37 2005] z.pl: (eval) at CApp.pm line 249
> [Tue Mar 29 20:43:37 2005] z.pl: Header IN at CApp.pm line 169
> [Tue Mar 29 20:43:37 2005] z.pl: CApp::m_New_Order at CApp.pm line 170
> [Tue Mar 29 20:43:37 2005] z.pl: header OUT at CApp.pm line 180
> [Tue Mar 29 20:43:37 2005] z.pl: _Get_Actions IN at CApp.pm line 217
> [Tue Mar 29 20:43:37 2005] z.pl: CApp::m_New_Order at CApp.pm line 218
> [Tue Mar 29 20:43:37 2005] z.pl: $actions = Logout New_Order
> View_All_Orders Assign_Order at CApp.pm line 229
> [Tue Mar 29 20:43:37 2005] z.pl: $act = Logout at CApp.pm line 238
> [Tue Mar 29 20:43:37 2005] z.pl: $act = New_Order at CApp.pm line 238
> [Tue Mar 29 20:43:37 2005] z.pl: $act = View_All_Orders at CApp.pm line 238
> [Tue Mar 29 20:43:37 2005] z.pl: $act = Assign_Order at CApp.pm line 238
> [Tue Mar 29 20:43:37 2005] z.pl: _Get_Actions OUT at CApp.pm line 242
> [Tue Mar 29 20:43:37 2005] z.pl: teardown IN at CApp.pm line 134
> [Tue Mar 29 20:43:37 2005] z.pl: (eval) at CApp.pm line 135
> [Tue Mar 29 20:43:37 2005] z.pl: teardown OUT at CApp.pm line 138
> -+-
> 
> looks like 'rm' variable is simply locked.
> 
> thank you in anticipation for any support.
> 
> 
> 
> ---------------------------------------------------------------------
> Web Archive:  http://www.mail-archive.com/[email protected]/
>              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

-- 
 Celebrate The Circle: http://www.celebratethecircle.org/
 Carolina Spirit Quest:  http://www.carolinaspiritquest.org/
 My LiveJournal: http://www.livejournal.com/users/labrown/
 GPG Fingerprint: 409B A409 A38D 92BF 15D9 6EEE 9A82 F2AC 69AC 07B9

---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/[email protected]/
              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to