2013-07-24 2 views
0

여러 파일을 업로드 할 때 문제가 있습니다. 범주 드롭 다운 및 파일 세부 정보와 함께 데이터베이스에 삽입해야하는 설명 상자가 있습니다. 5 개의 업로드 상자가 화면에 표시됩니다.여러 파일 업로드에 대한 의견 포함

하나의 파일을 업로드하는 경우, 주석은 공백으로 표시되며, 범주는 항상 첫 번째 값으로 설정됩니다. 최종 업로드 주석 및 카테고리 상자가 모든 덮어 쓰기를 덮어 쓰는 것처럼 보이기도합니다. 카테고리와 코멘트가 다른 다섯 개의 파일을 업로드하여 테스트 한 결과, 모두 마지막 코멘트와 카테고리가 표시되었습니다.

스크립트의 문제를 볼 수는 있지만 업로드의 각 특정 인스턴스에 범주 또는 설명을 지정하는 방법을 알 수 없습니다.

도움을 주시면 감사하겠습니다.

 <?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; 
    } 
    ?> 

편집 :이 작동하는 경우

<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

참조 ADDED HTML. 당신이에 대해 하나 개의 값을 얻기 때문에

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

다음 foreach 루프 중

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

:

이 부분을 가지고 : 하나의 코멘트 및 카테고리가있는 경우이 경우입니다 주석 및 카테고리는 이전 페이지에서 foreach 루프에서 필요하지 않습니다. 또한 업로드 된 각 파일에 대한 설명 및 카테고리를 원할 경우이 페이지에 값을 전달하는 이전 페이지를 변경해야합니다. 원하는 경우 더 많은 코드를 추가해야합니다.

변경이 : 이것에

:

<select name="category[]"> 

이이에

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

영업 이익은 더 많은 코드를 추가 한 후

는 업데이트됩니다 :

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

다음 원래 foreach 루프에서이 변경 :

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

이것은 $ i가 값 인덱스 변수는 가정을 기반으로이에

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

을 는 파일 배열을 반복하면서 0에서 4로 이동합니다. 그 경우가 아니라면 다음과 같이 다른 수의 변수 count $ 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

관련 문제