2 formulare zugleich abschicken?

Promaetheus

Mitglied
Ich habe das Problem dass ich 2 verschiedene Formulare auf 1 Seite habe. Wenn das Formular 2 abgeschickt wird, sollten aber auch die eingegebenen Daten vom Formular 1 "gespeichert" werden.

Hintergrund der Sache: Formular 1 sind Textfelder für einen Newsletter. In Formular 2 können Bilder raufgeladen werden. Wenn nun ein User vergisst bei Formular 1 vorher auf "speichern" zu klicken wenn er mittels Formular 2 ein Bild rauflädt, sollten die Daten nicht verloren sein. Es geht also rein um Usability. Ich kann leider nicht beide Formulare in eines einbinden (Grund: Codestruktur).

Gibt es überhaupt eine Lösung für mein Problem?
 
Naja....am einfachsten ginge es, wenn das Ziel beider Formulare ein anderes Fenster wäre als das aktuelle, dann könntest du per submit() beide abschicken.

Aber ich schätze mal, so einfach ist es nicht :)

Was noch ginge: Clone vor dem Absenden des einen Formulars den Inhalt des anderen und kopiere ihn in das Formular, welches gesendet werden soll.
 
Die erste Lösung ist leider nicht möglich, da sich das Formlar dann "selbst" verarbeitet. Das mit dem Clonen klingt super. Wie meinst du das? Ich müsste nur irgendwie erreichen dass ich danach die Werte der Felder als $_POST Variablen zur Verfügung habe.
 
Das mit $_POST ist kein Problem, hier mal ein Beispiel:
Code:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function submit_all()
{
  t=document.createElement('div');
  t.style.display='none';
  for(i=0;i<document.forms.length;++i)
    {
      
      if(document.forms[i]!=document.getElementById('send'))
        {
          t.appendChild(document.forms[i].getElementsByTagName('div')[0].cloneNode(true));
        }
      else
        {
          t=document.forms[i].appendChild(t.cloneNode(true))
        }
    }
  document.getElementById('send').submit();
  return false;
}
//-->
</script>
</head>
<body>
<pre>
<?php
//Kontrolle der gesendeten Daten 
print_r($_FILES);
print_r($_POST);
?>
</pre>

<form id="send" enctype="multipart/form-data" method="post" onsubmit="return submit_all()">
  <div>
    <input name="foobar" type="file">
  </div>
  <input type="submit">
</form>
<form  method="post" onsubmit="return submit_all()">
  <div>
    <input name="foo">
  </div>
  <input type="submit">
</form>
<form method="post" onsubmit="return submit_all()">
  <div>
    <input name="bar">
  </div>
  <input type="submit">
</form>

</body>
</html>

Wichtig ist dabei:
  1. jedes Formular enthält als 1. Kindelement ein <div>....in dieses müssen alle Formularelemente hinein, die immer gesendet werden sollen
  2. das Formular, welches das File-Upload-Feld enthält, muss die ID "send" haben(je nach Browser werden beim clonen nicht die Eingaben in File-Upload-Feldern mitgeclont, deswegen muss immer das Formular mit dem Upload-Feld gesendet werden....bedeutet auch gleichzeitig, dass es nur 1 Formular mit Upload-Feldern geben kann)
  3. bei der Benennung der Formularfelder musst du berücksichtigen, dass es nicht gleichnamige Felder geben darf, sonst gehen Daten verloren, da nur das jeweils letzte übermittelt wird.
 
Hi Sven!

Danke erstmal für deinen tollen Lösungsansatz. Ich war so frei und habe Ihn so übernommen, da ich, wenn ich ganz ehrlich sein soll, nicht ganz genau verstanden habe was da im Detail abläuft. Ich habe nur gesehen dass die Formularfelder im Document-DIV solange durchlaufen und in Post ausgegeben werdenbis alle durchgemacht wurden und zum Schluss noch das "send"-File dazugefügt wird.

Ein klitzekleines Problem habe ich jedoch und kann es nicht verstehen, jedoch werden alle Text-Inputfelder im Formular-DIV super übernommen, jedoch die Textarea nicht, welche sich auch in demselben DIV befindet nicht. Wie kann das sein?
 
Irgendwas ist ja immer :)

Es scheint wohl damit zusammenzuhängen, das textarea HTML-seitens kein value-Attribut hat, JS-seitig aber schon.
Geclont wird da wohl die HTML-Variante, und so geht der Inhalt wohl flöten.

Ein Workaround könnte dies, im <textarea> notiert, sein:
Code:
onchange="this.innerHTML=this.value"
 
Mist. Die obere Textarea, welche "normal" behandelt wird funktioniert nun, die untere lasse ich mit tinymce konvertieren. Dann funktioniert der Workaround komischerweise nicht. Gibt es eine andere Möglichkeit wie auch diese Textarea mit in die Verarbeitung des "submit_all()" aufgenommen werden kann?

Habs mal Gaudihalber mit value="wert" in der textarea versucht, hat aber wie erwartet natürlich nicht geklappt.
 
Zuletzt bearbeitet:
Zurück