Поля динамической формы не отправляются в CGI-скрипт - PullRequest
1 голос
/ 04 июля 2011

Я пытаюсь создать страницу загрузки файлов, которая позволяет произвольно загружать файлы.Я нашел код 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;

В одной точке я также поместил escape-цикл для вывода на печать$ file, если он заменен на «file_2», и в этот момент он пуст.

Чего мне не хватает?Буду признателен за любую оказанную помощь.

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Вы назвали поля динамического файла неправильно:

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

Это должно быть в соответствии с вашим CGI:

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

1 голос
/ 04 июля 2011

Попробуйте отладку с помощью firebug. Посмотрите, что на самом деле отправлено и как HTML-форма создается в режиме реального времени.

...