2015-12-22 3 views
2

Я сделал многопользовательский загрузчик php.Множественная загрузка в php & mysql

это работает, но только с одним файлом каждый раз. если выбрать (пример) 4 чего-то еще, что он делает загрузку, поместите что-то в db.

вот код:

if(isset($_FILES['files'])){ 
$errors= array(); 
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
    $file_name = $_FILES['files']['name'][$key]; 
    $naamzonderwww = substr($file_name, 21, -4); 
    $artiest = $_POST['artiest']; 
    $file_size =$_FILES['files']['size'][$key]; 
    $file_tmp =$_FILES['files']['tmp_name'][$key]; 
    $file_type=$_FILES['files']['type'][$key]; 

    $DB = mysql_query("INSERT INTO `audio` (titel, url, categorie) values ('".$naamzonderwww."', 'http://.com/audio/files/".$file_name."','".$artiest."')"); 
    $desired_dir="user_data"; 
    if(empty($errors)==true){ 
     if(is_dir($desired_dir)==false){ 
      mkdir("$desired_dir", 0700);  // Create directory if it does not exist 
     } 
     if(is_dir("$desired_dir/".$file_name)==false){ 
      move_uploaded_file($file_tmp,"user_data/".$file_name); 
     }else{         //rename the file if another one exist 
      $new_dir="user_data/".$file_name.time(); 
      rename($file_tmp,$new_dir) ;    
     } 
     mysql_query($query);    
    }else{ 
      print_r($errors); 
    } 
} 
if(empty($error)){ 
    echo "Success"; 
}} 

форма

<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="files[]" multiple="" /> 
    <p> 
    <label>Artiest</label> 
    <input type="text" name="artiest" /> 
    </p> 
    <input type="submit"/> 
</form> 
+3

Изменить 'Еогеасп ($ _ FILES [ 'файлы'] [ 'tmp_name']' в 'Еогеасп ($ _ FILES [ 'файлы']', а затем использовать '$ _FILES [ 'файлы] [$ key] ['name'] '.... etc – Darren

+0

У меня есть это сейчас? – pipi

+0

foreach ($ _ FILES ['files']] as $ key => $ tmp_name) { \t \t $ file_name = $ _FILES ['files '] [' имя '] [$ ключ]; \t \t $ naamzonderwww = зиЬзЬг ($ имя_файла, 21, -4); \t \t $ artiest = $ _POST [' artiest ']; \t \t $ file_tmp = $ _FILES ['files'] ['tmp_name'] [$ key]; – pipi

ответ

0

Вы зацикливание это совершенно неправильно, и только когда-либо с использованием первой итерации. То, что вы хотите сделать, это цикл вашего $_FILES массив, а затем пройти через каждый из этих элементов массива:

foreach($_FILES['files'] as $key => $file){ 
    $file_name = $_FILES['files'][$key]['name']; 
    $naamzonderwww = substr($file_name, 21, -4); 
    $artiest = $_POST['artiest']; 
    $file_size =$_FILES['files'][$key]['size']; 
    $file_tmp =$_FILES['files'][$key]['tmp_name']; 
    $file_type=$_FILES['files'][$key]['type']; 
    //....etc...the rest of your code 
} 

Таким образом, вы извлечение информации о текущих файлах.


В качестве альтернативы, вы могли бы цикл и использовать только $file:

foreach($_FILES['files'] as $file){ 
    $file_name = $file['name']; 
    $naamzonderwww = substr($file_name, 21, -4); 
    $artiest = $_POST['artiest']; 
    $file_size =$file['size']; 
    $file_tmp =$file['tmp_name']; 
    $file_type=$file['type']; 
    //....etc...the rest of your code 
} 

таким образом (выше примере), вы на самом деле, используя текущий элемент в цикле.

+0

это не работает, у меня есть копия, вставьте код, но не работает – pipi

+0

@pipi и что говорят об ошибках ... Помогите мне помочь вы здесь мат – Darren

+0

, когда я загружаю файлы, он не показывает никаких ошибок или успехов – pipi

0

у меня есть это сейчас

if(isset($_FILES['files'])){ 
 
    $errors= array(); 
 
foreach($_FILES['files'] as $file){ 
 
    $file_name = $file['name']; 
 
    $naamzonderwww = substr($file_name, 21, -4); 
 
    $artiest = $_POST['artiest']; 
 
    $file_size =$file['size']; 
 
    $file_tmp =$file['tmp_name']; 
 
    $file_type=$file['type']; 
 

 
     \t 
 
     $DB = mysql_query("INSERT INTO `audio` (titel, url, categorie) values ('".$naamzonderwww."', 'http://helemaalleip.com/audio/files/".$file_name."','".$artiest."')"); 
 
     $desired_dir="user_data"; 
 
     if(empty($errors)==true){ 
 
      if(is_dir($desired_dir)==false){ 
 
       mkdir("$desired_dir", 0700); \t \t // Create directory if it does not exist 
 
      } 
 
      if(is_dir("$desired_dir/".$file_name)==false){ 
 
       move_uploaded_file($file_tmp,"user_data/".$file_name); 
 
      }else{ \t \t \t \t \t \t \t \t \t //rename the file if another one exist 
 
       $new_dir="user_data/".$file_name.time(); 
 
       rename($file_tmp,$new_dir) ; \t \t \t \t 
 
      } 
 
      mysql_query($query); \t \t \t 
 
     }else{ 
 
       print_r($errors); 
 
     } 
 
    } 
 
\t if(empty($error)){ 
 
\t \t echo "Success"; 
 
\t } 
 
}

0

$_FILES структура массива изменяется при загрузке нескольких файлов. Вот пример свалка (Source):

Array 
(
    [name] => Array 
     (
      [0] => foo.txt 
      [1] => bar.txt 
     ) 

    [type] => Array 
     (
      [0] => text/plain 
      [1] => text/plain 
     ) 

    [tmp_name] => Array 
     (
      [0] => /tmp/phpYzdqkD 
      [1] => /tmp/phpeEwEWG 
     ) 

    [error] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [size] => Array 
     (
      [0] => 123 
      [1] => 456 
     ) 
) 

Таким образом, вы должны подойти цикл по-разному. (Source)

foreach($i = 0; $i < count($_FILES['files']['name']); $i++){ 
    $file_name = $_FILES['files']['name'][$i]; 
    //the rest of your code 
} 
Смежные вопросы