• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zu Fileupload

lascaux

Mitglied
Ich habe ein Fileupload, dass mir einen zufällig generierten Dateinamen gibt und gleich noch überprüft ob das Format des Files gültig ist.

PHP:
if(isset($_POST['eintragen'])) {
    
    $word = md5(time());
    $word = substr($word, -7);
    $datei = $_FILES['bild']['name'];
    $info   = pathinfo($datei);
    $format = $info["extension"];
    $dateiname    = $word.'.'.$format;
    $allowed_types = "(png|jpg|jpeg|gif)";
    $dir      = "../images/userimage/upload";
       
    if(preg_match("/\." . $allowed_types . "$/i", $_FILES["bild"]["name"])) {
      $usrname = $_POST['usrname'];
      $neudir   = mkdir($dir ."/$usrname" , 0777);
      $dateiupload1 = move_uploaded_file($_FILES['bild']['tmp_name'], "$dir/$usrname/$dateiname");
      echo "<a href=\"$dir/$usrname/$dateiname\">klick</a><br /><br />";
    } else {
      echo 'Ungültiges Dateiformat';
    }
    
  }
Getriggert wird Skript durch diese Maske (dienst bisher nur zu Testzwecken).

HTML:
<form action="upload.php" method="post" enctype="multipart/form-data">
        <input name="usrname" type="text" /><br />
        <input name="bild" type="file" /><br />
        <input name="eintragen" type="submit" value="upload" />
        </form>
Mein Frage bzw meine Bitte ist, mir einen kleinen Denkanstoß zu geben, wie ich dieses Skript erweitern kann, so dass ich 3 verschiedene Bilder in das Verzeichnis, dass erstellt wird, laden kann .. mit nur einem Klick. :)

Als gegenleistung biete ich Tips in HTML und CSS :)

lascaux
 
Zuletzt bearbeitet:
Das habe ich bereits probiert, ich bin aber keine PHP-Leuchte. Meine Kenntnisse reichen nicht weit und funktionieren nach dem Zufallsprinzip.
Das Ergebnis war, naja. Ich hatte trotzdem dann nur ein Bild in dem Ordner. Die andern beiden wurden völlig ignoriert.
 
Jetzt wird es gleich peinlich für mich :oops:

PHP:
<?php

  echo '<form action="" method="post" enctype="multipart/form-data">
        <input name="usrname" type="text" /><br />
        <input name="bild1" type="file" /><br />
        <input name="bild2" type="file" /><br />
        <input name="bild3" type="file" /><br />
        <input name="eintragen" type="submit" value="Hochladen" />
        </form>';
    
  
    $allowed_types = "(txt|png|jpg|jpeg|gif)";
    $dir      = "../images/userimage/dj";
    
    if(isset($_POST['eintragen'])) {
    
    $word = md5(time());
    $word = substr($word, -7);
    
    $datei = $_FILES['bild1']['name'];
    
    $info   = pathinfo($datei);
    
    $format = $info["extension"];
    
    $dateiname    = $word.'.'.$format;
       
    if(preg_match("/\." . $allowed_types . "$/i", $_FILES["bild1"]["name"])) {
      
      $usrname = $_POST['usrname'];
      
      $neudir   = mkdir($dir ."/$usrname" , 0777);
      
      $dateiupload1 = move_uploaded_file($_FILES['bild1']['tmp_name'], "$dir/$usrname/$dateiname");
      
      echo "<a href=\"$dir/$usrname/$dateiname\">klick</a><br /><br />";
    } else {
      echo 'Ungültiges Dateiformat';
    }    
  } if(isset($_POST['eintragen'])) {
    
      $word2 = md5(time());
      $word2 = substr($word2, -7);
      
      $datei2 = $_FILES['bild2']['name'];
      
      $info2   = pathinfo($datei2);
      
      $format2 = $info2["extension"];
      
      $dateiname2    = $word2.'.'.$format2;

      if(preg_match("/\." . $allowed_types . "$/i", $_FILES["bild2"]["name"])) {
        
        $usrname2 = $_POST['usrname'];
        
        $dateiupload2 = move_uploaded_file($_FILES['bild2']['tmp_name'], "$dir/$usrname/$dateiname2");
        
        echo "<a href=\"$dir/$usrname/$dateiname2\">klick</a><br /><br />";
      } else {
        echo 'Ungültiges Dateiformat';
      }} if(isset($_POST['eintragen'])) {
    
      $word3 = md5(time());
      $word3 = substr($word3, -7);
      
      $datei3 = $_FILES['bild3']['name'];
      
      $info3   = pathinfo($datei3);
      
      $format3 = $info3["extension"];
      
      $dateiname3    = $word3.'.'.$format3;
         
      if(preg_match("/\." . $allowed_types . "$/i", $_FILES["bild3"]["name"])) {
        
        $usrname = $_POST['usrname'];
        
        $dateiupload3 = move_uploaded_file($_FILES['bild3']['tmp_name'], "$dir/$usrname/$dateiname3");
        
        echo "<a href=\"$dir/$usrname/$dateiname3\">klick</a><br /><br />";
      } else {
        echo 'Ungültiges Dateiformat';
      }}
  
?>

Wie schon gesagt, ich bin keine große Leuchte was PHP betrifft. Meine Stärken liegen eher im Design und deren Umsetzung.
 
Der erzeugte Dateiname wird mit

PHP:
$word2 = md5(time());
      $word2 = substr($word2, -7);

erzeugt. Dort wird aber für jede der 3 Dateien das selbe erzeugt. Die time() ergibt ja das selbe, der MD5 ist folglich identisch für alle 3 Dateien und beim Speichern überschreiben die Dateien sich dann gegenseitig, so dass nur eine übrig bleibt.

Tipp: erzeuge für den Dateinamen einen richtigen Zufallscode. Schau dich mal danach um, gibt einige Beispiele dafür.
 
Noch 2 kleine Tipps:

Mit dieser Lösung kannst du nicht wirklich sicher gehen dass es sich bei dem Upload wirklich um eine Grafik handelt. Es kann genauso gut ein PHP Script mit der Dateiendung ".gif" sein. Der Code kann zwar nicht ohne Weiteres auf dem Webserver aufgeführt werden, möglicherweise wird dies aber durch eine local file inclusion in einem anderen Script möglich, das über den selben Hostnamen erreichbar ist.

Den Benutzernamen solltest du vor dem Upload auf jeden Fall auf Länge und unerlaubte Zeichen überprüfen, und ggf. eine Fehlermeldung ausgeben, statt den Upload durchzuführen.
 
Zurück
Oben