Stephan: / (CGI) Upload + Forumlar

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

  1. 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

    1. Hallo,

      ich hab mir meinen Text grad nocmal durchgelesen und festgestellt, dass er doch *etwas* schlecht verständlich ist ;-)
      also nochmal ganz einfach:

      Empfänger für Formulardaten

      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;
      }

      Empfänger für Datei

      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

      1. 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
        #------------------------------------------------------------------------------

        This piece of code is obtained from Tod Sambar for reading multipart

        form data. See http://www.sambar.com

        {
        # 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;  
        

        }

        1. 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