动态表单字段未发送到CGI脚本

时间:2011-07-04 17:11:55

标签: javascript perl forms file-upload cgi

我正在尝试拥有一个文件上传页面,允许任意数量的文件上传。我发现javascript代码在单击一个时在表单中成功创建了一个新的文件输入字段,但是,除了在html中硬编码的字段之外的任何字段都没有被发送到我的perl 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更改为“file_2”就打印出$ file,此时它为null。

我错过了什么?任何帮助深表感谢。

2 个答案:

答案 0 :(得分:2)

您错误地命名了动态文件字段:

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

根据你的CGI,这应该是这个:

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

答案 1 :(得分:1)

尝试使用firebug进行调试。查看实际发送的内容以及HTML表单的实时构建方式。