Mehjrauswahl bei checkboxen per CGI verarbeiten
Achim
- cgi
Okay, ich bin gerade etwas ratlos... Bei Checkboxen mit dem gleichen internen Namen kann der User ja mehrere Checkboxen auswählen. Wie kann ich diese Werte jetzt per CGI verarbeiten?
Wenn ich die normal auslese bekomme ich immer nur den letzten angeklickten Wert. Muss ich die in ein Array lesen? Wie? Oder werden die per Komma getrennt übertragen?
Steh gerade auf dem Schlauch und bin für jeden Hinweis dankbar!
Hallo Achim,
schau mal da
http://aktuell.de.selfhtml.org/tippstricks/php/checkboxen/index.htm.
Dieter
Danke, aber ich möchte das in ein bestehendes Skript einbauen und deshalb eigentlich weder das CGI-Modul noch PHP benutzen. Das muss doch auch noch anders gehen, oder?
Normalerweise lese ich die übergebenen Werte immer folgendermaßen aus:
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
@nvpairs = split(/&/,$buffer);
foreach $pair (@nvpairs) {
# Ich decodiere jedes der Teil
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
$i = $in{'variablename'};
Wenn ich das mit mehrfachausgewählten Checkboxen mache, bekomme ich wie gesagt immer nur den letzten Wert. Was muss ich ändern?
Hi,
Danke, aber ich möchte das in ein bestehendes Skript einbauen und deshalb eigentlich weder das CGI-Modul noch PHP benutzen. Das muss doch auch noch anders gehen, oder?
Ja, aber die Verwendung des CGI-Modules vereinfacht das Ganze.
$value =~ tr/+/ /;
Warum packst du hier nicht alles gleich in ein Array:
@werte = split(/+/,$value);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Vielleicht offenbart sich mir hier wieder mal eine Wissenslücke, aber wieso ersetzt du %nn durch die pack-Anweisung? Da würde doch dann aus "%20" sowas werden "%pack("C", hex($1))", oder? Und was bedeutet "e" als Flag, sicher meinst du "i".
Also irgendwie blicke ich bei deinen RegEx nicht so ganz durch, das will aber nix heißen ;-)
Viele Grüße
Torsten
Hi,
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Vielleicht offenbart sich mir hier wieder mal eine Wissenslücke, aber wieso ersetzt du %nn durch die pack-Anweisung? Da würde doch dann aus "%20" sowas werden "%pack("C", hex($1))", oder? Und was bedeutet "e" als Flag, sicher meinst du "i".
e als Flag heisst, dass der Ausdruck auf der rechten Seite der Ersetzung als Code ausgeführt wird (*E*val). Darum ersetzt er das auch nicht mit "pack(...)" sondern mit dem entsprechenden Rückgabewert von pack.
wunderwarzenschwein
Hi,
e als Flag heisst, dass der Ausdruck auf der rechten Seite der Ersetzung als Code ausgeführt wird (*E*val). Darum ersetzt er das auch nicht mit "pack(...)" sondern mit dem entsprechenden Rückgabewert von pack.
Danke :)
Viele Grüße
Torsten
Danke, aber ich möchte das in ein bestehendes Skript einbauen und deshalb eigentlich weder das CGI-Modul noch PHP benutzen. Das muss doch auch noch anders gehen, oder?
Normalerweise lese ich die übergebenen Werte immer folgendermaßen aus:
Das CGI Modul nicht zu verwenden ist ein großer Fehler. Da damit nicht nur das jetzige Problem gelöst werden würde, sondern du darüber hinaus etliche sinnvolle Funktionen (die du wahrscheinlich alle versuchst selber zu schreiben), wie z.b. zur generierung von HTML Formularen und Tabellen, zur Hand bekommst.
Struppi.
hi,
ersetze mal
$in{$name} = $value;
durch
$in{$name} .= $value . "\x00";
dann kannst Du mit
for (split(/\x00/,$in{'checkboxname'}){
print $_;
}
Grüße Oesi
Hi,
Okay, ich bin gerade etwas ratlos... Bei Checkboxen mit dem gleichen internen Namen kann der User ja mehrere Checkboxen auswählen.
Wieso nur, wenn sie die gleichen Namen haben? Würde in deinem Formular bspw. folgendes stehen:
<input type="checkbox" name="cb1" value="1"> Checkbox 1<br>
<input type="checkbox" name="cb2" value="1"> Checkbox 2<br>
<input type="checkbox" name="cb3" value="1"> Checkbox 3<br>
kannst du alle drei Boxen auswählen oder nur zwei, eine oder gar keine. Es wird/werden dann nur das/die Pärchen "name=value" an dein Script übermittelt, das/die geklickt war/waren.
Wie kann ich diese Werte jetzt per CGI verarbeiten?
Wenn du Perl nutzt, schau dir mal die Erläuterungen zum CGI-Modul an.
Viele Grüße
Torsten