| Autor | Zpráva | ||
|---|---|---|---|
| PetZe Profil * |
#1 · Zasláno: 11. 5. 2014, 00:08:28
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 |
#2 · Zasláno: 11. 5. 2014, 11:25:24
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 |
#3 · Zasláno: 11. 5. 2014, 12:01:22
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 |
#5 · Zasláno: 11. 5. 2014, 14:42:59
[#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 * |
#6 · Zasláno: 11. 5. 2014, 15:28:23
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 |
#7 · Zasláno: 11. 5. 2014, 15:47:29
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 |
#9 · Zasláno: 11. 5. 2014, 16:37:04
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;
};action a target za 4. riadkom v [#5] nastane ešte pre prvé odoslanie.
|
||
| PetZe Profil * |
#10 · Zasláno: 12. 5. 2014, 09:10:22
Děkuji moc za inspiraci a odpovědi
|
||
| DarkMeni Profil |
#11 · Zasláno: 12. 5. 2014, 09:34:27
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 |
#12 · Zasláno: 12. 5. 2014, 10:07:13
DarkMeni:
Jak jsem psal v [#2], ještě je tu řešení pomocí cURL. |
||
|
Časová prodleva: 12 let
|
|||
0