Nuclear: Upload Script mit Dropdown Ordnerauswahl

Hi ich suche ein Uploadscript für php wo ich bei der auswahl der hochzuladenden datei auch angeben kann wohin sie kommen soll am server. Währe dies mit einer dropdown auswahl möglich?

  1. Hello,

    Hi ich suche ein Uploadscript für php wo ich bei der auswahl der hochzuladenden datei auch angeben kann wohin sie kommen soll am server. Währe dies mit einer dropdown auswahl möglich?

    Hast Du Dir schon was überlegt dazu?
    Wie soll denn die Darstellung sein?

    Soll es eine Baumstruktur werden, soe wie in üblichen Dateibrowsern?
    Die benötigten Elemente dafür könntest du doch schon mal zeichen.
    Dann müsstest Du nur das infrage kommende Verzeichnis rekursiv auslesen
    und daraus dann den Baum am Bildschirm zeichnen lassen von Deinem Script
    Das File, das hochgeladen werden soll, kannst Du allerdings nur mit dem dafür vorgesehen Dialogfeld auswählen bei den "handelsüblichen" Browsern.
    Aber Durch Klick auf den richtigen "Button", also das Ziel, kannst Du den Request dann auslösen.

    Wo liegen also nun Deine Probleme?
    Bitte der Reihe nach :-)

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. ich habe dieses script gefunden und würde hier gerne die auswahl hinzufügen es sollten 4 ordner zur auswahl stehen (auf dem server)

      [php]<?php

      // Einstellungen
      $maxsize = "40960"; // Maximale Uploadgrösse (40 Kb)
      $uploddir = "uploadbin/"; // Upload Ordner
      $extensions = array(".jpg", ".gif"); // Erlaubte Erweiterungen

      if($_POST['action']=="upload")
      {
      $tmp_name = $HTTP_POST_FILES['bild']['tmp_name']; // Der Originalname
      $name = $HTTP_POST_FILES['bild']['name']; // Der Originalname
      $size = $HTTP_POST_FILES['bild']['size']; // Größe der Datei
      $type = $HTTP_POST_FILES['bild']['type']; // Der MIME Type der Datei

      $ext_tmp = explode(".", $name);
      $ext = ".".$ext_tmp[(count($ext_tmp)-1)];

      if(in_array($ext, $extensions))
      {
      if($size<=$maxsize && $size!=0)
      {
      while(file_exists($uploddir.$newname) || !$newname)
      {
      $newname = md5(uniqid(rand()));
      }

      if(move_uploaded_file($tmp_name, $uploddir.$newname.$ext))
      {
      echo "Die Datei erfolgreich hochgeladen.<br>";
      echo "Größe: ".$size." Byte<br>";
      echo "Name: ".$name."<br>";
      echo "MIME-Type: ".$type."<br>";
      echo "Ansehen: <a href='".$uploddir.$newname.$ext."'>".$uploddir.$newname.$ext."</a>";
      }
      else{echo "Fehler: Deitei konnte nicht verschoben werden!";}
      }
      else
      {
      echo "Ihre Datei ($size) ist über $maxsize Bytes oder gleich 0 KB";
      }
      }
      else
      {
      echo "Falsche Erweiterung: ".$name;
      }
      }
      else
      {
      echo "<form action='".$_SERVER['PHP_SELF']."' enctype="multipart/form-data" method='post'>";
      echo "<input type="hidden" name="MAX_FILE_SIZE" value="".$maxsize."">";
      echo "<input type='hidden' name='action' value='upload'>";
      echo "<table>";
      echo "<tr>";
      echo "<td>Datei</td><td><input type='file' name='bild'></td>";
      echo "</tr><tr>";
      echo "<td> </td><td><input type='submit' value='Hochladen'></td>";
      echo "</tr>";
      echo "</form>";
      echo "</table>";
      }

      ?>[/php]

      Ich weiß nicht ob das mit diesem dropdown code geht aber das hab ich mal gefunden:
      [php]<script>
      var vers = navigator.appVersion;
      var name = navigator.appName;
      vers_ie = vers.substring(22,23);
      vers_nc = vers.substring(0,1);
      if ((name == "Microsoft Internet Explorer" && vers_ie == 5) || (name == "Netscape" && vers_nc == 5)){
      function auswahl(link) {
       if(link == "leer") {
         document.forms[0].reset();
        document.forms[0].elements[0].blur();
         return;
       }else {
         location.href = link;
         document.forms[0].reset();
         document.forms[0].elements[0].blur();
        }
       }
      }
      </script>
      <form action="">
      <select size=1 name="Auswahl" onChange="auswahl(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)" style="width:150px; background-color:#FFFFFF; font-size:10; font-weight:bold; font-family:Tahoma; Color:#000000;" width="150">
      <option value="leer">Ordner Auswahl</option>
      <option value="leer">=================</option>
      <option value="Bildertest">Bilder</option>
      <option value="Doctest">Dokumente</option>
      <option value="videotest">Videos</option>

      </select></form>
      <br><br><br><br>[/php]

      1. Hello,

        $extensions = array(".jpg", ".gif"); // Erlaubte Erweiterungen

        if(in_array($ext, $extensions))
        {
          if($size<=$maxsize && $size!=0)
          {
            while(file_exists($uploddir.$newname) || !$newname)
            {
              $newname = md5(uniqid(rand()));
            }

        Hier können im Prinzip alle Dateitypen hochgeladen werden.
        Die Dateiendung besagt gar nichts.

        Der einzige Check, der sinnvoll wäre, wäre eine Untersuchung auf den MIME-Type auf dem Server.
        Das geht nur mit einer vernünftigen Nachschaufunktion, die allerdings in neueren PHP-Versionen nur noch im PEAR-Paket enthalten ist. Die Kontrolle von $_FILES['bild']['type'] nützt auch nichts, da die Angaben vom Client kommen.

        $HTTP_POST_FILES solltest Du auch nicht mehr benutzen, weil diese Globalen Arrays auch abgeschafft oder zumindest üblicherweise abgeschaltet werden seit PHP 5.

        http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays
        Stattdessen werden die "superglobalen Arrays" verwendet.

        Als erstes solltest Du Dir nach dem Upload den Error-Wert ansehen

        if ($_FILES[$formular_filename]['error'] === 0)
          {

        }

        dann wurde genau ein File fehlerfrei hochgeladen

        Bezüglich der Ünersicht der Zieverzeichniss und einer Zielauswahl daraus, müsstest Du mehrere "Submitbuttons" aufbauen. Diese bestehen im Prinzip aus der Grafik, die Du für das Ziel gezeichnet/ausgesucht hast. Schau ins SelfHTML rein, wie das geht.

        http://de.selfhtml.org/html/formulare/klickbuttons.htm

        Denen gibst Du dann einen Namen, den Du im $_POST-Array nachher auch wiederfindest.
        Diesen Namen musst Du dann erst übersetzen in den eigentlichen Pfad, wenn Du die Sicherheit Deines Servers nicht gefährden willst.

        Entwewder, Du arbeitest mit eienr Session, in der Du Dir die erlaubten Pfade merkst und ihnen einen Button-Namen zuweist, oder Du musst jedes Mal den übertragenen Pfadnamen prüfen, ob er in der Liste der erlaubten Pfade enthalten ist. Sonst könnte man Dir die Dateien überall abspeichern, wo PHP schreiben darf.

        Zum Auslesen der Zielverzeichnisse gibt es

        glob()     http://www.php.net/manual/en/function.glob.php

        und

        readdir()  http://www.php.net/manual/en/function.readdir.php

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau