Dominique Nüssli: Fileupload mit cgi-lib.pl

Hallo

Rolf Rost hat ja schön beschrieben wie der Dateiupload via cgi-lib.pl funktioniert (http://www.teamone.de/selfaktuell/cgi-lib.htm). Beim zweiten Bsp. habe ich aber ein Problem, da funktioiert bei mir die Abfrage nicht, ob eine Datei ausgewählt wurde oder nicht. Denn das Skript frägt ab ob die Feldvariable (z.B: 'datei') gleich Null ist. D.h. wenn nichts in das entsprechende Feld eingetragen worden ist, gib es eine Fehlermeldung. Sobald aber in der Variable "writefiles" etwas steht, schreibt die "cgi-lib.pl" automatisch Daten in die entsprechende Variable (hier also in 'datei'). D.h. das Skript merkt nicht mehr ob wirklich eine Datei hochgeladen wurde. Wie kann ich nun abfragen ob tatsächlich eine Datei angegeben wurde? Und wie finde ich den ursprünglichen Namen der Datei heraus. Und wie merkt das Skript von welchem Typ die Datei ist? (Dies könnte man evt. über den Namen herausfinden).

Vielen Dank für Euere Bemühungen

Dominique

  1. Hallo

    Rolf Rost hat ja schön beschrieben wie der Dateiupload via cgi-lib.pl funktioniert (http://www.teamone.de/selfaktuell/cgi-lib.htm). Beim zweiten Bsp. habe ich aber ein Problem, da funktioiert bei mir die Abfrage nicht, ob eine Datei ausgewählt wurde oder nicht. Denn das Skript frägt ab ob die Feldvariable (z.B: 'datei') gleich Null ist. D.h. wenn nichts in das entsprechende Feld eingetragen worden ist, gib es eine Fehlermeldung. Sobald aber in der Variable "writefiles" etwas steht, schreibt die "cgi-lib.pl" automatisch Daten in die entsprechende Variable (hier also in 'datei'). D.h. das Skript merkt nicht mehr ob wirklich eine Datei hochgeladen wurde. Wie kann ich nun abfragen ob tatsächlich eine Datei angegeben wurde?

    Dominique

    Hallo,

    Du hast recht, die Variable wird überschrieben. Eine Möglichkeit zum Abfragen, ob eine Eingabe erfolgte gibt es jedoch: den Rückgabewert von &ReadParse genutzen.

    Mein BeispielScript ist auch nur das Wesentliche für den Prozess des Uploads mit CGI-LIB. Es gehört noch einiges mehr dazu um die Sache sicher zu machen, es müssen weitere Benutzereingaben erfasst werden, eine Logdatei geschrieben werden (Datum, Dateinamen....) uvam. Aber im Prinzip gehts so.

    Anstelle der CGI-LIB kann auch das Modul CGI.PM verwendet werden (Lincoln Stein), hier gibt es einige Möglichkeiten mehr fürs Upload. Ich habe mich jedoch noch nicht weiter mit diesem Modul befassen können (Zeitmangel).

    Viele Grüße, Rolf

    1. Vielen Dank für Deine Antwort,
      aber ein, zwei Fragen hätte ich noch...

      Du hast recht, die Variable wird überschrieben. Eine Möglichkeit zum Abfragen, ob eine Eingabe erfolgte gibt es jedoch: den Rückgabewert von &ReadParse genutzen.

      Welchen Wert meinst Du damit? Wenn ich sage $x = ReadParse(), dann erhalte ich doch einfach die Anzahl Felder, oder nicht?

      Anstelle der CGI-LIB kann auch das Modul CGI.PM verwendet werden (Lincoln Stein), hier gibt es einige Möglichkeiten mehr fürs Upload. Ich habe mich jedoch noch nicht weiter mit diesem Modul befassen können (Zeitmangel).

      Sollte ich diesen Lincoln Stein kennen? Hast Du mir die Adresse, wo ich das CGI.PM Modul finde?

      Vielen Dank

      Dominique

      1. Vielen Dank für Deine Antwort,
        aber ein, zwei Fragen hätte ich noch...

        Du hast recht, die Variable wird überschrieben. Eine Möglichkeit zum Abfragen, ob eine Eingabe erfolgte gibt es jedoch: den Rückgabewert von &ReadParse genutzen.

        Welchen Wert meinst Du damit? Wenn ich sage $x = ReadParse(), dann erhalte ich doch einfach die Anzahl Felder, oder nicht?

        $x ist gleich 0, wenn keine Eingabe erfolgte.

        Sollte ich diesen Lincoln Stein kennen? Hast Du mir die Adresse, wo ich das CGI.PM Modul finde?

        http://stein.cshl.org/WWW/software/CGI/cgi_docs.html

        Vielen Dank

        Dominique

        Hallo, ich habs einfach mal in Dein Posting hineingeschreiben.
        Schönes Wochenende, Rolf

        1. Nochmals vielen Dank für Deine Antworten

          Welchen Wert meinst Du damit? Wenn ich sage $x = ReadParse(), dann erhalte ich doch einfach die Anzahl Felder, oder nicht?

          $x ist gleich 0, wenn keine Eingabe erfolgte.

          Ich mache da irgendetwas falsch, bei mir entspricht $x der Anzahl Felder, unabhängig was dort eingegeben wurde. Wo liegt der Fehler oder weisst Du noch ne anderer Lösung?

          Vielen Dank und noch einen schönen Sonntag

          Dominique

          1. Nochmals vielen Dank für Deine Antworten

            Welchen Wert meinst Du damit? Wenn ich sage $x = ReadParse(), dann erhalte ich doch einfach die Anzahl Felder, oder nicht?

            $x ist gleich 0, wenn keine Eingabe erfolgte.

            Ich mache da irgendetwas falsch, bei mir entspricht $x der Anzahl Felder, unabhängig was dort eingegeben wurde. Wo liegt der Fehler oder weisst Du noch ne anderer Lösung?

            Vielen Dank und noch einen schönen Sonntag

            Dominique

            Hallo,

            ziehe dir mal die neuere Version von CGILIB, die 2.18 vielleicht klappts damit. Das mit dem Rückgabewert funktioniert einwandfrei mit Radio- oder Checkboxen. Mit Inputtypetext-Feldern scheint da ein Bug in der 2.17 zu liegen, auf der HP von SE Brenner gibts ein Beispiel <trost> was auch nicht geht </trost>.

            Und heute ist Sonntag, Rolf <g>

  2. Hallo Dominique,

    zum Thema File Upload gibt es unter

    http://www.terminalp.com/scripts/

    ein schoenes Skript, das ich selbst verwende und welches sich auch gut zum Studieren eignet.

    Viele Gruesse

    Andre