Manuel Burghammer: wieder mal CGI und fileupload (teilweise klappt das schon aber im moment steh ic

tagchen,

ich hab noch ein kleines problemchen in PERL:
ich uebergebe ein (text)file an ein perl-script per

<input type="file" name="Datei" size="30">
  <input type="submit" value="Upload starten">
  <input type="Hidden" name="exec" value="upload">
  <input type="Hidden" name="serv" value="write">
  <input type="Hidden" name="session" value="1234567890ab">

dann lese ich ueber

$file=new CGI(\*STDIN);

die datei ein.......jetzt hab ich aber folgendes problem:

wie kann ich die ausgegebenen daten so zerlegen das ich die 'hidden' felder  einzetln lesen kann???

mit $file->param('exec'); usw. klappt das nicht und bei einem $file->param(); krieg ich nur die textdatei und die hidden-files zusammengehaengt :o(

ich hab in der doku und auch im archiv nach laengerer recherche nix gefunden.....weiss jemand rat ???

thx4hlp

  1. Hallo !

    $file=new CGI(\*STDIN);        # ?????

    Versuch es einfach so :

    $cgi = new CGI;
    $file= $cgi->param("Datei");
    $exec= $cgi->param("exec");
    usw.

    Nicht getestet, sollte aber klappen.

    Gruß,
    Kerki

    1. tagchen,

      danke, aber das klappt auch nicht....das problem ist ja das die variablennamen nirgends erscheinen :o(

      und die doku gibt auch nix her dementsprechend....

      1. Hallo!

        Hmmm. ?

        Wie sieht denn das zugehörige <Form>-Tag überhaupt aus ?

        So wäre es schon nicht schlecht :

        <form action="/cgi-bin/upload.pl" method=post enctype="multipart/form-data">

        siehe <../../tchg.htm#a1>

        Gruß,
        kerki

        1. hallo,

          folgendes steht in meiner html-seite:

          <form name="Upload" action="/cgi-bin/upload.cgi" method="post" enctype="multipart/form-data">
            <input type="file" name="Datei" size="30">
            <input type="submit" value="Upload starten">
            <input type="Hidden" name="exec" value="upload">
            <input type="Hidden" name="serv" value="write">
            <input type="Hidden" name="session" value="1234567890ab">
          </form>

          (den o.g. beitrag hab ich gelesen und so funktioniert das auch, nur mit dem CGI modul nicht)

          so sieht das test-script aus:

          #!/usr/bin/perl -w

          use CGI;
          $file = new CGI(\*STDIN);
          print $file->header();
          @names = $file->param();   # das hab ich aus der doku
          print "<br><br>x-x-x-x-x--------"; # nur um optisch zu sehen wo das script grad ist
          print $file->param("Datei");  # eben das funktioniert nicht :o(
          print "<br><br>";     # dient wieder nur der uebersichtlichkeit
          print @names;      # hier gibt er mir schon alles aus, aber bei $name[x] halt jede zeile einzeln
          print "<br><br>";
          for ($count=0; $count<=20; $count++) {
          print "<br><br>$names[$count] -- $count\n";  # hier hab ich nur versucht festzustellen wie die ausgabe aussieht
          }

          und eben das einzige problem das ich hab: wie kann ich die parameter (exec, datei, serv und session) EINZELN auswerten bzw lesen ??

          ich muss irgendwie die session mit uebergeben weil die ganze benutzerfuehrung und das login mit session und ner mySQl datenbank funktionieren

          1. hallo,

            also ich hab mir mal das CGI-Modul angesehen. (Version 2.66)
            Soweit ich das gesehen habe, wird 'multipart/formdata' nur behandelt, wenn bei 'new' _kein_ Filehandle oder Querystring übergeben wird.

            So gesehen müßte es heißen:
            ----------- Start of script --------------------
            use CGI;
            $file = new CGI();      #ohne STDIN
            print $file->header();
            $filename =  $file->param("Datei");

            print "Dateiname = $filename\n";

            jetzt geben wir den inhalt der Datei aus

            print "<br><br>Start Dateiinhalt--------<br><pre>"; # nur um optisch zu sehen wo das script grad ist
            print while(<$filename>);
            print "</pre><br>ende Dateiinhalt-------<br>";     # dient wieder nur der uebersichtlichkeit

            print "<br><br>Hier noch die Variablen in einer Liste:<br>";
            @names = $file->param();   # das hab ich aus der doku
            foreach my $name (@names)
               {
               print $name . '=' . $file->param($name) . "<BR>\n";
               }
            ----------- End of script --------------------

            hab ausprobiert, es funktioniert.
            Das mit  dem STDIN ist eigentlich nur zu testzwecken, wenn Du Dein script auf der shell ( od. Eingabeaufforderung) startest. Da kannst Du ddann auch interaktiv Parameter übergeben, ohne eine Webserver zu gebrauchen.
            Außerdem gibts noch eine Möglichkeit, das ganze Query zwischenzuspeichern und dann wieder zu laden, das ist aber etwas für ganz spezielle Anwendungen.

            Grüße
            Klaus

            1. hallo klaus,

              is echt genial....genau so brauchte ich das.......
              jetzt muss ich nur noch das teil analysieren und schaun wo ich den denkfehler hatte.....

              danke dir :o))

              1. hallo Maonuel,

                jetzt muss ich nur noch das teil analysieren und schaun wo ich den denkfehler hatte.....

                in der Zeile
                $file = new CGI;

                Klaus