/ (CGI) Upload + Forumlar
Stephan
- perl
Hallo Forum,
ich habe in der Forum Auslese das Script zum Uploaden von Dateien aus einem Formular gefunden http://www.teamone.de/selfhtml/sfausles/tsfa_teh.htm und möchte das jetzt zusammen mit einem "normalen" Formular benutzen, so dass man also Bild und Text gleichzeitig an das Script sendet ...
wie krieg ich den "Empfänger" für die Datei und den für die anderen Daten kombiniert?
Danke für jede Hilfe!
Stephan
Hi Stephan
Benutze doch um deine eine Form einfach noch eine andere.
Dann kannst Du zwei Form Actions definieren.
Dann sollte es funktionieren, wenn ich Dein Problem richtig verstanden habe.
Viele Grüße,
Markus Mann
http://www.db-sol.com
Hallo Forum,
ich habe in der Forum Auslese das Script zum Uploaden von Dateien aus einem Formular gefunden <../../sfausles/tsfa_teh.htm> und möchte das jetzt zusammen mit einem "normalen" Formular benutzen, so dass man also Bild und Text gleichzeitig an das Script sendet ...
wie krieg ich den "Empfänger" für die Datei und den für die anderen Daten kombiniert?Danke für jede Hilfe!
Stephan
Hallo,
ich hab mir meinen Text grad nocmal durchgelesen und festgestellt, dass er doch *etwas* schlecht verständlich ist ;-)
also nochmal ganz einfach:
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.\n)*-->//g;
$value =~ s/ä/ä/g;
$value =~ s/Ä/Ä/g;
$value =~ s/ö/ö/g;
$value =~ s/Ö/Ö/g;
$value =~ s/ü/ü/g;
$value =~ s/Ü/Ü/g;
$value =~ s/ß/ß/g;
$FORM{$name} = $value;
}
binmode STDIN;
read STDIN, $Daten, $ENV{'CONTENT_LENGTH'};
@Teile = split /-----------------------------.{9}/, $Daten;
@Datei = split /\n/, $Teile[1], 5;
while ($Datei[1] =~ /\/) { $Datei[1] =~ s/^.*\//; }
$Datei[1] =~ s/"//;
chop $Datei[1];
chop $Datei[4]; chop $Datei[4];
mein Problem ist halt beides zu kombinieren ...
Gruß
Stephan
Hallo Stefan,
wenn ich Dich jetzt richtig verstanden habe, dann willst Du in einem Rutsch sowohl Textfelder aus Formularen, sowie eine Datei schicken und dann entsprechend verarbeiten!!
Das sollte mit folgendem Script gehen...
Ciao, Andi
####################################################
#!/usr/bin/perl
$quota = 100; #in KB
$content_type = $ENV{'CONTENT_TYPE'};
$content_len = $ENV{'CONTENT_LENGTH'};
$request_method = $ENV{'REQUEST_METHOD'};
#Formulardaten einlesen
&ParseForm;
#Die Daten aus dem Formular
$filename = $FORM{'filename'}; #z.B. Upload-Verzeichnis+Name
$bin = $FORM{'Datei'}; #Die eigentliche Datei
print "Content-type: text/html\n\n";
#Filesize cheecken
$filesize = $content_len/1024;
#if ($filesize > $quota) { #Behandlung des Quotas}
&SaveFile;
print "<html><body>Upload OK!</body></html>";
exit;
#------------------------------------------------------------------------------
sub ParseForm
#------------------------------------------------------------------------------
{
# Buffer the POST content
binmode STDIN;
read(STDIN, $buffer, $content_len);
# find boundary
# Eric Poulsen fixed the following to allow for quotes.
# ($boundary = $content_type) =~ s/^.*boundary=(.*)$/\1/;
($boundary = $content_type) =~ s/^.*boundary="?(.*?)"?$/$1/;
@pairs = split(/--$boundary/, $buffer);
@pairs = splice(@pairs,1,$#pairs-1);
for $part (@pairs)
{
($dump,$fline,$value) = split(/\r\n/,$part,3);
next if $fline =~ /filename=""/;
$fline =~ s/^Content-Disposition: form-data; //;
(@columns) = split(/;\s+/, $fline);
($name = $columns[0]) =~ s/^name="([^"]+)"$/$1/g;
if ($#columns > 0)
{
if ($value =~ /^Content-Type:/)
{
($contenttype,$dump,$value) = split(/\r\n/,$value,3);
}
else
{
($dump,$value) = split(/\r\n/,$value,2);
}
}
else
{
($dump,$value) = split(/\r\n/,$value,2);
if (grep(/^$name$/, keys(%CGI)))
{
if (@{$FORM{$name}} > 0)
{
push(@{$FORM{$name}}, $value);
}
else
{
$arrvalue = $FORM{$name};
undef $FORM{$name};
$FORM{$name}[0] = $arrvalue;
push(@{$FORM{$name}}, $value);
}
}
else
{
next if $value =~ /^\s*$/;
$FORM{$name} = $value;
}
next;
}
$FORM{$name} = $value;
}
}
#--------------------------------------------------------------------------
sub SaveFile
#--------------------------------------------------------------------------
{
open(FILE, ">$filename");
binmode FILE;
print FILE $bin;
close FILE;
}
Hallo Stefan,
wenn ich Dich jetzt richtig verstanden habe, dann willst Du in einem Rutsch sowohl Textfelder aus Formularen, sowie eine Datei schicken und dann entsprechend verarbeiten!!
Das sollte mit folgendem Script gehen...
Du hast mich richtig verstanden :)
Hast du zufällig ein HTML Formular, was man dafür benutzen kann? - ich blicke durch das Script nicht mehr durch ...
wenn ja, mail es mir doch bitte (mailto:stephan.janz@online.de)
Danke!!
Stephan