Mehrfach Upload

qsrs

Erfahrenes Mitglied
Hallo,

ich schreibe gerade an einem Script, das mehrere Uploads gleichzeitig ermöglichen soll. U.a. prüfe ich über eine Datenbank, ob der Dateityp erlaubt ist, ob der Dateinamen schon verwendet wurde uws. Die Formularfelder kann man dynamisch in beliebiger Anzahl erzeugen. Das sieht dann im Quelltext ca. so aus:

<input name="dbfiles_file_subject1" type="text" id="dbfiles_file_subject1" />
<textarea name="dbfiles_file_description1" id="dbfiles_file_description1"></textarea>
<input name="file1" type="file" />

<input name="dbfiles_file_subject2" type="text" id="dbfiles_file_subject2" />
<textarea name="dbfiles_file_description2" id="dbfiles_file_description2"></textarea>
<input name="file2" type="file" />

usw.

Dann wird über Post ein Script aufgerufen und die Daten übergeben. Ich versuche das dann in einer Schleife zu machen und mit der Variablen $i zu arbeiten:

PHP:
  for ($i = 1; $i <= $number_uploads; $i++) {
  if ($i <= $number_uploads) {

$file.$i = $_FILES["file.$i"];

   $dot = strrpos ($file_name.$i, ".") + 1;
   $file_extension = substr ($file_name.$i, $dot, strlen ($file_name.$i) - $dot);
   $file_date = date ("d.m.Y - H:i:s");
 
   $sql0 = "SELECT * FROM `$dbtable5` WHERE `file_subject` = '$dbfiles_file_subject$i' OR `file_name` = '$file_name$i'"; 
   $query0 = mysql_query ($sql0, $dbconnect);
   $array0 = mysql_fetch_array ($query0);
 
   //Soll prüfen, ob der Dateityp für das Hochladen zugelassen ist
   $sql6 = "SELECT * FROM `$dbtable6` WHERE `filetype_name` = '$file_extension' AND `filetype_locked` = 'true'"; 
   $query6 = mysql_query ($sql6);
   $array6 = mysql_fetch_array ($query6);
 
   //Soll prüfen, ob der Dateityp für das Hochladen zugelassen ist
   $sql7 = "SELECT * FROM `$dbtable5` WHERE `file_subject` = '$dbfiles_file_subject$i' OR `file_name` = '$dbfiles_file_name$i' AND `category_id` = '$dbfiles_category_id$i'"; 
   $query7 = mysql_query ($sql7, $dbconnect);
   $array7 = mysql_fetch_array ($query7);
 
   if ($array6[filetype_name] == $file_extension) {
    header ("Location: ".$PHP_SELF."?module=user&content=form_upload2&number_uploads=$number_uploads&error=true&error8=true&$file_name$i");
    }
   elseif (($array0[file_subject] == $dbfiles_file_subject) && ($array7[file_subject] == $dbfiles_file_subject) || ($array0[file_name] == $file_name) && ($array7[file_name] == $file_name)) {
    header ("Location: ".$PHP_SELF."?module=user&content=form_upload2&number_uploads=$number_uploads&error=true&error7=true");
    }
   else {
    $sql = "INSERT INTO `$dbtable5` (`file_subject`, `file_description`, `file_name`, `file_size`, `file_extension`, `file_date`, `category_id`, `mime_type`, `upload_user_id`) VALUES ('$dbfiles_file_subject$i', '$dbfiles_file_description$i', '$file_name$i', '$file_size', '$file_extension', '$file_date', '$dbfiles_category_id$i', '$file_type', '".$array[id]."')";
    mysql_query ($sql, $dbconnect);
    $sql3 = "SELECT * FROM `$dbtable5` WHERE `file_name` = '$file_name' AND `file_date` = '$file_date' LIMIT 1"; 
    $query3 = mysql_query ($sql3, $dbconnect);
    $array3 = mysql_fetch_array ($query3);
    if (@!move_uploaded_file ($_FILES["file"]["tmp_name"], "files/".$array3[id].".".$array3[file_extension]."")) {
     header ("Location: ".$PHP_SELF."?module=user&content=form_upload2&number_uploads=$number_uploads&error=true&error6=true");
     }
    }
   }
  }

Allerdings werden weder die Daten übermittelt, oder eine Datei korrekt hochgeladen. In $number_uploads wird übrigens die Anzahl der Uploads angegeben. Ich glaube, dass ich mit dem Array nicht korrekt umgehe. Ich komme aber einfach nicht darauf. Was mache ich falsch?
 
Zuletzt bearbeitet:
Ist der Formulartyp auch richtig angegeben?

PHP:
<form action="#" enctype="multipart/form-data">


Ich mache das bei meinen Projekten immer mit Array Forumularfeldern also

PHP:
 <input name="file[]" type="file" />

Dann bei der Überprüfung einfach mit einer foreach Schleife durchlaufen. Ist wesentlichw eniger Code.
 
Ja, Formulartyp ist multipart/form-data.

Wie würde das denn mit der Foreach-Schleife ungefähr aussehen. Ich habe mehrere Formularfelder (Titel, Beschreibung, Dateifeld etc.), und muss entsprechende Datenbankeinträge machen.
 
Es hat sich erledigt. Ich habe es jetzt doch mit der For-Schleife realisiert und nun funktioniert es. Trotzdem danke für die Hilfe.

Ich bin falsch mit den Arrays umgegangen. Es sollte natürlich so aussehen: $dbfiles_file_subject[$i]
 
Zurück