ein "textarea"-Feld mit dem Namen "xyz". Werden die Eingaben von Textarea genauso wie die Inputdaten mit Perl eingesammelt? […] Oder geht das nicht?
Kurze Antwort: ja, es funktioniert so, wie es du dir vorstellst. Warum hast du das nicht einfach probiert? Durch 10 Stunden warten auf eine Antwort hast du dir 10 Minuten experimentieren gespart.
Lange Antwort: es liegt hier ein Verständnisproblem vor. Das CGI-Programm kümmert nicht, wie das HTML aussieht. Das CGI-Programm weiß gar nichts über den Empfang von Formularen per se! Es nimmt bloß eine schon vom Server etwas aufbereitete HTTP-Anfrage entgegen, im wesentlichen z.B. so:
GET /foo.pl?tbgelesen=on&xyz=foobar HTTP/1.1
Hier sind gar keine verschiedenen Typen von Formularelementen sichtbar, bloß Schlüssel-Wert-Paare. Die API, so z.B. die Funktion param, schnippelt sich das benötigte heraus. So eine Anfrage kann auf vielfältige Weise erstellt werden; HTML-Formulare sind im Web eher in der Minderheit.
<input class="input_style" type="checkbox" name="tbgelesen" value="on">
Das ist unüblich, sogar seltsam für mein Empfinden. Stattdessen setzt man das Attribut checked.
Wenn jetzt kein haken gesetzt ist, wird ja nicht off übermittelt, sondern wahrscheinlich "" (nichts).
Das ist nicht richtig. Der Schlüssel wird gar nicht übermittelt.
GET /foo.pl?xyz=foobar HTTP/1.1
Die Perlabfrage ob "tbgelesen" angeklickt wurde kann ja auch nur auf das "on" bezogen werden.
Das ist nicht richtig. Du sollst Checkboxen einfach im Boolkontext auswerten.
<form action="http://localhost:5000/foo.pl">
<input type="checkbox" name="tbgelesen" checked>
<textarea name="xyz">foobar</textarea>
<input type="submit">
</form>
#!/usr/bin/env perl
use 5.014;
use CGI qw();
use Data::Dumper qw(Dumper);
my $c = CGI->new;
STDOUT->print(
$c->header('text/plain'),
Dumper($c),
'Das Feld mit dem Namen xyz hat den Inhalt '
$c->param('xyz'),
' und das Feld mit dem Namen tbgelesen '
$c->param('tbgelesen')
? 'existiert/ist wahr/selektiert.'
: 'existiert nicht/ist falsch/nicht selektiert.'
);
# alternativ:
# if ($c->param('tbgelesen')) {
# # an
# } else {
# # aus
# }