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>&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]


---------------------------------------------------------------------
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