2013-06-27 2 views
0

Я пытаюсь загрузить несколько файлов в каталог. код, который я «написал», работает для одного файла, однако, когда я пытаюсь загрузить несколько файлов, он не работает. я попытался определить, где ошибка, и я считаю, что она имеет какое-то отношение к счету. хотя, когда я пытаюсь подсказать, сколько файлов подсчитывается, я всегда получаю «1» независимо от того, сколько файлов я выбрал. Я знаю, что это будет работать только для одного файла, так как переменная, которую я возвращаю, всегда «1», и поэтому будет работать только для одного файла.PHP count() неправильно подсчитывается

собрать файлы, которые я использую HTML форму с помощью метода поста HTML:

<form id="upload" action="upload.php" method="POST" enctype="multipart/form-data"> 

<fieldset> 
<legend>HTML File Upload</legend> 

<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" /> 

<div> 
    <label for="fileselect">Files to upload:</label> 
    <input type="file" id="fileselect" name="fileselect[]" multiple="multiple" /> 
    <div id="filedrag">or drop files here</div> 
</div> 

<div id="submit"> 
    <button type="submit">Upload Files</button> 
</div> 

</fieldset> 

</form> 

Javascript я использую позволяет функции перетаскивания и был получен от: http://www.sitepoint.com/html5-file-drag-and-drop/

виновника PHP:

if(isset($_FILES['fileselect']['tmp_name'])) { 
    // Number of uploaded files 
    $num_files = count($_FILES['fileselect']['tmp_name']); 
    echo $num_files; 
    /** loop through the array of files ***/ 
    for($i=0; $i <= $num_files;$i++) { 
     // check if there is a file in the array 
     if(!is_uploaded_file($_FILES['fileselect']['tmp_name'][$i])) { 
      $messages[] = 'No file uploaded'; 
     } 
     else { 
      $unique = substr(number_format(time() * rand(),0,'',''),0,10); 

      $newImg = "img".$unique; 

      $filename = basename($_FILES['file']['name'][$i]); 
      $extension = pathinfo($filename, PATHINFO_EXTENSION); 
      //$new  = md5($filename).'.'.$extension; 

      $the_file_type = $_FILES['fileselect']['type'][$i]; 
      $the_file_size = $_FILES['fileselect']['size'][$i]/1024; 
      $the_file_name = $_FILES['fileselect']['name'][$i]; 

      $ok=1; 
      //This is our size condition 
      if ($uploaded_size > 350000) { 
       $messages[] = "Your file is too large.<br>"; 
       $ok=0; 
      } 

      //This is our limit file type condition 
      if ($uploaded_type =="text/php") { 
       $messages[] = "No PHP files<br>"; 
       $ok=0; 
      } 

      //Here we check that $ok was not set to 0 by an error 
      if ($ok==0) { 
       $messages[] = "Sorry your file was not uploaded"; 
      } 

      //If everything is ok we try to upload it 
      else { 
       if(move_uploaded_file($_FILES['fileselect']['tmp_name'][$i], "uploads/{$newImg}")) { 
        echo "The file ". basename($_FILES['uploadedfile']['name'][$i]). " has been uploaded"; 
        echo "<br />"; 
        //echo $the_file_type; 
        //echo "<br />"; 
        //echo $unique; 
        //echo "<span>schmeckle!</span>"; 
        //echo "<br />"; 
        //echo $the_file_size; 
        //echo "<br />"; 
        //echo $the_file_name; 

        $insertSQL = "INSERT INTO interviews_media_images SET "; 
         $insertSQL .= "fileType='$the_file_type', "; 
         $insertSQL .= "fileRef='$newImg', "; 
         $insertSQL .= "fileSize='$the_file_size', "; 
         $insertSQL .= "fileName='$the_file_name' "; 

        echo $insertSQL; 

        //mysql_query($insertSQL); 

        //echo mysql_error(); 

       } else { 
        $messages[] = "Sorry, there was a problem uploading your file."; 
       } 
      } 
     } 
    } 
} 
+1

Вы даже 'print_r ($ _ FILES)', чтобы увидеть, что он на самом деле содержит? Я считаю, что это '$ _FILES ['fileselect'] [$ i] ['attribute']' not '$ _FILES ['fileselect'] ['attribute'] [$ i]' – Twisted1919

+0

все выше: "for ($ i = 0; $ i <= $ num_files; $ i ++) {... blah} else {", ссылается на другой пост в стеке, который, по-видимому, работает. ссылка: http://stackoverflow.com/questions/2233816/how-to-handle-multiple-file-upload-using-php все ниже работает. моя проблема в том, что «$ num_files = count ($ _ FILES ['fileselect'] ['tmp_name']); всегда возвращает «1». –

+0

Моя первая догадка заключается в том, что в функции PHP 'count() нет ошибки – chrislondon

ответ

0

Я создал файл с содержимым следующим образом, запустите нин PHP версии 5.5.15 и он считает правильно:

<?php 
if(isset($_FILES['fileselect']['tmp_name'])) 
{ 
    echo "<pre>"; print_r($_FILES); echo "</pre>"; 
    echo "Number of files uploaded: " . count($_FILES['fileselect']['name']); 
} 
?> 

<form id="upload" action="files_upload.php" method="POST" enctype="multipart/form-data"> 

<fieldset> 
<legend>HTML File Upload</legend> 

<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" /> 

<div> 
    <label for="fileselect">Files to upload:</label> 
    <input type="file" id="fileselect" name="fileselect[]" multiple="multiple" /> 
    <div id="filedrag">or drop files here</div> 
</div> 

<div id="submit"> 
    <button type="submit">Upload Files</button> 
</div> 

</fieldset> 

</form> 
+2

вам нужно лучше объяснить свой ответ – RossBille

0

Ваш код работает в моем случае и $ NUM_FILES возвращает истинное значение после подсчета. более

Одна вещи, чтобы сделать это удалить «=» из цикла и писать как этот

for($i=0; $i<$num_files; $i++) 

если вы используете $ я < = $ NUM_FILES это дает вам уведомление.

Предположим, вы выбрали 3 файла, и вы устанавливаете $ i < = $ num_files.

Так цикл начинается с 0 и, как вы выбрали 3 файла, он по-прежнему в 4 раза

Вы можете видеть, что цикл продолжается в течение 4-х раз, но нет файла на

$_FILES['filename']['tmp_name'][3]. 

Я надеюсь, что это поможет ...

Извините за мой английский.