in ein Formularfeld schreiben
Conny
- perl
WIchtig ist sicher, ich habe alles in Perl geschrieben auch das Formular mit: print start_form();
Ich habe in Perl(CGI) dieses Formular ausgewertet z.B. my $vorn = param("vorn");
und möchte wenn nicht alle Mussfelder ausgefüllt wurden das Formular erneut anzeigen(funktioniert) aber bitte mit den schon eingegebenen Werten(funkioniert nicht). Es gelingt mir nicht die ausgelsenen Werte die ja in Variablen stehen in die Textfelder wieder einzulesen oder was weiß ich wie dies geht. In Javascript kenne ich es so: document.Testform.abbuchung.value = variable;
Kann mir jemand helfen?
Vielen Dank im vorraus, Conny
Hallo,
Ich mach das immer so, daß ich bei der Formularanzeige bereits Vorbelegungen vornehme:
my $vorn = param('vorn');
[...]
print qq!<input type="text" name="vorn" value="$vorn">!;
(um bei Deinem Beispiel zu bleiben)
Sollte das Formular erstmalig generiert werden, so ist $vorn leer, es steht also auch nichts im HTML-Formular. Sollte das Formular ein zweites Mal angezeigt werden, da, wie Du es willst, eventuell einige Felder nicht ausgefüllt werden, so wird eben der beriets eingegebene Inhalt vorbelegt.
Einziges 'Problem' dabei ist, daß ein eventuell vorhandener Reset-Button dann nicht mehr gleich wie auf der ersten Seite funktioniert, da er ja die vom Server übergebenen Werte wieder in die Formularfelder einträgt.
Etwas anders läuft es ab, wenn Du für die Ausgabe die in CGI.pm bereitgestellte Funktion textfield verwendest.
Da ist dan nämlich so, daß, quasi automatisch, eine Vorbelegung des Textfeldes erfolgt, wenn param('vorn') einen Wert zurückliefert.
ein
print textfield('vorn');
ergibt also im ersten Umlauf
<input type="text" name="vorn">
und im zweiten (falls unter vorn XY eingetragen wurde)
<input type="text" name="vorn" value="XY">
Näheres dazu findest Du unter
perldoc CGI (Abschnitt: CREATING A TEXT FIELD)
bzw. im Code von CGI.pm (sub _textfield)
Grüße
Klaus
Hallo!
Du mußt einfach den Wert der Variablen als Value in die input-Tags schreiben, also:
print "<input type="text" name="vorn" value="".$vorn."">";
Gruß Markus
Hallo Markus,
print "<input type="text" name="vorn" value="".$vorn."">";
Ich weiß schon, daß es mehrere Wege gibt, die zum Ziel führen, und ohne Dir nahetreten zu wollen, aber irgendwie scheint mir Deine 'Formatierung' doch etwas 'mit der Kirche ums Kreuz'.
In Perl gibt es zwei Arten, wie Strings angegeben werden können. [1] Während mit ' angegebene Strings, so verwendet werden, wie sie angegeben sind (single-quoted strings), erfolgt vor der Verarbeitung von double-quoted strings (also jene die standardmäßig mit " angegeben wurden) eine sogenannte Interpolation. Dabei werden, falls im String vorhanden, Variablenbezeichner durch den Inhalt der Variable ersetzt.
Sinnvollerweise können die Begrenzer auch beliebig sein, um das ständige ausmaskieren der Begrenzerzeichen zu vermeiden. Daneben gibts auch den Punkt-Operator für das Konkatenieren (Zusammenhängen) von Strings.
Also entweder
print '<input type="text" name="vorn" value="'.$vorn.'">';
oder
print "<input type="text" name="vorn" value="$vorn">";
^^^^^^^^
Beachte den Unterschied zu Deinem Beispiel---------´
oder aber auch
print qq!<input type="text" name="vorn" value="$vorn">!;
bzw.
print qq[<input type="text" name="vorn" value="$vorn">];
(Ja, auch Klammerpaare werden 'richtig' interpretiert)
Also mir kommen die zwei letzen Varianten doch leichter lesbar vor, als die Beispiele oben.
Näheres findest Du unter
perldoc perlop (Abschnitt 'Quote and Quote-like Operators')
So, ich hoffe, Dir einige Anregungen gegeben zu haben, Perl etwas effizienter zu nutzen, ohne den 'Oberlehrer' raushängen zu lassen.
Grüße
Klaus
[1] Außerdem sollte in diesem Zusammenhang noch erwähnt werden, daß es in Perl auch Sog. Here-Documents gibt.
print <<EOT;
hier kann jede Menge
Text stehen, der
auch $variablen behinhalten kann,
die auch interpoliert werden.
Das Ende des Ganzen erfährt das Script durch
eine Zeile, in der das steht, was oben nach dem << und vor dem ; eingetragen ist (wobei das allerdings nicht mit ausgegeben wird):
EOT