• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mehrere Webformulare über ein Formular abfragen

Dafür gibt es nicht "den Befehl". Du musst, wenn du diesen Weg wählst, die iframes samt Inhalt komplett dynamisch mit JS erstellen.

EDIT: und das passiert in dem Fall auf dem Client und nicht mit PHP
 
@mikdoe: für mich sind iFrames und Frames zwei verschiedene Sachen - und weil ich weiß, dass viele das anders sehen, hab' ich das "wenn" eingebaut.
@jspit: Warum soll da die SOP gelten? Die versteckten Formulare sind auf der Originalseite - sie werden nur an die fremden Server geschickt (und dann in dem iFrame angezeigt).

@Semseo: meine Lösung würde rein mit JS arbeiten - ich hab' nicht so wirklich eine Ahnung, was du da mit PHP versuchst hast. (Hab's mir aber auch nicht so genau angesehen.)
 
Zuletzt bearbeitet:
@jspit: Warum soll da die SOP gelten? Die versteckten Formulare sind auf der Originalseite - sie werden nur an die fremden Server geschickt (und dann in dem iFrame angezeigt).
Stimmt, so könnte es gehen, wenn die Formulare nachgemacht werden. Hat aber nur jeweils ein Schuß..
Wäre mal interessant ob das so auch mit Ajax geht.
 
Nein, AJAX unterlieg auch der SOP.

Die iframes muss man aber auch nicht anzeigen. Dazu kann auch ein unsichtbarer iframe genutzt werden. Das sind so Gründe, warum ich einen Skriptblocker verwende, es sind im Hintergrund soviele Dinge möglich, da möchte ich zumindest halbwegs die Kontrolle darüber haben, auf welchen Seiten so was theoretisch gemacht wird.
 
@Semseo: meine Lösung würde rein mit JS arbeiten - ich hab' nicht so wirklich eine Ahnung, was du da mit PHP versuchst hast. (Hab's mir aber auch nicht so genau angesehen.)

Die Javascript-Lösung interessiert mich ja. :)

Reicht es, wenn ich das iFrame per Javascript anspreche (und wie wird es angesprochen?) oder muss auch mein Formular komplett aus Javascript bestehen?
 
@Semseo: meine Lösung würde rein mit JS arbeiten - ich hab' nicht so wirklich eine Ahnung, was du da mit PHP versuchst hast. (Hab's mir aber auch nicht so genau angesehen.)

Deine Lösung interessiert mich ja. :)

Reicht es, wenn ich das iFrame per Javascript anspreche (und wie wird es angesprochen?) oder muss auch mein Formular komplett aus Javascript bestehen?

EDIT:

Dafür gibt es nicht "den Befehl". Du musst, wenn du diesen Weg wählst, die iframes samt Inhalt komplett dynamisch mit JS erstellen.

EDIT: und das passiert in dem Fall auf dem Client und nicht mit PHP

Ach so, dann hat sich meine obige Frage erledigt. Also muss das Formular komplett aus Javascript bestehen. Nur, wie spreche ich dann das iFrame an, so dass die Felder gefüllt und der Button getätigt wird?
 
Code:
function iframe(){
	var f = window.document.createElement('iframe');
	f.style.display = 'none';
	window.document.body.appendChild(f);
	var doc = f.contentWindow || f.contentDocument;
	if (doc.document) doc = doc.document;
	return doc;
}
Nun kannst du über den Rückgabewert von iframe() auf das Dokument zugreifen und mit deinem Formular befüllen.

EDIT: Ach, das iframe muss doch vorher in eingebunden werden, also eine kleine Änderung:
 
Zuletzt bearbeitet:
Danke erstmal. Also irgendwas mach ich falsch. Mein Ziel war es, das Formular auszufüllen damit die Daten unten in das iFrame übertragen werden und der Button automatisch getätigt wird.

HTML:
<html>
<head>
<ttile></title>
</head>
<script language="JavaScript">
<!--
function iframe(){
	var f = window.document.createElement('iframe');
	f.style.display = 'none';
	window.document.body.appendChild(f);
	var doc = f.contentWindow || f.contentDocument;
	if (doc.document) doc = doc.document;
	return doc;
}
with(document.forms["formular"])
{
   action = "http://www.arcor.de/asb/vertriebasb/lookup_plus.jsp"
   submit()
   action = "https://www.qsc.de/order/de?"
   submit()
}
function Ziel () {
  document.iframe.target = "iframe";
  return true;
}
//-->
</script>
<body>
<form name="formular">
<table width="100%" border="0" cellspacing="0" class="table">
  <tr>
    <td width="7%">PLZ</td>
    <td width="93%">
      <input name="zipCode" type="text" class="inputField" value="">
    </td>
  </tr>
  <tr>
    <td>Vorwahl</td>
    <td><input name="phoneprefix" type="text" class="inputField" value=""></td>
  </tr>
  <tr>
    <td>Strasse</td>
    <td><input name="street" type="text" class="inputField" value=""></td>
  </tr>
  <tr>
    <td>Hausnummer</td>
    <td><input name="streetnr" type="text" class="inputField" value=""></td>
  </tr>
  <tr>
    <td> </td>
    <td><input name="Submit" type="submit" class="button" value="Abschicken" onClick="this.form.Abschicken.value = document.lastModified"></td>
  </tr>
</table>
</form>
<p><iframe><a href="http://www.arcor.de/asb/vertriebasb/lookup_plus.jsp" target="iframe"</p></iframe>
<p><iframe><a href="https://www.qsc.de/order/de?" target="iframe"</p></iframe>
</body>
</html>
 
Zuletzt bearbeitet:
Äh... @ein schlauer: warum muss das alles mit JS gemacht werden? Die drei Formulare und die beiden iFrames können schon direkt im HTML stehen.
@Semseo: 1. Das with-Statement vergisst du am besten sofort wieder. Erzeugt mehr Probleme/Verwirrung als er nutzt.
2. Mach' dich mal mit der Fehlerkonsole bekannt.
3. Dein HTML ist falsch - bitte validieren. Und mach' dich darüber schlau, wie target und co. funktionieren.
 
Verstehe es nicht, wie man das in ein iFrame weiterleitet und dann eben den Button des fremden Formulars auslöst. Und das dann eben auch mit einem zusätzlichen versteckten Formular.

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Webabfrage</title>
</head>
<script language="text/javascript">
<!--
function iframe(){
	var f = window.document.createElement('iframe');
	f.style.display = 'none';
	window.document.body.appendChild(f);
	var doc = f.contentWindow || f.contentDocument;
	if (doc.document) doc = doc.document;
	return doc;
}
{
document.forms["formular"].Eigenschaft
document.forms["formular"].Methode

Ziel = document.forms["Vodafone"].action;
document.forms["Vodafone"].reset();
}
//-->
</script>
<style type="text/css">
/* ... Hier werden die Formate definiert ... */
</style>
<body>
<form action="http://www.arcor.de/asb/vertriebasb/lookup_plus.jsp" method="post" name="formular" target="_parent" />
<table width="100%" border="0" cellspacing="0" class="table">
  <tr>
    <td width="7%">PLZ</td>
    <td width="93%">
      <input name="zipCode" type="text" class="inputField" value="" />
    </td>
  </tr>
  <tr>
    <td>Vorwahl</td>
    <td><input name="phoneprefix" type="text" class="inputField" value="" /></td>
  </tr>
  <tr>
    <td>Strasse</td>
    <td><input name="street" type="text" class="inputField" value="" /></td>
  </tr>
  <tr>
    <td>Hausnummer</td>
    <td><input name="streetnr" type="text" class="inputField" value="" /></td>
  </tr>
  <tr>
    <td> </td>
    <td><input name="Submit" type="submit" class="button" value="Abschicken" onClick="this.form.Abschicken.value = document.lastModified" /></td>
  </tr>
</table
</form>
<p><iframe><a href="http://www.arcor.de/asb/vertriebasb/lookup_plus.jsp" target="_unten" name="Vodafone"></iframe></p>
</body>
</html>
 
Schau dir mal an, wie ein iframe gefüllt wird (und woher hast du denn das language Attribut? Das wurde vor 15 Jahren für veraltet erklärt). Du musst natürlich die iframe selbst befüllen und nicht mit einem externen Inhalt.
 
Der Fehler war mir klar. Du meinst so?

HTML:
<p><iframe src="http://www.arcor.de/asb/vertriebasb/lookup_plus.jsp" width="50%" height="400" target="_parent" name="formular"></iframe>
<iframe src="https://www.qsc.de/order/de?" width="50%" height="400" target="_parent" name="formular"></iframe></p>

Jetzt erscheint aber nur die Seite im iframe. Aber wie befülle ich jetzt die Seite in dem iframe?
 
Nein, so geht das nicht. Du musst den Inhalt mit einer lokalen Datei füllen, damit du mit JS darauf zugreifen kannst. D.h. du musst eine HTML Datei mit dem Formular selber bauen.
 
Ich hab' irgendwie das Gefühl, dass keiner meinen Ansatz versteht...

Man braucht im iFrame am Anfang überhaupt keine Datei laden. Einfach nur zwei iFrames mit einem Namen bereitstellen. Was im src steht ist am Anfang völlig sch***egal.

Warum ihr unbedingt die Funktion iframe eingeführt habt, verstehe ich nicht. Es müssen auch überhaupt keine HTML-Elemente per JS erzeugt werden. Das kann und soll schon alles am Anfang in der HTML-Datei stehen.

Man braucht mindestens zwei Formulare (aus Symmetriegründen würde ich drei machen) - nur eines davon ist sichtbar. Ich sehe aber nur eines. Diese Formulare müssen exakt die gleichen Felder haben, wie die Formulare auf den Originalseiten. Als action brauchen sie die URL zu den Auswerteskripten der Originalseiten. Und als target bekommen die <form>s die Namen der iFrames - ein iFrame selbst kann gar kein target haben...

Wenn nun das sichtbare Formular ausgefüllt wurde, wird über einen Buttonklick zuerst das(die) verstecke(n) Formular(e) mit den entsprechenden Werte befüllt und dann abgeschickt. Durch die richtigen action und target werden die Ergebnisse in den iFrames dargestellt.

Kein Wrapper/Proxy auf dem Server nötig.

PS: Validiere bitte mal dein HTML und schau' in die Fehlerkonsole!
 
OT: Nur mal so nebenbei, soll jetzt Semseo nicht vom Weg abbringen.
Hab mal versucht per Ajax-POST ein Request an einen anderen Server abzusetzen. Das ich kein Resonse erwarten/sehen kann ist klar, SOP. Hätte aber erwartet, das wenigstens der Request dort komplett ankommt. Zu meiner Verwunderung wurde zwar das Ziel im fremden Server aktiviert (ein PHP-Script welches die POST-Daten loggt), das Post-array war aber leer. Am eigenen Server kam alles an. Mit Formularen auch geht beides.
 
@jspit: sehr interessant und komisch. Dass keine POST-Daten ankommen ist gut, da man ja sonst Nutzereingaben auf der Seite (z.B. Benutzername und Passwort) an der SOP vorbei doch an den Server senden könnte. GET sollte man auch noch ausprobieren.
Komisch finde ich, dass überhaupt ein Request gestartet wurde - in welchem Browser hast du das ausprobiert?

@ein schlauer: exakt - das target Attribut des <form>s... dachte schon, ich kann nicht mehr erklären...
 
Zurück
Oben