2013-07-24 2 views
0

У меня возникли проблемы при загрузке нескольких файлов. У меня есть раскрывающаяся категория и поле комментариев, которое мне нужно вставить в базу данных вместе с файловой информацией. У меня есть пять загрузочных ящиков, отображаемых на экране.Включая комментарии для загрузки нескольких файлов

Если я загружаю один файл, комментарий пуст (даже если это не будет), а категория всегда устанавливается на первое значение. Немного проверяя, похоже, что финальные комментарии к загрузке и боксы категории перезаписывают все пропуски. Протестировано, загрузив пять файлов с различными категориями и комментариями, все показали последний комментарий и категорию.

Я вижу проблему в скрипте, но я не могу понять, как назначить категорию или комментарий для каждого конкретного экземпляра загрузки.

Любая помощь приветствуется.

 <?php 



    $upload_dir = "training/trainingDocuments/"; 
    $maxUploads = 5; 

    $msg = "Please select file(s) for uploading"; 
    $errors = array(); 

    if ($files = convert_files($_FILES["myTrainingFile"])) { 
     foreach($files as $i => $file) { 
      $fileName = $file["name"]; 
      $tempName = $file["tmp_name"]; 
      $fileSize = $file["size"]; 
      $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); 
      $blacklist = array('exe','php','jsp','js','bat','asp','aspx','com','dmg'); 

//    $newPath = $upload_dir .$fileName; 
      $dateUploaded = time() . microtime(); 

      if (in_array($fileExt, $blacklist)) { 
       $errors[$i] = "File type not allowed"; 
      } 

      if (!is_uploaded_file($tempName)) { 
       //$errors[$i] = "Uploading ".$fileName." failed."; 
      }else{ 
       echo '<h4>Uploading of :'.$fileName.' was a success.</h4>'; 
      } 

      //if(file_exists($newPath)){ 

       $name = pathinfo($fileName, PATHINFO_FILENAME); 
       $fileName = $name . '__' .uniqid(). '.' .$fileExt; 
       $newPath = $upload_dir .$fileName; 
//    }else{ 
// 
//    } 

      if (isset($errors[$i])) { 
       continue; 
      } 


      if (!move_uploaded_file($tempName, $newPath)) { 
       //$errors[$i] = "Uploading ".$fileName." failed."; 
      }else{ 
       //echo 'File moved'; 
      } 

      $comments = htmlentities(trim($_POST['comments'])); 
      $category = htmlentities(trim($_POST['category'])); 

      if($file['name'] != ""){ 
       $training->uploadDocument($fileName, $category, $comments); 
      } 
     } 
    } 
    ?> 

    <?php 
    function convert_files($files) { 
     if (is_array($files) && !empty($files["name"])) { 
      if (is_array($files["name"])) { 
       $merged = array(); 
       foreach($files["name"] as $i => $name) { 
        $merged[] = array(
         "name" => $name, 
         "type" => $files["type"][$i], 
         "size" => $files["size"][$i], 
         "error" => $files["error"][$i], 
         "tmp_name" => $files["tmp_name"][$i] 
        ); 
       } 
       return $merged; 
      } 
      return array($files); 
     } 
     return false; 
    } 
    ?> 

EDIT: ДОБАВЛЕНО HTML

<div id="uploadFormContainer"> 
    <form id="uploadForm" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data"> 

     <?php 
     $num = 0; 
     while($num < $maxUploads) 
     {?> 
      <div class="uploadFormE"> 
       <label>File Category: </label> 
       <select name="category"> 
        <option value="doc">Documents (pages, word, PDF etc)</option> 
        <option value="sheet">Spreadsheet</option> 
        <option value="vid">Video</option> 
        <option value="pres">Presentations</option> 
        <option value="img">Image</option> 
        <option value="quiz">Quiz</option> 
        <option value="other">Other</option> 
       </select> 
      </div> 
      <div class="uploadFormE"> 
       <label>File Location: </label> 
       <input type="file" name="myTrainingFile[]" /> 
      </div> 
      <div class="uploadFormE"> 
       <label>Comments: </label> 
       <textarea class="GAH" name="comments"> </textarea> 
      </div> 
      <hr/> 
      <br /> 
     <?php $num++; 
     } 
     ?> 

     <input type="submit" value="Upload File(s)"> 
    </form> 
    </div> 
+0

Вам нужны комментарии и категории для каждого загруженного файла? – Maximus2012

+0

@ Maximus2012 - Идеально да.Ну, категория является абсолютной необходимостью, комментарии не являются огромным испытанием, но хотелось бы – null

ответ

1

Смотрите, если это работает. Это для случая, когда есть только один комментарий и категория:

Возьмите эту часть:

$comments = htmlentities(trim($_POST['comments'])); 
$category = htmlentities(trim($_POST['category'])); 

из цикла Еогеаспа:

if ($files = convert_files($_FILES["myTrainingFile"])) { 
    foreach($files as $i => $file) { 

Поскольку вы получаете только одно значение комментарии и категории с предыдущей страницы, вам это не нужно в цикле foreach. Кроме того, если вы хотите, чтобы комментарии и категории для каждого загружаемого файла, вам необходимо внести изменения на предыдущую страницу, которая передает значения на эту страницу. Если вы хотите этого, вам нужно добавить еще код.

Эти обновления после OP добавлен дополнительный код:

Изменить это:

к этому:

<select name="category[]"> 

и это:

<textarea class="GAH" name="comments"> </textarea> 

к этому :

<textarea class="GAH" name="comments[]"> </textarea> 

, а затем в исходном цикле Еогеаспа, это изменить:

$comments = htmlentities(trim($_POST['comments'])); 
$category = htmlentities(trim($_POST['category'])); 

к этому:

$comments = htmlentities(trim($_POST['comments'][$i])); 
$category = htmlentities(trim($_POST['category'][$i])); 

Это основано на предположении, что $ я являюсь индексным переменным, значение которой идет от 0 до 4, когда вы перебираете массив файлов. Если это не так, то вам нужно добавить еще одну переменную индекса, например $ count:

$count = 0; 
foreach($files as $i => $file) { 
    // your other code goes here 
    $comments = htmlentities(trim($_POST['comments'][$count])); 
    $category = htmlentities(trim($_POST['category'][$count])); 

    $count ++; 
} 
+0

Это одностраничный скрипт Maximus, не уверенный, что это имеет огромное значение, все HTML и PHP-коды находятся на одной странице. Какие изменения мне нужно сделать для комментариев и кота для каждого загруженного файла? Могу ли я каким-то образом добавить их в массив имен? – null

+0

где это происходит: $ _POST ['comments']? если его сценарий с одной страницей, вы можете опубликовать весь код для этой страницы? – Maximus2012

+0

Я обновлю вопрос с помощью дополнительного HTML. Кроме того, они мне нужны в цикле. Вызов функции training-> uploadDocument принимает их как параметры и должен запускаться в forEach. – null

Смежные вопросы