elvirus: dynamisch erstelltes Formular sendet keinen string

Beitrag lesen

Hallo liebe Experten,

hoffe, jemand von Euch kennt sich aus und kann mir bei meinem Problem helfen. Nach tagelanger Suche und Bastelarbeit komme ich jetzt nicht mehr weiter.

Problembeschreibung:

Gegeben:

html-Seite mit einer Tabelle, die hat eine id "tabelle" und fünf Zellen, darin im Wesentlichen ein Formular, ein Dateibrowserfeld und ein Submitbutton.

Code:
<table width="620" bgcolor="#414F72" border="0" cellspacing="4" cellpadding="0" align="center">
<tbody id="tabelle">
(...)
 <tr align="center" valign="middle">
  <form name="bild1gross" enctype="multipart/form-data" action="objekt_neu_bilder_upload.php?id=<?php echo($id); ?>&name=objekt<?php echo($id); ?>gr01&zahl=1&param=gross" method="post" target="ftp" onSubmit="window.open('','ftp','width=250,height=125');">
  <input type="hidden" name="MAX_FILE_SIZE" value="3000000">
  <td width="120" height="20" class="cmsMedium"><p>Aufl&ouml;sung:<br>320 x 240</p></td>
  <td width="40" height="20" class="cmsFormBildObjekte"><img src=<?php if(file_exists("../images_objekte/objekt".$id."gr01.jpg")) {echo('"../images_objekte/objekt'.$id.'gr01.jpg?'.$datum.$zeit.'"');} else {echo('"../images_objekte/keinbild.jpg"');} ?> name="Bild1gross" alt="F&uuml;r einwandfreie Darstellung bitte Aufl&ouml;sung beachten!" width="40" height="30"> </img></td>
  <td height="20" align="left"><input name="datei" type="file" class="cmsFormBildObjekte" id="datei" size="42" maxlength="255"></td>
  <td height="20"><input name="bildgrossUp" type="submit" class="cmsFormButton" id="bildgrossUp" value="hochladen"></td>
  <td height="20" align="left"></td>
  </form>
 </tr>
</tbody>
</table>

Dieses Formular funktioniert auch. Wenn man den button drückt, wird der Inhalt des file-Input-Feldes an das onSubmit-Fenster geschickt.

Zur Erläuterung: Es handelt sich hier um eine Bilder-Uploadseite für Objekte einer Datenbank. Da verschiedene Objekte nun auch verschieden viele Bilder haben können, habe ich versucht, per javaScript der Tabelle mit document.getElementById("tabelle") weitere Zeilen einzufügen. Dabei wollte ich die html-dom-Struktur von oben möglichst exakt nachbilden.

Code:
<script type="text/javascript">

function setRows(id,bilder) {
 var picString = '';
 var objektId = id;
 var anzahlbilder = bilder;
 var table = document.getElementById("tabelle");
 for (i=2;i<=anzahlbilder;i++) {
  if (i<10) picString = "0"+i;
  else picString = ""+i;
  var row = document.createElement('tr');
  row.align = 'center';
  row.valign = 'middle';

// form
  var formular = document.createElement('form');
  formular.name = 'bild'+i+'gross';
  formular.enctype = 'multipart/form-data';
  if (i<10) formular.action = 'objekt_neu_bilder_upload.php?id=<?php echo($id); ?>&name=objekt<?php echo($id); ?>gr0'+i+'&zahl='+i+'&param=gross';
  else formular.action = 'objekt_neu_bilder_upload.php?id=<?php echo($id); ?>&name=objekt<?php echo($id); ?>gr'+i+'&zahl='+i+'&param=gross';
  formular.method = 'post';
  formular.target = 'ftp';
  formular.onsubmit = function() {
   window.open("","ftp","width=250,height=125");
  }
  var hidden = document.createElement('input');
  hidden.type = 'hidden';
  hidden.name = 'MAX_FILE_SIZE';
  hidden.value = '3000000';

table.appendChild(row);
  row.appendChild(formular);
  formular.appendChild(hidden);

// 1st td
  var style = document.createAttribute("class");
  style.nodeValue = "cmsMedium";
  var cell_1 = document.createElement('td');
  cell_1.width = '120';
  cell_1.height = '20';

cell_1.setAttributeNode(style);
  formular.appendChild(cell_1);

// 2nd td
  var style2 = document.createAttribute("class");
  style2.nodeValue = "cmsFormBildObjekte";
  var cell_2 = document.createElement('td');
  cell_2.width = '40';
  cell_2.height = '20';
  cell_2.setAttributeNode(style2);
  var pic = document.createElement('img');
  pic.src = '../images_objekte/objekt'+objektId+'gr'+picString+'.jpg';
  pic.name = 'Bild'+i+'gross';
  pic.alt = 'Für einwandfreie Darstellung bitte Auflösung beachten!';
  pic.width = '40';
  pic.height = '30';

cell_2.appendChild(pic);
  formular.appendChild(cell_2);

// 3rd td
//<td height="20" align="left"><input name="datei" type="file" class="cmsFormBildObjekte" id="datei" size="42" maxlength="255"></td>
  var style3 = document.createAttribute("class");
  style3.nodeValue = "cmsFormBildObjekte";
  var cell_3 = document.createElement('td');
  cell_3.height = '20';
  cell_3.align = 'left';
  var input = document.createElement('input');
  input.setAttributeNode(style3);
  input.name = 'datei';
  input.type = 'file';
  input.id = 'datei';
  input.size = '42';
  input.maxlength = '255';

cell_3.appendChild(input);
  formular.appendChild(cell_3);

// 4th td
//<td height="20"><input name="bildgrossUp" type="submit" class="cmsFormButton" id="bildgrossUp" value="hochladen"></td>
  var style4 = document.createAttribute("class");
  style4.nodeValue = "cmsFormButton";
  var cell_4 = document.createElement('td');
  cell_4.height = '20';
  var input2 = document.createElement('input');
  input2.setAttributeNode(style4);
  input2.name = 'bildgrossUp';
  input2.type = 'submit';
  input2.id = 'bildgrossUp';
  input2.value = 'hochladen';

cell_4.appendChild(input2);
  formular.appendChild(cell_4);

// 5th td
//<td height="20" align="left"></td>
  var cell_5 = document.createElement('td');
  cell_5.height = '20';
  cell_5.align = 'left';

formular.appendChild(cell_5);
 }
}
</script>

Folgendes Ergebnis:
Bin mir grad bei Firefox nicht sicher, aber bisher verhielten sich IE und Firefox gleich. Die zusätzlichen Zeilen werden per Schleife ordnungsgemäß generiert, die richtigen Bilder werden geladen, die Tabelle sieht hübsch aus, laut dom-inspector sind alle Formulare vorhanden. Die buttons funktionieren, mit onSubit werden kleine Fenster geöffnet, die die in action angegebene Adresse aufsuchen.
Aber die dynamisch erzeugten Formulare geben keine POST-Variablen weiter.

Ich hoffe, jemand durchschaut das ganze hier überhaupt...
Den link kann ich leider nicht veröffentlichen, aber wenn einer wirklich helfen will, kann ich ihn per mail verschicken.

Gruß und Dank,
elvirus