I had a problem like this. Adding 'override=>1' to the 'rm' hidden field did the trick for me. Although I'm not sure about your multiple button situation.
Here is what Cees sent on this issue: ------------------------------------- $output .= $q->hidden(-name => 'rm', -value => 'mode2'); That will only set 'rm' to 'mode2' if 'rm' doesn't already exist. If 'rm' already has a value from the current request, then CGI.pm uses that value regardless of what you provided in the function call. You need to pass -override => 1 to get it to always use the value you specified (a very annoying feature of CGI.pm that has caught me several times). -- Matt -----Original Message----- From: Dmitry Semkin [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 29, 2005 8:53 AM To: [email protected] Subject: [cgiapp] runmode locking? 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] --------------------------------------------------------------------- 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]
