Hallo,
Ich schätze, dein Problem liegt in der Art und weise, wie Du die Parameter auswertest. Wenn nämlich eine Checkbox nicht ausgwählt wird, wird der Parameter nicht mitübertragen.
Jetzt gehst Du aber davon aus, daß die _alle_ Formularfelder wieder in der gleichen Reihenfolge übertragen werden, wie die im Formular stehen.
[...]
@Formularfelder = split(/&/, $Daten);
foreach $Feld (@Formularfelder)
{
[...]
$Formular[$i] = $name;
$i = $i + 1;
$Formular[$i] = $value;
$i = $i + 1;
}
Abgesehen davon, daß es besser wäre mit CGI.pm zu arbeiten, solltest Du, wenn schon 'per Hand' ausgewertet, die Werte nicht in ein Array sonder in ein Hash schreiben.
my @Formularfelder = split(/&/, $Daten);
my %Formular, $Feld;
foreach $Feld (@Formularfelder)
{
my ($name, $value) = split(/=/, $Feld);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$Formular{$name} = $value;
}
Und weiter unten kannst Du die Ausgabe so umschreiben:
print ' <input type="checkbox" ';
print 'checked ' if $Formular{'schriftformat1'};
print qq!name="schriftformat1" value="fett"><b>fett</b>\n!;
print ' <input type="checkbox" ';
print 'checked ' if $Formular{'schriftformat2'};
print qq!name="schriftformat1" value="kursiv"><b>kursiv</b>\n!;
print ' <input type="checkbox" ';
print 'checked ' if $Formular{'schriftformat3'};
print qq!name="schriftformat3" value="unterstrichen"><b>unterstrichen</b>\n!;
Wenn Du dann noch die Bezeichner und Werte der Checkbox etwas modifizierst, dann kann das so aussehen:
print qq!<input type="checkbox" $Formular{'fett'}name="fett" value="checked"><b>fett</b>\n!;
print qq!<input type="checkbox" $Formular{'fett'}name="kursiv" value="checked"><b>kursiv</b>\n!;
print qq!<input type="checkbox" $Formular{'fett'}name="unterstrichen" value="checked"><b>unterstrichen</b>\n!;
Solltest Du auf CGI.pm umsteigen, schaut das dann, unter BErücksichtigung Deiner Vorgabe, so aus:
use CGI;
my $query = new CGI;
#hier irgenwelcher Code
print print $query->checkbox(-name=>'schriftformat1',
-label=>'fett');
print print $query->checkbox(-name=>'schriftformat2',
-label=>'kursiv');
print print $query->checkbox(-name=>'schriftformat3',
-label=>'unterstrichen');
oder aber (mit meiner Namensgebung)
use CGI;
my $query = new CGI;
#hier irgenwelcher Code
print print $query->checkbox(-name=>'fett');
print print $query->checkbox(-name=>'kursiv');
print print $query->checkbox(-name=>'unterstrichen');
Und im restlichen Programm fagst Du die einzelnen Checkboxen vielleicht mit
&das_will_der_aber_fett if($query_param('fett'));
ab.
Das Leben kann so einfach sein;-)
Grüße
Klaus