2013-05-15 42 views
3

我有一個表單,允許用戶通過克隆文件輸入添加多個文件。但是,當我提交表單並使用'print_r($ _ FILES)'時,它不會顯示我添加的所有文件,只有第一個。

HTML:

<form action="admin/admin_area/save_personnel" method="post" enctype="multipart/form-data" id="add_personnel"> 
<div class="certificates_list"> 
    <input type="file" name="user_certificates[]" /> 
    <input type="text" name="certificate_name[]" class="right"/> 
    <input type="text" name="expiry_date[]" class="expiry_date" /> 
</div> 
<div id="certificates_new"></div> 
<p><button type="button" id="add_certificate">Add another certificate</button></p> 
</form> 

的jQuery:

$(function() { 
$('#add_certificate').click(function(event){ 
    event.preventDefault(); 
    var clone = $('.certificates_list:first').clone(true).appendTo('#certificates_new'); 
    clone.find("input").val(""); 
    clone.find(".expiry_date").datepicker('destroy').removeClass('hasDatepicker').removeAttr('id').datepicker({ 
     dateFormat: 'dd-mm-yy', 
     yearRange: '1900', 
     changeMonth: true, 
     changeYear: true }).attr('name', 'expiry_date[]'); 
    $(":input").each(function (i) { $(this).attr('tabindex', i + 1); }); 
}); 

});

如果我上傳3個文件和print_r的($ _ FILES)我得到以下只顯示一個文件

Array ([name] => Array ([0] => license.txt) [type] => Array ([0] => text/plain) [tmp_name] => Array ([0] => C:\wamp\tmp\php42B1.tmp) [error] => Array ([0] => 0) [size] => Array ([0] => 2496)) 

爲什麼只有拿起其中的一個文件,而不是所有的人?過去我做過類似的事情,直到現在我還沒有遇到任何問題。任何幫助將不勝感激! $ _FILES ['user_certificates]的

的var_dump給我這個(後我上傳3個文件)

array (size=5) 
    'name' => 
    array (size=1) 
     0 => string 'license.txt' (length=11) 
    'type' => 
    array (size=1) 
     0 => string 'text/plain' (length=10) 
    'tmp_name' => 
    array (size=1) 
     0 => string 'C:\wamp\tmp\phpE11.tmp' (length=22) 
    'error' => 
    array (size=1) 
     0 => int 0 
    'size' => 
    array (size=1) 
     0 => int 2496 
+0

我使用隱藏元件的形式的外和克隆該。每個給自己我猜:)。你可以'var_dump($ _ FILES ['user_certificates']);'請嗎? –

+0

我已將它添加到我的問題的底部 – Pooshonk

+0

您是否嘗試過手動添加沒有Javascript的三個文件元素。表單是手動提交還是執行任何jQuery/JS? –

回答

1

您好我已經創建並測試了這一點。按預期爲我工作! :)

文獻:16562761.php

<?php 
if (!empty($_POST)) { 
    var_dump($_FILES);exit; 
} 
?> 
<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
    </head> 
    <body> 
    <form action="" method="post" enctype="multipart/form-data" id="add_personnel"> 
     <div id="certs_container"></div> 
     <p><button type="button" id="add_certificate">Add another certificate</button></p> 
     <p><button type="submit" id="submit">Submit</button></p> 
    </form> 
    <div style="display: none;" id="cloner"> 
     <div class="certificates_list"> 
     <input type="file" name="user_certificates[]" /> 
     <input type="text" name="certificate_name[]" class="right"/> 
     <input type="text" name="expiry_date[]" class="expiry_date" /> 
     </div> 
    </div> 

    <script type="text/javascript"> 
    function add_clone() { 
     var clone = $('#cloner').html(); 
     $('#certs_container').append(clone); 
    } 

    $(function() { 
     add_clone(); 
     $('#add_certificate').click(function(e){ 
     add_clone(); 
     e.preventDefault(); 
     }); 
    }); 

    </script> 
    </body> 
</html> 
+0

Now var_dump($ _ FILES ['user_certificates'])不顯示任何東西,我真的困惑!!!它甚至不顯示現在的第一個輸入.. – Pooshonk

+0

我編輯它作爲一個完整的測試給你。 –

+0

經過一點研究,我不認爲克隆文件輸入可以正常工作,因爲這是安全風險。你的例子雖然看起來正確,但它仍然沒有顯示任何東西。我想我可能不得不考慮替代方案,而不是浪費時間。感謝您的幫助:) – Pooshonk

相關問題