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> <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> <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> ....
> -+-
>
> 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().' ';
> 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]