Daten eines Formulars an ein zweites weitergeben
speedy
- cgi
Hi Forum,
wie kann ich vernuenftig die Daten eines Formulars an ein CGI-Skript uebergeben, was wiederum eine Formularseite erzeugt, die die Daten des vorigen Formulars als Hiddenfields enthaelt und noch zusaetzliche Formularfelder bereitstellt?
Sprich: in Formular eins werden Daten eingegeben, die in Formular zwei noch ergaenzt werden.
Ich habe z.B. Probleme mit den Zeilenumbruechen bei Textareas und mit Gaensefuesschen bei normalen Textfeldern.
Viele Gruesse und Danke fuer die Hilfe
speedy
PS: Cheatah, bitte keine Loesungen mit CGI.pm, Du weisst ja, dass ich das bei meinem ersten Projekt nicht benutzen kann :-)
Hallo speedy,
Wenn Du die Formulardaten mit dem Beispiel aus Selfhtml einliest, dann erhälst Du ja einen Hash mit den Feldnamen als Keys und den Feldwerten als Values.
In einer Schleife kannst Du diese wieder als 'hidden' ausgeben:
foreach (keys(%form)) {
print "<input type="hidden" name="$_" value="$form{$_}">\n";
}
Ich hoffe das ist korrekt :-)
Gruß AlexBausW
Hi Alex,
ja das ist schon richtig. Aber ich krieg Probleme, mit den Sonderzeichen. Wenn ich die CGI-Daten unaufbereitet in das Hiddenfield schreibe, dann werden ja Prozentzeichen als _Eingabe_ gesehen und beim erneuten Senden wiederum als Sonderzeichen kodiert.
Wenn ich aufbereitete Daten in das Hiddenfield schreibe, dann krieg ich Probleme mit Zeilenumbruechen und Gaensefuesschen:
<input type="hidden" value="Text mit "Gaensefuesschen"">
da kommt dann der Browser irgendwie durcheinander. Die Frage ist also: wie muss ich die Daten vorbereiten um Sie dem zweiten Formular zur Verfuegung zu stellen?
Viele Gruesse
speedy
Hi Alex (II),
ich hab grad in der Forumsauslese ein Beispiel gefunden! Das werd ich mal testen und mich ggf. nochmal melden!
Danke erstmal
speedy
Hi speedy,
Dann musst Du Deine Values evtl. auch die Keys encoden ;-)
foreach (keys(%form)) {
print "<input type="hidden" name="".&Encode($_)."" value="".&Encode($form{$_})."">\n";
}
sub Encode {
my $in = shift;
$in =~ tr/ /+/;
$in =~ s/([^&=+$nichzucodierendezeichen])/sprintf("%%%02X",ord($1))/ego; #Url-encoden
return $in;
}
Ich hoffe das war was Du suchtest ;-)
Gruß AlexBausW
Hallo speedy,
wie kann ich vernuenftig die Daten eines Formulars an ein CGI-Skript uebergeben, was wiederum eine Formularseite erzeugt, die die Daten des vorigen Formulars als Hiddenfields enthaelt und noch zusaetzliche Formularfelder bereitstellt?
Möchtest Du das Auslesen von Formulareingaben vereinfachen? Das braucht nicht unbedingt CGI.pm, das geht auch mit cgi-lib.pl oder mit web.pm (xwolf). Web.pm bietet darüber hinaus einiges an Funktionen die das Leben leicher machen (eMail Check, URL Check, Datumsberechnungen uvam.). Syntax ist einfach:
use web; # web.pm kann im cgi-bin Verzeichnis liegen
%in = &ReadParse; # Eingaben lesen und parsen
$in{'name'} enthält die Eingabe vom inputFeld 'name' usw.
Das 1. CGI baut dann eine HTML-Seite auf mit einem neuen Form, einer neuen Form-Action und gefüllten Feldern.
Viele Grüße, Rolf
Hi Rolf,
danke, ich werd mir das mal ansehen.
Viele Gruesse
speedy