Need some problemsolving-cgi/xml

L

lievemario

Hello,


I have written the following perl program,

this is what is does:

- it gets input from a form (a person_id)

- then it executes a query

- transform this result to an xml file

- then transform the xml file via xsl file to output in the browser.



Now the following errors appear:

- first of all, I don't know why, but the script is not able to open / write

person.xml anymore

- second, when I have such an xml file, the script is not able to produce

the output,

I get a CGI timeout error.

(Just for info; I call the script via the following line in the form

application:

<form action="person2.cgi?person_id=$person_id" method="POST">

)

I have search a long time, but I can not solve the problem.


- another question I also have;

it is my intention to execute 1 or more queries (depending on the

@details the

user selected in the form). How can I combine all these xml files/xsl to

one output?


Hope I get some solution.


Thanks a lot!!



----------------------------------------------------------------------------

#!/usr/bin/perl


# use strict;

use DBI;

use XML::Generator::DBI;

use XML::Handler::YAWriter;

use XML::parser;

use XML::XSLT;


use CGI qw(param);


my $xslfile = "CGI\\details.xsl";



# create a DBI connection

my $dbh = DBI->connect ("DBI:mysql:rd", "root", "",

{ RaiseError => 1,

PrintError => 0

});


# instantiate a new XML::Handler::YAWriter object

my $out = XML::Handler::YAWriter-> new(

AsFile => "CGI\\person.xml",

Pretty => {PrettyWhiteNewline => 1,

PrettyWhiteIndent => 1,

CatchEmptyElement => 1,

CatchWhiteSpace => 1

},

Encoding => "ISO-8859-1",

);


# instantiate a new XML::Generator::DBI object

my $gen = XML::Generator::DBI->new(

Handler => $out,

dbh => $dbh,

RootElement => 'Description',

RowElement => 'Person'

);



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;

$value =~ s/'//g;

$value =~ s/&/and/g;

$value =~ s/\"//g;

$value =~ s/\+//g;

$FORM{$name} = $value;

}


my @details = ("data","team","pubs","other");

foreach $x (@details) {

if ($FORM{$x} == 1) {

if($x eq "data") {

data_query();

}

#print "You picked $x.\n";

}

}


my $xmlparser = new XML::parser(ProtocolEncoding => "ISO-8859-1");

my $input = "CGI\\person.xml";

$xmlparser ->setHandlers(Start => \&start_handler,

End => \&end_handler,

Char => \&char_handler);

$xmlparser ->parsefile($input);


# The handlers for the XML Parser.

sub start_handler

{

my $expat = shift; my $element = shift;

# element is the name of the tag

print $startsub{$element};

# Handle the attributes

while (@_) {

my $att = shift;

my $val = shift;

print "$att=$val ";

}

}


sub end_handler

{

my $expat = shift; my $element = shift;

print $endsub{$element};

}


sub char_handler

{

my ($p, $data) = @_;

#print $data;

}


my $xslparser = XML::XSLT->new($xslfile);

my $result = $xslparser->serve("CGI\\person.xml", http_headers => 0,

xml_version => 0, xml_declaration => 0);

$result = "Content-Type: text/html\n\n" . $result;

print $result;


my $person_id = param("person_id");

print $person_id;


sub data_query {

# define the SQL query

my $query1 = "SELECT p.person_id,

p.name,

p.first_name,

p.phone,

p.fax,

p.email

FROM list_personnel p

WHERE p.person_id = ?;

";

#my $sth1 = $dbh->prepare($query1);

$gen->execute($query1,$person_id);

}



----------------------------------------------------------------------------
 
S

Sherm Pendley

lievemario said:
Hope I get some solution.

You *did* get answers. Three of 'em, last week when you posted this
question the first time. You've been given some very good advice - you
really should follow it.

BTW, have you read the posting guidelines that appear here often?

sherm--
 
J

James Willmore

I have written the following perl program,

<snip>

This, IMHO, is the most important part of the post I posted to this
question before.

(last portion of <[email protected]>)

You should really read the documentation for the various modules you're
using. It looks like you cobbled together something from various sources
and, well, this ain't going to work the way you expect it to. Try small
parts of what you're trying to do (for example, do some small XML
transformations [at the command line] first and small do nothing CGI
scripts). Test them and see that they work the way you expect them to.
Then put it all together for the final product.

HTH

Jim
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top