2013-12-15 206 views
1

我瀏覽了很多以前的主題,但是我發現不止一些很好的答案,我無法找到解決我的特定問題的解決方案。並不是說它以任何方式都是唯一的,我只是PHP的新手而不知道該怎麼做。幾個文件上傳控件只上傳一個文件

我爲我做的一個網站製作了一個HTML表格,這是一份工作申請表格。客戶要求上傳三張照片。我爲表單和PHP代碼拼湊了一些代碼,但只能使用我選擇的代碼上傳1個文件。

如何獲取多個文件上傳?

HTML表單:

<div class="form-group"> 
    <label for="exampleInputFile">*Pictures</label> 
     <input type="file" name ="filename" id="InputFile"/> 
     <input type="file" name ="filename" id="InputFile"/> 
     <input type="file" name ="filename" id="InputFile"/> 

</div> 

和PHP:

<?php 


    $fileatt  = $_FILES['filename']['tmp_name']; 
    $fileatt_type = $_FILES['filename']['type']; 
    $fileatt_name = $_FILES['filename']['name']; 


    $headers = 'From: ' . $_POST['job_email']; 

    if (is_uploaded_file($fileatt)) { 
    $file = fopen($fileatt,'rb'); 
    $data = fread($file,filesize($fileatt)); 
    fclose($file); 

    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    $headers .= "\nMIME-Version: 1.0\n" . 
    "Content-Type: multipart/mixed;\n" . 
    " boundary=\"{$mime_boundary}\""; 


    $message = "This is a multi-part message in MIME format.\n\n" . 
    "--{$mime_boundary}\n" . 
    "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
    "Content-Transfer-Encoding: 7bit\n\n" . 
    $message . "\n\n"; 


    $data = chunk_split(base64_encode($data)); 


    $message .= "--{$mime_boundary}\n" . 
    "Content-Type: {$fileatt_type};\n" . 
    " name=\"{$fileatt_name}\"\n" . 

    "Content-Transfer-Encoding: base64\n\n" . 
    $data . "\n\n" . 
    "--{$mime_boundary}--\n"; 
    } 

    $ok = @mail("[email protected]", $subject , $message, $headers); 
    if ($ok) { 
    echo "<p>Well done</p>"; 
    } else { 
    echo "<p>Please try again</p>"; 
    } 
    ?> 
+0

嘿嘿:「scrabmled」:)'。 – halfer

+0

問題在於你的文件'input'控件有'name'和'id'屬性的衝突。如果您想上傳多個文件,您需要能夠唯一地引用表單數據(通過名稱)。而且,在HTML文檔中,碰撞ID屬性導致HTML無效。所以,先解決這些問題。我會說「文件名」不是一個好名字 - 嘗試「image1」,「image2」,「image3」? – halfer

回答

0

,如果你使用的是HTML5那麼這可以幫助

<input type="file" name ="filename" id="InputFile" multiple /> 

它將在IE 10,Mozilla瀏覽器,Chrome瀏覽器(即9和以下不支持多文件上傳)

1

首先,在你的表單輸入名稱應該是這樣的,如果你要上傳多個文件:

<input type="file" name ="filename[]" id="InputFile" /> 
<input type="file" name ="filename[]" id="InputFile" /> 
<input type="file" name ="filename[]" id="InputFile" /> 

或者作爲@Undefined_variable說這讓你選擇每一次多張圖片一個輸入:

<input type="file" name ="filename[]" id="InputFile" multiple /> 

當我建議你rearray $ _FILES []:

function rearray(&$file_post) { 

    $file_ary = array(); 
    $file_count = count($file_post['name']); 
    $file_keys = array_keys($file_post); 

    for ($i=0; $i<$file_count; $i++) { 
     foreach ($file_keys as $key) { 
      $file_ary[$i][$key] = $file_post[$key][$i]; 
     } 
    } 

    return $file_ary; 
} 
$files = rearray($_FILES['filename']); 
  
foreach($files as $file){ 
$tmpname = $file["tmp_name"];/// use $file like $_FILES[..]["temp_name"] etc. 
} 

你應該多看一些關於上傳用PHP多個文件,並嘗試找出溶膠ution。 瞭解更多:http://www.php.net/manual/en/features.file-upload.multiple.php

相關問題