Hi All
I'm back using CGI::Application after what must be a year or more away doing other stuff so feel free to flame me (gently!) if this is an obvious mistake but ...
I'm writing a small CGI::Application based project. I have my runmodes defined thus:
sub setup
{
my $self = shift;
$self->run_modes({
menu => "menu", # Initial menu page
error => "print_error", # Error handler
hostinfo => "host_info", # Host information page
imgindex => "img_index", # Images index
});
$self->start_mode('menu');
$self->param('dbh' => DBI->connect('dbi:mysql:platform', 'webadm',
'web123', {PrintError => 0})); # Store a db handle for later
}
The problem I have is in the img_index sub. I've cut it back to the following :
sub img_index
# Show index of images for a particular hostid
{
my $self = shift;
my $query = $self->query();
my $hostid = $query->param('host');
my $ouptut = '';
my $dbh = $self->param('dbh');
my $hostname = $dbh->selectrow_array("SELECT hostname FROM hosts WHERE
hostid=?", undef, $hostid);
}
It seems that anytime I do a $dbh->prepare (which is explicitly called inside the DBI selectrow_array method) I get the output of the prepare in the browser and nothing else.
If I access the above via http://myhost/cgi-perl/AEPWeb.pl?rm=imgindex&host=00004 I get the word 'aurora' in the browser. Now while this is the right answer since I'm not actually asking it to output I'm a little confused as to how it gets there.
If I write something like $dbh->prepare("SELECT updated, updatedby FROM images WHERE hostid=?"); I get something along the lines of DBI::st=HASH(xxxxxx) in the browser.
Does anyone have any idea why this is happening ?
Yeah, C::A will take what ever is returned from your runmode and print it (after printing the headers) if don't do an explicit return, perl will simple take the value of the last expression and return it. If you end your sub with an assignment, then value of that expression is the value that was assigned (in your example 'aurora') so C::A will print this.
You prepare() will return the DBI statement object so that's what you run mode returns and hence what C::A prints.
You should use explicit returns of you output if you want to avoid this confusion.
HTH
-- Michael Peters Developer Plus Three, LP
--------------------------------------------------------------------- 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]