Eingaben mit post übergeben?
computerrpof
- cgi
Hi
ich habe ein Formular angelegt. Es enthält eine Textarea namens "inhalt". Wenn man nun auf den submit Button klickt, soll der Inhalt der Textarea an das CGI übergeben werden nud geprüft werden, ob der Inhalt gleich null ist.
Leider klappts nicht so ganz.
Den Scriptteil, der das ganze rausfiltert, habe ich schon. Ich habs schon mal mit einem Textfeld versucht. Da gehts. Warum nicht mit der Textarea?
ich habe ein Formular angelegt. Es enthält eine Textarea namens "inhalt". Wenn man nun auf den submit Button klickt, soll der Inhalt der Textarea an das CGI übergeben werden nud geprüft werden, ob der Inhalt gleich null ist.
Leider klappts nicht so ganz.
Wo ist die HTML-Seite mit dem Problem? Wo ist das Skript mit dem Problem?
Liefere bitte dieses oder alternativ eine Glaskugel oder etwas gut abgestandenen Kaffeesatz.
Bitte, bitte, bitte, bitte, mit Zucker obendrauf ;>
soenk.e
hallo,
Den Scriptteil, der das ganze rausfiltert, habe ich schon. Ich habs schon mal mit einem Textfeld versucht. Da gehts. Warum nicht mit der Textarea?
Da gehts auch völlig problemlos. Du müßtest mal den entsprechenden Ausschnitt aus deinem Script herschreiben, damit man nach dem Fehler schauen kann.
Christoph S.
Das Script zum rausfiltern:
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $input);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
@vars = split(/&/, $ENV{QUERY_STRING});
foreach $var (@vars) {
($v,$i) = split(/=/, $var);
$v =~ tr/+/ /;
$v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$i =~ tr/+/ /;
$i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$i =~ s/<!--(.|\n)*-->//g;
$INFO{$v} = $i;
}
if($INFO{'action'} ne "") {
$action = $INFO{'action'};
}
else {
$action = $FORM{'action'};
}
Und die Funktion zum Vergleichen:
sub edit_inhalt {
if($FORM{'inhalt'} eq "") { print "Fehler!"; }
}
HTML Code:
<form name="hpinhalt" action="index.pl?action=edit_inhalt" method="post" onReset="return confirm('Inhalt wirklich löschen?')">
<center>
<textarea name="inhalt" rows="15" cols="50">
<_HPINHALT>
</textarea>
<br><br>
<input type="submit" value=" Senden "> <input type="reset" value=" Löschen "></font>
</center>
</form>
Index.pl ist die Datei, wo die Eingaben verarbeitet werden.
Und???
hallo,
Und die Funktion zum Vergleichen:
sub edit_inhalt {
if($FORM{'inhalt'} eq "") { print "Fehler!"; }
}
Das ist keine Funktion, sondern eine Subroutine, und die muß natürlich mit
edit_inhalt();
noch aufgerufen werden, sonst passiert - wie du geschildert hast - gar nix.
Christoph S.
Das ist keine Funktion, sondern eine Subroutine, und die muß natürlich mit
edit_inhalt();
noch aufgerufen werden, sonst passiert - wie du geschildert hast - gar nix.
Die Funktion wird aufgerufen.
Die Funktion wird aufgerufen.
nein, wird sie nicht, jedenfalls nicht in den Scriptbestandteilen, die du gepostet hast. Und ich kann ja nur das bewerten.
Hoi, <-- sowas nennt man eine Begruessung,
Das Script zum rausfiltern:
[...]
[x] du moechtest 'use CGI qw/param/;' verwenden
if($INFO{'action'} ne "") {
$action = $INFO{'action'};
}
else {
$action = $FORM{'action'};
}
Vergiss nicht, zu validieren... Was ist, wenn ich ' ' als Action
eingebe?
sub edit_inhalt {
if($FORM{'inhalt'} eq "") { print "Fehler!"; }
}
[...]
<textarea name="inhalt" rows="15" cols="50">
<_HPINHALT>
</textarea>
[...]
Das passiert naemlich genau hier. In 'inhalt' sind jetzt ein paar
Leerzeichen und Newlines. Ich glaube, du moechtest stattdessen
schreiben
print "Fehler!" if param('inhalt') =~ /^\s*$/s;
Gruesse, <-- das ist eine Verabschiedung
c.j.k