mehrfachauswahl select feld im formular parsen
issy
- perl
Hallo,
hier mein problem. wie der titel schon sagt hab ich versucht einen mehrfachauswahl select feld in ein formular zu parsen und die values in ein datei rauszuschreiben. Leider bekomme ich nur den ersten selected value zurück und nicht alle values was ich selected habe.
hier der code:
################# ANFANG #################################
sub parseForm{
# GET method
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
@pairs = split(/&/, $ENV{'QUERY_STRING'});
#POST method
} elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
} else {
print "Content-type: text/html\n\n";
print "<P>Use Post or Get";
}
foreach $pair (@pairs) {
($key, $value) = split (/=/, $pair);
# Convert plusses to spaces
$key =~ tr/+/ /;
# Convert Hex values to ASCII
$key =~ s/%([a-fA-F0-9] [a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9] [a-fA-F0-9])/pack("C", hex($1))/eg;
# Eliminate comments? What the heck is she doing here???
$value =~s/<!--(.|\n)*-->//g;
#If we already have a key with this name, allow for multiple values!!!
if ($formdata{$key}) {
$formdata{$key} .= ",". $value;
} else {
$formdata{$key} = $value;
}
}
return %formdata;
}
$file = /cgi-bin/logfiles/file.txt";
my %formdata = &parseForm();
open (LOGF, ">>$file.txt") || print "Could not write $file.txt\n";
print LOGF "Feldname Interessengebiet contained value: $formdata{'Interesse'}\n";
close LOGF;
################## ENDE #####################
Die HTML Datei mit dem Formular hat die form:
<td align="left" width="186"><select name="Interesse" size="5" multiple>
<option value="3191647204">Punk1</option>
<option value="3191647604">Punk2</option>
<option value="3191643904">Punk3</option>
<option value="3191646504">Punk4</option>
<option value="3191644604">Punk5</option>
<option value="3191644804">Punk6</option>
</select></td>
Wenn ich Punkt1 Punkt2 Punk3 markiere dann bekomme ich immer nur den ersten Wert raus:
Bsp: Feldname Interessengebiet contained value 3191647204
Anstatt von,
Bsp:Feldname Interessengebiet contained value 3191647204,3191647604,3191643904
was ich erwarten würde.
Auch mit der CGI.pm modul habe ich es ausprobiert und wieder bekomme ich nur den ersten value.
hier der CODE:
my $query = CGI->new();
my @values = $query->param('Interesse');
hab nach vielen versuchen aufgegeben und ich weiss nicht mehr was ich noch machen muss damit das funktioniert.
Bitte um eure Hilfe / Erfahrung.
danke
Gruss, ISSY
Hi,
sub parseForm{
weg damit.
Auch mit der CGI.pm modul habe ich es ausprobiert
Das ist nicht "auch", sondern exakt der Weg, der zur Auswertung von Formulardaten benötigt wird. Für alles andere musst Du sehr, sehr, *sehr* gute Gründe aufweisen können.
und wieder bekomme ich nur den ersten value.
Das hast Du wie überprüft? Bei welchen Browsern tritt dies auf? Welche Formularmethoden hast Du getestet? Welche Ergebnisse haben Auswertungen durch andere Techniken (wie z.B. Schauen in die Adresszeile des Browsers) ergeben?
hier der CODE:
Und wie geht er weiter?
hab nach vielen versuchen aufgegeben
Und nach wie vielen Analysen?
Cheatah
Hallo,
Das hast Du wie überprüft? Welche Formularmethoden hast Du getestet? Welche Ergebnisse haben Auswertungen durch andere Techniken (wie z.B. Schauen in die Adresszeile des Browsers) ergeben?
my $query = CGI->new();
my @values = $query->param('Interesse');
open (LOGF, ">>$file.txt") || print "Could not write $file.txt\n";
########### überprüft habe ich hier:
print LOGF "Feldname Interessengebiet contained value: @values\n";
}
close LOGF;
und ich bekomme immer nur den ersten value.
Bei welchen Browsern tritt dies auf?
Bei Motilla - Firefox und IE 6.0
Welche Formularmethoden hast Du getestet
POST und GET
Welche Ergebnisse haben Auswertungen durch andere Techniken (wie z.B. Schauen in die Adresszeile des Browsers) ergeben?
andere techniken sind mir leider nicht bekannt dashalb frage ich Sie hier sonst hätte ich es vieleicht das problem gelöst.
Und nach wie vielen Analysen?
also nochmal ich habe hier eine Woche verbracht mit dem ding und ich verstehe es nicht warum das nicht funktioniert, deshalb wende ich mich an Sie. Ich möchte nicht nochmal eine Woche vor dieses Problem sitzen, vielleicht ist nur eine kleinigkeit oder jemand hat damit schon erfahrung gemacht.
danke,
gruss, ISSY
my $query = CGI->new();
my @values = $query->param('Interesse');
open (LOGF, ">>$file.txt") || print "Could not write $file.txt\n";########### überprüft habe ich hier:
print LOGF "Feldname Interessengebiet contained value: @values\n";
}
close LOGF;
und ich bekomme immer nur den ersten value.
Dann ist irgendwas irgendwo faul. Bei mir, wie gesagt, funktioniert das tadellos: http://jstruebig.de/cgi-bin/test.pl
Struppi.
hallo,
Dann ist irgendwas irgendwo faul.
bestimmt!!!
ich habe ihren tesp.pl bei mir auch getestet und es gibt nur den ersten wert aus und noch ein komisches zeug, weiss nicht woher es kommt.
ich habe nur bbbbbbb
ccccccc
ddddddddd
marikert und ergebniss ist:
Feldname: submit, Inhalt: test
Feldname: multi, Inhalt: bbbbbbb
Feldname: submit, Inhalt: test .cgifields=multi
voher kommt ( Inhalt: test .cgifields=multi ) ?????
sehr merkwürdig muss ich sagen!!!
was schlagen Sie vor, liegt es an dem cgi.pm modul, perl interpreter, oder apache configuration???
was kann man noch machen?
trotzdem vielen Dank für die Hilfe,
Gruss, Issy
ich habe ihren tesp.pl bei mir auch getestet und es gibt nur den ersten wert aus und noch ein komisches zeug, weiss nicht woher es kommt.
ich habe nur bbbbbbb
ccccccc
dddddddddmarikert und ergebniss ist:
Feldname: submit, Inhalt: test
Feldname: multi, Inhalt: bbbbbbb
Feldname: submit, Inhalt: test .cgifields=multi
Mit genau der gleichen Datei?
voher kommt ( Inhalt: test .cgifields=multi ) ?????
Das Frage ich mich auch.
sehr merkwürdig muss ich sagen!!!
was schlagen Sie vor, liegt es an dem cgi.pm modul, perl interpreter, oder apache configuration???
Welche Version vom CGI Modul hast du? (print $CGI::VERSION;)
Struppi.
Hallo Struppi,
Mit genau der gleichen Datei?
ja mit genau gleichen Datei.
CGI.pm Version ist 2.46
Perl Version 5.05
Laut dokumentation musste es wunderbar funktionieren, tut es aber nicht.
Ich habe den Script nun auf dem LIVE server getestet, und da funktioniert tatsätzlich das mit dem mehrfachauswahl.
Aber auf dem Test server nicht. Na ja habe auch glück gehabt, da es nur der testserver war der keine mehrfachauswahl mag :)
Aber du hast mich sehr geholfen, weil dadurch bin in auf der Idee gekommen, auf dem Liveserver zu testen und da geht's wunderbar und das ist wichtig.
komisch aber wahr.
Na ja danke an alle,
Gruss ISSY
Hallo,
CGI.pm Version ist 2.46
Perl Version 5.05
Vielleicht solltest Du einmal daran denken, auf eine neuere version umzusteigen. Diese Modul-Version ist schon, ebenso wie die vom Interpreter, über sieben Jahre alt. Vielleicht hat sich doch etwas grundsätzliches getan, obwohl es eigentlich, lt. Dokumentation, funktionieren sollte.
Grüße
Klaus
Hi,
print LOGF "Feldname Interessengebiet contained value: @values\n";
welchen Wert enthält $"?
und ich bekomme immer nur den ersten value.
Wie definierst Du eigentlich den "ersten value"?
Welche Ergebnisse haben Auswertungen durch andere Techniken (wie z.B. Schauen in die Adresszeile des Browsers) ergeben?
andere techniken sind mir leider nicht bekannt dashalb frage ich Sie hier sonst hätte ich es vieleicht das problem gelöst.
Nun, eine habe ich in der Frage genannt. Du brauchst hier übrigens niemanden zu siezen, wir sind schließlich unter uns.
also nochmal ich habe hier eine Woche verbracht mit dem ding und ich verstehe es nicht warum das nicht funktioniert, deshalb wende ich mich an Sie. Ich möchte nicht nochmal eine Woche vor dieses Problem sitzen, vielleicht ist nur eine kleinigkeit oder jemand hat damit schon erfahrung gemacht.
Es ist vermutlich wirklich nur eine Kleinigkeit. Um diese zu finden, benötigt es Problemanalysen. Diese kannst aber nur Du durchführen.
Cheatah
my $query = CGI->new();
my @values = $query->param('Interesse');
Genau so funktioniert es bei mir.
Struppi.