Matthias Jütte: Wie erfasse ich einen Datei-Pfad über ein Formular?

Hallo!

Ich bastele gerade an eiem Formular, mit dem ein Benutzer eine Datei auf seinem System aussuchen können soll, und das mir dann den kompletten Pfad dieser Datei liefert.

Erst habe ich es ohne viel Überlegen mit

<form enctype="multipart/form-data" name="new_item" action="?" method="post">
<label for="item_name">Name des Eintrags</label><input type="text" name="item_name" />
<label for="userfile">Datei</label><input name="userfile" type="file" />
<button type="submit">Eintrag anlegen</button>

versucht.

Allerdings liefert mir das ja nur den Namen der Datei, nicht den Pfad. Dazu dürfte die Datei ja auch noch ins Temp-Verzeichnis des Servers geladen werden.

Wie kann ich also einfach nur den Pfadnamen erfassen (ohne daß dieser per Hand eingegeben wird)?

Gruß

Matthias

--
ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
http://www.makaio.de/quotations
  1. <input name="xyz" type="file" size="xyz">

    Versuchs mal damit !
    Gretz Oliver

    1. hi,

      <input name="xyz" type="file" size="xyz">

      Versuchs mal damit !

      und du versuch's mal mit dem lesen der problemstellung, bevor du antwortest ;-)

      nichts für ungut, aber die antwort geht am problem vorbei.

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    2. <input name="xyz" type="file" size="xyz">

      Versuchs mal damit !
      Gretz Oliver

      Echte Sauerrei !
      Ohne zu lesen kam eine blöde Antwort !

      1. hi,

        Echte Sauerrei !
        Ohne zu lesen kam eine blöde Antwort !

        du antwortest ja auch "mit lesen" blöd.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Hallo!

    Na ja, ihr habt mich wenigstens mein Beispiel nochmal angucken lassen, das macht so nämlich keinen Sinn. Natürlich hatte ich in meinem Code ein INPUT vom Typ file (hatte nur schon wieder ein wenig rumgespielt).

    Problem ist aber nach wie vor das gleiche.

    Gruß

    Matthias

    --
    ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
    http://www.makaio.de/quotations
    1. Hi Matthias,

      Na ja, ihr habt mich wenigstens mein Beispiel nochmal angucken lassen, das macht so nämlich keinen Sinn. Natürlich hatte ich in meinem Code ein INPUT vom Typ file (hatte nur schon wieder ein wenig rumgespielt).

      Was genau meinst du jetzt? In deinem Ausgangsposting stand doch:
      Datei: <input name="..." type="file">

      Problem ist aber nach wie vor das gleiche.

      Ja, du kannst da clientseitig nicht viel machen (außer eben den Besucher bitten den Pfad von Hand einzugeben). Aber mal eine andere Frage: Wozu brauchst du den Pfad zu der Datei? Du kannst doch dann damit später nichts mehr anfangen, da _du_ ja keinen Zugriff auf den Rechner des Clienten hast.

      Eine Lösung für das Problem gibt es wenn, dann nur serverseitig. AFAIK liefert PHP dir in der Variablen $_FILE (wenn du das Formular an die PHP Datei geschickt hast) auch den ursprünglichen Pfad auf dem Clienten. Lass dir einfach mal $_FILE mit print_r() ausgeben.
      Ja, du hast recht, dabei wird die Datei natürlich im tmp Verzeichnis des Servers gespeichert, aber das  musst du halt in Kauf nehmen - die Datei wird ja, sofern du sie nicht irgendwo anders hin kopiert/verschoben hast bei Beendigung des Scriptes wieder gelöscht.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
      Zufällige Hinweise:
      ------------------------
      Fuer die Neulinge: Auf viele Fragen findet man eine
      Antwort im </archiv/>, das man auch durchsuchen kann
      http://suche.de.selfhtml.org/
      1. Hallo!

        Was genau meinst du jetzt? In deinem Ausgangsposting stand doch:
        Datei: <input name="..." type="file">

        Yep, sorry. War da wohl etwas durcheinander. Hatte das Text-Feld für Name als das Datei-Feld gelesen. Duh!

        Aber mal eine andere Frage: Wozu brauchst du den Pfad zu der Datei? Du kannst doch dann damit später nichts mehr anfangen, da _du_ ja keinen Zugriff auf den Rechner des Clienten hast.

        Tjahaaahh, die Pfade die dort angegeben werden beziehen sich auf Netzwerklaufwerke, die mir und auch anderen Benutzern innerhalb des Netzwerks zugänglich sind. Ich brauche den kompletten Pfad, um diesen als Link zu speichern. Konkret geht es um eine Verwaltung von Dokumenten in einem Intranet.

        Eine Lösung für das Problem gibt es wenn, dann nur serverseitig. AFAIK liefert PHP dir in der Variablen $_FILE (wenn du das Formular an die PHP Datei geschickt hast) auch den ursprünglichen Pfad auf dem Clienten. Lass dir einfach mal $_FILE mit print_r() ausgeben.

        Die Variable heißt $_FILES und ist hier auch schön beschrieben: http://www.php.net/manual/de/features.file-upload.php#features.file-upload.post-method

        Habe ich auch schon benutzt, wenn es tatsächlich darum ging, nur Dateien hochzuladen. Das Problem ist, daß in $_FILES nur der Dateiname, nicht aber der Pfad gespeichert wird.

        Der einzige Weg scheint mir zu sein, das Ganze mit JavaScript anzugehen, da ja nach der Auswahl der Datei der gesamte Pfad im Eingabefeld steht. Aber bevor das sein muß, bitte, bitte: her mit anderen Vorschlägen!

        Gruß

        Matthias

        --
        ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
        http://www.makaio.de/quotations
        1. Hi Matthias,

          Aber mal eine andere Frage: Wozu brauchst du den Pfad zu der Datei? Du kannst doch dann damit später nichts mehr anfangen, da _du_ ja keinen Zugriff auf den Rechner des Clienten hast.

          Tjahaaahh, die Pfade die dort angegeben werden beziehen sich auf Netzwerklaufwerke, die mir und auch anderen Benutzern innerhalb des Netzwerks zugänglich sind. Ich brauche den kompletten Pfad, um diesen als Link zu speichern. Konkret geht es um eine Verwaltung von Dokumenten in einem Intranet.

          Dann müsstest du dem Besucher aber erst mal klar machen, dass er nur Dateien von Netzlaufwerken auswählen darf und nicht Dateien von einer lokalen Festplatte von ihm.

          Die Variable heißt $_FILES und ist hier auch schön beschrieben: http://www.php.net/manual/de/features.file-upload.php#features.file-upload.post-method

          Habe ich auch schon benutzt, wenn es tatsächlich darum ging, nur Dateien hochzuladen. Das Problem ist, daß in $_FILES nur der Dateiname, nicht aber der Pfad gespeichert wird.

          Ok, dann geht das eben nicht, ich wusste nicht mehr genau, ob in $_FILES nicht doch auch der Original Pfad steht.

          Der einzige Weg scheint mir zu sein, das Ganze mit JavaScript anzugehen, da ja nach der Auswahl der Datei der gesamte Pfad im Eingabefeld steht. Aber bevor das sein muß, bitte, bitte: her mit anderen Vorschlägen!

          Also ich habe da nur geringe Hoffnungen, dass du mit Javascript arbeiten kannst, du kannst nämlich mit Javascript nicht in einem input type file arbeiten - aus Sicherheitsgründen, sonst könntest du ja etwas dort reinschreiben und das Formular abschicken ... womit du dann irgendwelche Daten geklaut hättest ;-)

          Nun, wenn es sich um bestimmte Netzlaufwerke oder um bestimmte Ordner auf Netzlaufwerken handelt, könntest du dir ja so ne art eigenen Filemanager machen.

          Dazu könntest du z.B. (wenn du mit PHP zugriff auf die Netzlaufwerke hast) eine Verzeichnisliste aufstellen, dort kann der Besucher mittels Klick auf eine Datei diese Datei auswählen und schon hast du für die Weiterverarbeitung die Daten die du haben willst.

          Wenn dich das interessiert, können wir ja noch weiter darüber diskutieren.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
          Zufällige Hinweise:
          ------------------------
          - Bitte schickt mir die Antwort als E-Mail an xy@xy.de
          Wie bitte? Noe, gibbet net!
          1. hi,

            Also ich habe da nur geringe Hoffnungen, dass du mit Javascript arbeiten kannst, du kannst nämlich mit Javascript nicht in einem input type file arbeiten - aus Sicherheitsgründen,

            doch, _auslesen_ des values sollte in aktuellen browsern möglich sein.

            sonst könntest du ja etwas dort reinschreiben und das Formular abschicken ... womit du dann irgendwelche Daten geklaut hättest ;-)

            _manipluieren_ selbstverständlich "böse",
            aber _auslesen_ relativ harmlos.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."