Schrift
[thread]615[/thread]

XML - Datei über Formular erstellen



<< >> 6 Einträge, 1 Seite
Guntpat
 2005-11-20 22:43
#6057 #6057
User since
2005-11-20
1 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe ein grosses Problem. Ich habe ein Formular mit 2 Textfeldern, in die ich Inhalte hineinschreibe, z.B. eine Query und einen Web Service - Typ. Nach dem Abschicken soll eine xml - Datei erstellt werden, die diese Daten enthält. Mein Problem ist nicht das XML, das lässt sich mit dem Modul XML::Writer relativ einfach erledigen. Mein Problem ist, dass meine übergebenen Variablen (also die, die ich in die Textfelder eingebe), zum Zeitpunkt meines Schreibens der XML - Datei noch nicht gefüllt werden.

Hier ein Code - Auszug

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use CGI(qw(:standard));
use strict;
use XML::Writer;
use IO::File;

#Übergabeparameter
my $user=(param('user')||"");
my $query=(param('query')||"");
my $type = (param('type')||"");
my $filename = param('filename')||"";
User_config($user);

$filename .= ".wsdl";
my $output = new IO::File(">$filename");

my $writer = new XML::Writer(OUTPUT => $output);

$writer->startTag("wsdlitem");
$writer->startTag("id");
$writer->characters($type);
$writer->endTag("id");
$writer->startTag("query");
$writer->characters($query);
$writer->endTag("query");
$writer->endTag("wsdlitem");
$writer->end();

$output->close();


#öffnet html Code und weist ihn einer Variable zu
open (WSDL, "$html_path/addWSDL.html");
my $content=join ('',<WSDL>);
close WSDL;

$content=~s/\$img_URL/$img_URL/g;
$content=~s/\$user/$user/g;
$content=~s/\$l_title/$l_title/g;
$content=~s/\$l_store/$l_store/g;
$content=~s/\$l_cancel/$l_cancel/g;
$content=~s/\$query/$query/g;
$content=~s/\$type/$type/g;
$content=~s/\$filename/$filename/g;

print header();
print $content;
svenXY
 2005-11-21 10:48
#6058 #6058
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
Hi,

mir scheint, Du führst den code für das Generieren der XML Datei immer aus. Besser wäre es, das nur dann zu tun, wenn das Formular wirklich abgeschickt wurde und Daten enthält.
Das kannst Du herausfinden, indem Du param() untersuchst - ist es true, dann gibt es auch Daten und du kannst die XML-Datei schreiben. Wenn nicht, ist es der erste Aufruf und Du kannst das Formular anzeigen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use CGI(qw(:standard));
use strict;
...

if (param) {  ### HIER!
#Übergabeparameter
my $user=(param('user')||"");
...

$filename .= ".wsdl";
my $output = new IO::File(">$filename");
my $writer = new XML::Writer(OUTPUT => $output);
...
$writer->end();
...
$output->close();

}
else { #### UND HIER DANN
#öffnet html Code und weist ihn einer Variable zu
open (WSDL, "$html_path/addWSDL.html");
my $content=join ('',<WSDL>);
close WSDL;
...
print header();
print $content;
}

Hilft das?

Gruss,
svenXY
esskar
 2005-11-22 02:46
#6059 #6059
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
man kann das auch anders prüfen

Code: (dl )
1
2
3
if ( $ENV{REQUEST_METHOD} eq 'POST') {
# schreibe XML
}
pKai
 2005-11-22 11:20
#6060 #6060
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
warum sollte man empfehlen *nicht* CGI.pm zu verwenden?
I sense a soul in search of answers.
esskar
 2005-11-22 12:02
#6061 #6061
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pKai,22.11.2005, 10:20]warum sollte man empfehlen *nicht* CGI.pm zu verwenden?[/quote]
dreh mir nicht die Worte rum! :)

aber param kann auch gefüllt sein, wenn man über die Url parameter weitergibt!
svenXY
 2005-11-22 13:21
#6062 #6062
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
kommt halt drauf an. Wenn Du das komplett ausschliessen willst (was sicher besser ist), dann gebe ich Dir Recht.
Ich habe aber auch schon öfters Mischungen aus URL-Parametern und Formularen verwendet.

Wie gesagt - kommt halt drauf an.

SvenXY
<< >> 6 Einträge, 1 Seite



View all threads created 2005-11-20 22:43.