2011-07-04 15 views
1

我正在嘗試有一個文件上傳頁面,允許任意數量的文件上傳。我發現JavaScript代碼成功地在窗體中創建了一個新的文件輸入字段,但是,除了HTML中硬編碼的字段之外的任何字段都不會被髮送到我的perl CGI腳本。動態表單字段沒有發送到CGI腳本

的Javascript

function fileFields() { 
     var x = document.getElementById('fileUpload'); 
     x.onclick = function() { 
       var i = parseFloat(this.lastChild.id)+1; 
       input = document.createElement("input"); 
       input.setAttribute("type", "file"); 
       input.setAttribute("name", 'fileName_' + i); 
       input.setAttribute("id", i); 
       this.appendChild(input); 
     } 
} 

function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
     if (oldonload) { 
     oldonload(); 
     } 
     func(); 
    } 
    } 
} 

addLoadEvent(function() { 
    fileFields(); 
}); 

HTML表單

<form action="https://www.indiana.edu/~webdeviu/phil/submit.cgi" method="post" enctype="multipart/form-data"> 
<select name="property"> 
    <TMPL_LOOP NAME="PROPS"> 
      <option value="<TMPL_VAR NAME="user">"><TMPL_VAR NAME="user"></option> 
    </TMPL_LOOP> 
</select> 
<br /> 
<a href="#" id="fileUpload"><input type="file" name="file_1" id="1" /></a> 
<br /> 
<input type="submit" name="submit" value="Upload" /> 
</form> 

的Perl CGI,部分看起來多個文件

my @files; 

my $i = 1; 
my $file = $query->param("file_" . $i); 
while ($file) { 
    push(@files, $file); 
    $i = $i + 1; 
    $file = $query->param("file_" . $i); 
} 
print $query->header(); 
print scalar(@files); # prints 1 regardless of how many files I upload 
exit; 

我也把漏出來while循環在一個點打印出$文件,一旦它變成「file_2」,並且在那個點上它是空的。

我錯過了什麼?任何幫助深表感謝。

+2

你不必叫file_2輸入元素,它被稱爲fileName_2 – James

回答

2

您已經命名的動態文件中的字段錯誤:

input.setAttribute("name", 'fileName_' + i);

這應該是這根據你的CGI:

input.setAttribute("name", 'file_' + i);

+0

非常感謝。 –

1

嘗試用螢火蟲進行調試。查看實際發送的內容以及HTML表單如何實時構建。

+0

我會看着螢火蟲,聽起來很有幫助。謝謝 –

+0

可能是Web開發最有用的工具。 – Variant