kazak has asked for the wisdom of the Perl Monks concerning the following question:
So far so good, script dies in case his "mode" parameter is not defined or unknown, and it's correct. Script works as a charm if it used like: http://127.0.1.1/puppeteer/adder.cgi?mode=servers#!/usr/bin/perl -wT use strict; use warnings; use DBI; #use CGI; use CGI qw(:standard); use CGI::FormBuilder; use Data::Dumper; my (@keys,@values,@env_types); my ($keylist,$valuelist,$field,$env_choose); my $o_dbuser = "usr"; my $o_dbpwd = "pwd"; my ($query,$last,$servers_add); my $form = CGI::FormBuilder->new(keepextras => 1); my $mode = $form->cgi_param('mode'); #my $cgi = CGI->new(); #my $mode = $cgi->param('mode'); #my $mode = param('mode'); my $dbh = DBI->connect("DBI:mysql:database=overall;host=192.192.192.19 +2;port=3307", "$o_dbuser", "$o_dbpwd", {'RaiseError' => 1}); my $env_types = "SHOW TABLES FROM `overall` LIKE '%xen_env_%';"; my $sth = $dbh->prepare($env_types); $sth->execute() or die "could not execute", $sth->errstr; while (my $e = $sth->fetchrow_array) { push @env_types, $e; } $sth->finish(); if ($mode eq 'servers') { my $get_summary = "SELECT * FROM `Servers`;"; my $sth0 = $dbh->prepare($get_summary); $sth0->execute(); @keys = @{$sth0->{NAME_lc}} or die "Can't get Field names due +to:$!"; $sth0->finish(); $sth0 = $dbh->prepare($get_summary); $sth0->execute() or die "could not execute", $sth0->errstr; my $dbvalues = $sth0->fetchrow_hashref; $sth0->finish(); $last = $keys[$#keys]; foreach (@keys) { $keylist .= "$_,"; } $keylist =~ s/$last\,/$last/; $servers_add = CGI::FormBuilder->new( fields => [@keys], header => 1, method => 'POST', required => 'ALL', stylesheet => 'fb.css', keepextras => 1, ); $servers_add->field(name => 'env_type', options => [@env_ty +pes], type => 'select',); if ($servers_add->submitted) { $field = $servers_add->field; $last = $keys[$#keys]; for my $k (@keys) { $valuelist .= "'$field->{$k}',"; } $valuelist =~ s/\'\,$/\'/; my $sql = "INSERT INTO `Servers` ($keylist) VALUES($va +luelist);"; $sth0 = $dbh->prepare($sql); $sth0->execute() or die "Could not execute", $sth0->er +rstr; $sth0->finish(); print $servers_add->confirm; } else { print $servers_add->render; } }
But if I expanding this chunk of code, like this:
It just dies with error:#!/usr/bin/perl -wT use strict; use warnings; use DBI; #use CGI; use CGI qw(:standard); use CGI::FormBuilder; use Data::Dumper; my (@keys,@values,@env_types); my ($keylist,$valuelist,$field,$env_choose); my $o_dbuser = "usr"; my $o_dbpwd = "pwd"; my ($query,$last,$servers_add); my $form = CGI::FormBuilder->new(keepextras => 1); my $mode = $form->cgi_param('mode'); #my $cgi = CGI->new(); #my $mode = $cgi->param('mode'); #my $mode = param('mode'); my $dbh = DBI->connect("DBI:mysql:database=overall;host=192.192.192.19 +2;port=3307", "$o_dbuser", "$o_dbpwd", {'RaiseError' => 1}); my $env_types = "SHOW TABLES FROM `overall` LIKE '%xen_env_%';"; my $sth = $dbh->prepare($env_types); $sth->execute() or die "could not execute", $sth->errstr; while (my $e = $sth->fetchrow_array) { push @env_types, $e; } $sth->finish(); if ($mode eq 'servers') { my $get_summary = "SELECT * FROM `Servers`;"; my $sth0 = $dbh->prepare($get_summary); $sth0->execute(); @keys = @{$sth0->{NAME_lc}} or die "Can't get Field names due +to:$!"; $sth0->finish(); $sth0 = $dbh->prepare($get_summary); $sth0->execute() or die "could not execute", $sth0->errstr; my $dbvalues = $sth0->fetchrow_hashref; $sth0->finish(); $last = $keys[$#keys]; foreach (@keys) { $keylist .= "$_,"; } $keylist =~ s/$last\,/$last/; $servers_add = CGI::FormBuilder->new( fields => [@keys], header => 1, method => 'POST', required => 'ALL', stylesheet => 'fb.css', keepextras => 1, ); $servers_add->field(name => 'env_type', options => [@env_ty +pes], type => 'select',); if ($servers_add->submitted) { $field = $servers_add->field; $last = $keys[$#keys]; for my $k (@keys) { $valuelist .= "'$field->{$k}',"; } $valuelist =~ s/\'\,$/\'/; my $sql = "INSERT INTO `Servers` ($keylist) VALUES($va +luelist);"; $sth0 = $dbh->prepare($sql); $sth0->execute() or die "Could not execute", $sth0->er +rstr; $sth0->finish(); print $servers_add->confirm; } else { print $servers_add->render; } }elsif ($mode eq 'env') { $env_choose = CGI::FormBuilder->new( fields => [qw(env_type env_state)], header => 1, method => 'post', keepextras => 1, ); if ($env_choose->submitted) { print $env_choose->confirm; } }
Thu Aug 23 12:29:04 2012] [error] [client 127.0.0.1] Premature end of script headers: adder.cgi
I just can't figure out why it happens and I would appreciate any help, thanks in advance.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: FormBuilder fails in "Multi screen mode"
by Anonymous Monk on Aug 23, 2012 at 09:57 UTC | |
|
Re: FormBuilder fails in "Multi screen mode"
by Anonymous Monk on Aug 23, 2012 at 10:00 UTC | |
by kazak (Beadle) on Aug 23, 2012 at 10:56 UTC | |
by Anonymous Monk on Aug 23, 2012 at 11:09 UTC | |
by kazak (Beadle) on Aug 23, 2012 at 11:43 UTC | |
by Anonymous Monk on Aug 23, 2012 at 12:24 UTC | |
| |
|
Re: FormBuilder fails in "Multi screen mode"
by Anonymous Monk on Aug 23, 2012 at 12:27 UTC |