2013-12-15 45 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

相关问题