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]
