fileupload per cgi: was tun, wenn kein file ausgewählt?
Wolfgang
- perl
Hallo Leute,
folgendes Problem quält mich:
Ich habe einen Fileupload plus Text und Zusatzinfos, die per CGI zu einer Pressemitteilung zusammengefügt werden. Allerdings soll, wenn keine Bilddatei ausgewählt wurde, stattdessen eine ANDERE angezeigt werden. Es sieht bisher so aus:
$upload = "$cgi->param("userfile");"
if ( $upload eq "" ) { my $file = "/andere.gif"; } else { my $file = $cgi->param("userfile"); };
Leider funktioniert es einfach nicht, trotz stundenlangem rumprobieren... Wer kann mir helfen? Danke, Wolfgang
PS: Wie kann ich verhindern, dass im Textfeld html-code eingegeben wird?
$upload = "$cgi->param("userfile");"
Was soll des sein?
hast du dir den String mal anzeigen lassen?
if ( $upload eq "" ) { my $file = "/andere.gif"; } else { my $file = $cgi->param("userfile"); };
Leider funktioniert es einfach nicht, trotz stundenlangem rumprobieren... Wer kann mir helfen? Danke, Wolfgang
Ein Blick in die Doku kann nie schaden, http://perldoc.perl.org/CGI.html#CREATING-A-FILE-UPLOAD-FIELD
PS: Wie kann ich verhindern, dass im Textfeld html-code eingegeben wird?
gar nicht, das musst du filtern.
Struppi.
hallo,
das formular ist ein gewöhnliches Html-form-definiertes. ich kann alle variablen mit cgi->param("NAMEDESEINGABEFELDES"); auslesen. dein tip war super, weil $file nur den namen logo.gif ausgibt. habs also geändert. jetzt so geschrieben, geht aber immer noch nicht:#Upload
if ( defined $cgi->param("userfile") )
{
my $file = $cgi->param("userfile");
my $fname = "../seiten/presse_files/".time.$file.".htm";
my $fotoname = "../seiten/presse_files/".time.$file;
my $fotopfad = "../presse_files/".time.$file;
open DAT,'>'.$fotoname or die 'Error processing file: ',$!;
binmode $file;
binmode DAT;
my $data;
while(read $file,$data,1024) {
print DAT $data;
}
close DAT;
}
else
{
my $fname = "../seiten/bilder/logo.gif";
my $fotoname = "../seiten/bilder/logo.gif";
my $fotopfad = "../seiten/bilder/logo.gif";
};
ABER: Die Fehlermeldung lautet immer, dass die in der wenn dann Abfrage definierten Felder eben nicht definiert sind... Bitte um Hilfe... Merci,Wolfgang
Hey,
dein Code ist nicht geeignet. Du sollst die Funktionen upload und uploadInfo statt param verwenden. Struppi hat auf den Abschnitt in der Dokumentation verwiesen.
Da muss ich widersprechen... denn ohne die if Abfrage ist es mir mit diesem Perl möglich gewesen, eine Datei hochzuladen und nach meinen Wünschen zu benennen...
dieser teil funktioniert also:
my $file = $cgi->param("userfile");
my $fname = 'file_'.$$.'_'.$ENV{REMOTE_ADDR}.'_'.time;
open DAT,'>'.$fname or die 'Error processing file: ',$!;
binmode $file;
binmode DAT;
my $data;
while(read $file,$data,1024) {
print DAT $data;
}
close DAT;
#Datei umbenennen und Verschieben
my $newfile;
$newfile = time.$file;
rename($fname,$newfile);
was nicht funktioniert, ist die if-Abfrage zu verwirklichen, denn die Fehlerausgabe sagt mir, die in den if- und else-Fällen angegebenen Variablen sind nicht definiert... Danke für eure Hilfe, Wolfgang
Hi,
das formular ist ein gewöhnliches Html-form-definiertes.
Ein gewöhnliches form? Du solltest noch so wie es hier steht enctype="multipart/form-data" in das Form-Tag schreiben. Vielleicht ist ja das dein Fehler.
mfG,
steckl
Das ist nicht das Problem... Upload funktioniert...Variablen im If-Fall bleiben undefiniert...Wolfgang
if ( defined $cgi->param("userfile") )
Damit prüfst du, ob dem Script ein Parameter namens 'userfile' übermittelt wurde. Lässt der Anwender das Eingabefeld leer (weil er keine Datei auswählt), wird diese Abfrage trotzdem immer wahr sein. Willst du hingegen abfragen, ob dem Script tatsächlich ein Dateiname übergeben wurde, so betrachte den String im booleschen Kontext:
my $datei = $cgi->param('userfile');
# wurde dem Script ein Parameter namens userfile übergeben?
defined $datei ? print 'Parameter vorhanden' : print 'Kein Parameter userfile';
# hat der Parameter userfile einen Wert?
$datei ? print 'Dateiname vorhanden' : print 'Kein Name übergeben';
# weitere formale Prüfungen ...
Siechfred