Mehrere Dateien gleichzeitig hochladen mit move_uploaded_file()

g-zus

Erfahrenes Mitglied
Hi Leude,

hab ein Script geschrieben, das auf einem fremden Server läuft und musste mein Upload-Script für Bilder auf den Befehl

Code:
move_uploaded_file()

umstellen, vorher hatte ich immer copy() verwendet.

In meinem Script ist es momentan der Fall, dass man zwei Bilder hochladen bzw aktualisieren kann. Man kann in meinem Formular wählen ob man für Bild1 nichts anzeigen will, das aktuelle Bild das bereits hochgeladen wurde (falls dies existiert) oder ein neues Bild uploaden will.
Das gleiche geht auch für Bild2.

Nun habe ich das Problem, dass wenn ich zwei neue Dateien auswähle und diese hochlade nur eine Datei wirklich auf den Server gelangt, die andere bleibt irgendwie verschollen. Wenn ich jedoch erst Bild1 und dann Bild2 hochlade funktionierts. Aber das is ja nicht der Sinn der Sache....

Kann mir wer helfen? Kann man mehere Dateien mit dem Befehl move_uploaded_file() hochladen oder nicht? Eigentlich sollte es doch gehen, weil man ja die genaue Datei mit

Code:
$_FILES['bild1']['tmp_name']

bzw mit

$_FILES['bild2']['tmp_name']

"erfassen" kann und diese dann in den entsprechenden Ordner verschoben wird.

Danke im Vorraus für jede Hilfe.....
 
Ich hab mal eins geschrieben kapt. Gucks dir an und dann siehste ja wie ichs gemacht habe.

(Das is uuuuuur alt Also nich wegen schreibstill etc. meckern hatte es halt immer noch auf der Platte :))

PHP:
<?
    if($_POST["andern"]!="") {
    $anzahl=$_POST["andern"];
    }
    else {
        if($_POST["anzahl"]=="") {
            $anzahl=5;
        } else {
            $anzahl=$_POST["anzahl"];
        }
    }

    if(count($_FILES)!=0 && $_POST["andern"]=="")
    {
        $uploaddir = 'e://upload//';
        echo "<html>\n".
              "<head>\n".
              "<title>Fileuploadscript</title>\n".
              "</head>\n".
              "<body>\n".
              "<table>\n".
              "<tr>\n";
        for ($zahl=0;$zahl<$anzahl;$zahl++)
        {
            if (move_uploaded_file($_FILES["userfile"]["tmp_name"]["$zahl"], $uploaddir . $_FILES["userfile"]["name"]["$zahl"])) {
                print "<td colspan=\"3\">Datei wurde erfolgreich hochgeladen</td></tr></td>\n";
                print "<td style=\"text-align:right;\">". round($_FILES["userfile"]["size"]["$zahl"]/1024/1024) ."</td><td>Mbyte</td><td style=\"text-align:center;\" rowspan=\"3\" width=\"200\">".$_FILES["userfile"]["name"]["$zahl"]."</td></tr><tr>\n";
                print "<td style=\"text-align:right;\">". round($_FILES["userfile"]["size"]["$zahl"]/1024) ."</td><td>Kbyte</td></tr><tr>\n";
                print "<td style=\"text-align:right;\">". round($_FILES["userfile"]["size"]["$zahl"]) ."</td><td>Byte</td></tr>\n";
            } elseif($_FILES["userfile"]["name"]["$zahl"]==""){
            } else {
                print "Possible file upload attack!  Here's some debugging info:\n";
                print_r($_FILES);
            }
        }
    } else {
    ECHO "<tr><td><form enctype=\"multipart/form-data\" action=\"upload.php\" method=\"post\">";
    for($zahl=0;$zahl<$anzahl;$zahl++) {
        echo "Send this file: <input name=\"userfile[]\" type=\"file\"name=\"MAX_FILE_SIZE\" value=\"300000\">\n<br>\n";
    }
    echo "<input type=hidden name=anzahl value=".$anzahl."><input type=\"text\" size=\"3\" name=\"andern\"><input type=\"submit\" value=\"Feldanzahl ändern\"><input type=\"submit\" value=\"Send File\">
    </form></td></tr>";
    }

    ECHO "<input type=hidden name=anzahl value=".$anzahl."><tr>\n<td colspan=\"3\"><form action=\"upload.php\"><input type=\"submit\" value=\"Zurück\">\n</td>\n</tr>\n";
?>
 
also mein Code wär

Code:
      if($bild_menue1=="old"){

         $location1 = $bild_url_old1;

      }elseif($bild_menue1=="new"){

         if($bild1=="1"){

            if($bild_url1!=""){

               if ($bild_url1) {

                  if($bild_url1_size<"($max_filesize*8*1024)"){


                     if ($_FILES["bild_url1"]['type'] == "image/gif"){

		        $postfix = ".gif";

                     }elseif ($_FILES["bild_url1"]['type'] == "image/jpg"){

		        $postfix = ".jpg";

                     }elseif ($_FILES["bild_url1"]['type'] == "image/jpeg"){

		        $postfix = ".jpeg";

                     }elseif ($_FILES["bild_url1"]['type'] == "image/jpe"){

		        $postfix = ".jpe";

                     }elseif ($_FILES["bild_url1"]['type'] == "image/pjpg"){

		        $postfix = ".pjpg";

                     }else{

		        $postfix = ".iff";

		     }

                     $path_to_file = "../img/profile/";
                     $location1 = $path_to_file.$user."_1".$postfix;

                     if(file_exists($location1)){

		        unlink($location1);
		        if(move_uploaded_file($_FILES["bild_url1"]['tmp_name'],$location1)){

   		           echo "<font size=\"1\" face=\"Verdana\">Datei (Bild 1) wurde hochgeladen!</font><br>\n";

		        }else{
   		           echo "<font size=\"1\" face=\"Verdana\"><b>Ein <u>Fehler</u> trat auf</b>: Datei (Bild 1) wurde nicht hochgeladen!</font><br>\n";

		        }                     }else{
		        if(move_uploaded_file($_FILES["bild_url1"]['tmp_name'],$location1)){
   		           echo "Datei (Bild 1) wurde hochgeladen!";
		        }else{
   		           echo "<b>Ein <u>Fehler</u> trat auf</b>: Datei (Bild 1) wurde nicht hochgeladen!";

		        }
                     }
                  }else{
                     echo "Die Datei (Bild 1) ist zu groß!";
                  }
               }else{
                  echo "Ein Fehler ist beim Upload aufgetreten!";
               }
            }
         }else{
	    $location1 = "";
         }
      }

Der ganze Code kommt zweimal hintereinander, einmal mit $bild_url1 und einmal mit $bild_url2. Is ein recht altes Script von mir, das eigentlich immer gut funktioniert hat, aber weil ich auf die Funktion move_uploaded_file() umsteigen musste gehts nicht mehr. GetImageSize() funktioniert übrigends auch nicht, keine Ahnung wieso.... :)


Danke für den Code, werd mir das Zeug mal vorknüpfen.
 
Fehler ist gefunden, war ein kleiner, winzigkleiner Tippfehler von mir, aber schon war das ganze Script außer Funktion.

Hab beim Upload des zweiten Bildes das erste gelöscht, nicht das zweite. Hab da ja so einen Check drin, ob die Datei bereits existiert.

Aber ne andere Frage hät ich noch. Weil bei mir getimagesize() nicht funktioniert kann ich damit den Dateityp ja nicht richtig auslesen, aber diese Abfrage funktioniert auch nicht, obwohl ich sie hier aus dem Forum hab:

Code:
if ($_FILES["bild_url1"]['type'] == "image/gif"){
   $postfix = ".gif";
}elseif ($_FILES["bild_url1"]['type'] == "image/jpg"){
   $postfix = ".jpg";
}elseif ($_FILES["bild_url1"]['type'] == "image/jpeg"){
   $postfix = ".jpeg";
}elseif ($_FILES["bild_url1"]['type'] == "image/jpe"){
   $postfix = ".jpe";
}elseif ($_FILES["bild_url1"]['type'] == "image/pjpg"){
   $postfix = ".pjpg";
}else{
   $postfix = ".iff";
}

irgendwie kommt bei mir immer *.iff raus.
 
MoinMoin

Funktioniert doch einwandfrei!

lass dir mal per echo die dateityp ausgeben

echo $_FILES['bild_url1']['type']."/".$postfix;

Also bei mir ging das!

Hatte auch ein JPG dabei mit "image/pjpeg".

Webbi
 
Zurück