Autor Zpráva
PetZe
Profil *
Poradíte někdo jak odeslat data z jednoho html form více php skriptům umístěných na různých adresách?
Důvodem je, že potřebuji odeslat shodné data dvoum různým zpracovatelům a nechci zatěžovat uživatele tím, že bych se ptal 2x na to samé.
Děkuji
Radek9
Profil
PetZe:
Buď můžeš poslat data na tvůj PHP script a z něj potom pomocí cURL poslat data na ty dva scripty, nebo to můžeš vyřešit JavaScriptem. Nastavíš na form target do nějakého skrytého iframu a na onsubmit formu navěsíš událost, která např. form zduplikuje a odešle na druhou adresu, nebo prostě jen počká, až se odešlou data na tu první, a poté znovu odešle ten stejný form.
PeZe
Profil
Metoda javascriptu se mi zdá zajímavá. Nemůžeš ji prosím rozvést?
Zajímá mě ten kód, který form zduplikuje, nahradí adresu skriptu a odešle. Jinými slovy, jak vypadá ten javascript? A to ani nemusí kopírovat vše, stačí mi 2 položky.
Radek9
Profil
PeZe:
Nějak takto:
<iframe name="iframe1"></iframe>
<iframe name="iframe2"></iframe>
<!-- Dva (ideálně skryté) iframy jako targety formů -->

<form method="post" action="form1.php" target="iframe1" id="test">
  <input type="text" name="text">
  <input type="submit" value="Odeslat">
</form>

<script>
var form = document.getElementById("test");

form.onsubmit = function () {
  var clonedForm = form.cloneNode(true); // Naklonování formu se všemi zanořenými elementy včetně jejich hodnot
  clonedForm.action = "form2.php";
  clonedForm.target = "iframe2";
  
  document.body.appendChild(clonedForm);
  
  clonedForm.submit();
  
  document.body.removeChild(clonedForm);
};
</script>

Edit: Opraveno pro IE, viz [#8].
_es
Profil
[#4] Radek9:
Nie je to „klonovanie“ trochu krkolomné? Bude to fungovať vo všetkých prehliadačoch? Asi by stačilo:
form.onsubmit = function() {
  this.action = "prváAdresa";
  this.target = "iframe1";
  this.submit();
  this.action = "druháAdresa";
  this.target = "iframe2";
  this.submit();
  return false;
};
PetZe
Profil *
Pro nás úplné začátečníky a také když už jsme u toho zjednodušování:
neřešilo by můj problém toto?

<form method="post" action="php1.php">
<input type="text" name="text">
<input type="submit" value="Odeslat">
</form>

<script>
form.onsubmit = function() {
this.action = "php1.php";
this.submit();
this.action = "php2.php";
this.submit();
return false;
};


Následuje otázka - neodešle se php1.php 2x ? tedy jednou z formuláře při stisknutí a podruhé ze scriptu na základě události submit?
Děkuji
_es
Profil
PetZe:
neřešilo by můj problém toto?
Neriešilo. Lebo po prvom zavolaní metódy submit by mohlo nastať, v závislosti od prehliadača, zrušenie všetkého JS a teda by sa odoslal formulár len raz a do toho istého okna by sa načítal výstup z php1.php. Domnievam sa, že ti ide o odoslanie dát a nie o načítanie výstupu z adresy formulára do toho istého okna.

neodešle se php1.php 2x ?
Neodošle, ani v prípade, že by prehliadač vykonal aj príkazy za prvým volaním metódy submit, lebo odoslanie vyvolané užívateľom je zrušené príkazom return false.
Radek9
Profil
_es:
Bude to fungovať vo všetkých prehliadačoch?
Ano. Funguje dokonce v IE 7.

Edit: Hmm, tak ne tak úplně. Clone jede v pořádku, nicméně je nutné naklonovaný form přidat do DOMu.

Asi by stačilo:
To jsem zkoušel a bohužel se to odeslalo jen do toho druhého framu. První se vůbec nenačetl. (Minimálně v Chromu.)
_es
Profil
Radek9:
To jsem zkoušel a bohužel se to odeslalo jen do toho druhého framu.
Vyskúšal som to a „blbne“ to len v Google Chrome. Stačí to upraviť na:
form.onsubmit = function() {
  this.action = "prváAdresa";
  this.target = "iframe1";
  this.submit();
  setTimeout(function(){
    form.action = "druháAdresa";
    form.target = "iframe2";
    form.submit();}
    , 0);
  return false;
};
Asi zmena action a target za 4. riadkom v [#5] nastane ešte pre prvé odoslanie.
PetZe
Profil *
Děkuji moc za inspiraci a odpovědi
DarkMeni
Profil
Co když uživatel nebude mít zapnutý javascript?
Pak se to odešle jen jednomu skriptu (tomu, který bude původně v action)

Jestli je důležitý aby se ty data dostaly i ke druhýmu skriptu, tak je asi dobrý říct uživateli s vypnutým javascriptem, aby si ho zapnul, nebo to řešit na straně serveru
Radek9
Profil
DarkMeni:
Jak jsem psal v [#2], ještě je tu řešení pomocí cURL.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: