Can you get a CGI script working by itself, just a little simple select or
something that prints the output?  If not, then your environment is not
correctly set up for CGI, which the server runs with the user nobody or
similar.  Make sure the user has the right persmissions and that the
LD_LIBRARY_PATH is set correctly, as well as ORACLE_HOME.

Ilya

-----Original Message-----
From: Condle, Joseph P
To: [EMAIL PROTECTED]
Sent: 4/8/02 1:27 PM
Subject: Web Based Form with DBI

I am trying to input data from an html form.  I can insert data from a
straight dbi script without a problem. I can get data from the form
without having the dbi piece.  But I can not merge the two and get it to
work.  When I run the following script I get the following errors but
the record get inserted into my database.  The printf's are to see
whethere I have data or not.  According to the files written I do not
have data, but I am still inserting a recored.  
I am running Perl 5.6.1, solaris 8, Oracle 8.17, DBI1.21 and DBD 1.12.
This is my first DBI web form script.


The Errors
>From the html form netscape Error  The document contained no data.  Try
again later, or contact the server's administrator

The error_log of the apache web server
Printf() on closed filehandle JOE at insert.pl line 59.
Printf() on closed filehandle JOE at insert.pl line 61.
Printf() on closed filehandle JOE at insert.pl line 62.
Printf() on closed filehandle JOE at insert.pl line 63.
Printf() on closed filehandle JOE at insert.pl line 64.
Vilolated (DBD ERROR: OCIStmtExecute at insert.pl line 77
Issuing rollback() for database handle being destroyed without explicit
disconnect().

Thanx in advance  


#!/usr/bin/perl -w
#
# use strict;
$ENV{'PATH'} =
'/u01/app/oracle/product/817/bin:/usr/bin:/etc:/usr/ccs/bin:/usr/local/b
i
n:/usr/ucb:/usr/openwin/bin';
$ENV{'CLASSPATH'}=
'/u01/app/oracle/product/817/JRE/lib:/u01/app/oracle/product/817/jlib
:/u01/app/oracle/product/817/jlib';
$ENV{'LD_LIBRARY_PATH'} = '/u01/app/oracle/product/817/lib';
$ENV{'ORACLE_BASE'} = '/u01/app/oracle';
$ENV{'ORACLE_HOME'} = '/u01/app/oracle/product/817';
$ENV{'ORACLE_SID'} = 'chp';

use DBI qw(:sql_types);

print "Content-type:text/html\n\n";

read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

foreach $pair (@pairs)
{
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("c", hex($1))/eg;
  $FORM{$name} = $value;
}

open(JOE, "> preOra.txt");
printf JOE "Begining \n";
printf JOE "ssn %s is %s \n",$FORM{'ssn'};
printf JOE "fname %s is %s \n",$FORM{'fname'};
printf JOE "lname %s is %s \n",$FORM{'lname'};
printf JOE "city %s is %s \n",$FORM{'city'};
printf JOE "state %s is %s \n",$FORM{'state'};
printf JOE "zip %s is %s \n",$FORM{'zip'};
close(JOE);

my $dbh = DBI->connect ( 'dbi:Oracle:xxxxx',
                        'xxxxxx',
                        'xxxxxx',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                       ) || "Database connection not made
:$DBI::errstr";

my $ssn    = $FORM{'ssn'};
my $fname  = $FORM{'fname'};
my $lname  = $FORM{'lname'};
my $city   = $FORM{'city'};
my $state  = $FORM{'state'};
my $zip    = $FORM{'zip'};

open(DAN, "> postOra.txt");
printf JOE "ssn %s is %s \n",$ssn; 
printf JOE "fname %s is %s \n",$fname; 
printf JOE "lname %s is %s \n",$lname; 
printf JOE "city %s is %s \n",$city; 
printf JOE "state %s is %s \n",$state; 
printf JOE "zip %s is %s \n",$zip; 
close(DAN);

my $sql = qq{ INSERT INTO employee VALUES (?, ?, ?, ?, ?, ?)};
my $sth = $dbh->prepare( $sql );

$sth->bind_param(1,$ssn,SQL_VARCHAR);
$sth->bind_param(2,$fname,SQL_VARCHAR);
$sth->bind_param(3,$lname,SQL_VARCHAR);
$sth->bind_param(4,$city,SQL_VARCHAR);
$sth->bind_param(5,$state,SQL_VARCHAR);
$sth->bind_param(6,$zip,SQL_VARCHAR);

$sth->execute();
$dbh->commit;

if($@)
{
  warn "Database error: $DBI::errstr\n";
  $dbh->rollback(); #just die if rollback is failing
}
#my( $ssn, $fname, $lname, $city);
#$sth->bind_columns (undef, \$ssn, \$fname, \$lname, \$city);

#while ( $sth->fetch() )
#{
#  print "$ssn, $fname, $lname, $city\n";
#}

$sth->finish();
$dbh->disconnect();

Reply via email to