Stručný přehled možností řešení zabránění vícenásobného odeslání formulářů.
Já osobně používám následující postup: při odeslání formulář pošlu aktuální stránce. V případě, že je třeba doplnit nějaká pole, zobrazím formulář s chybovými hláškami, které dostanu právě vyhodnocením odeslaného formuláře.
Když je vše v pořádku, ještě než začnu vytvářet HTML stránku, použiji v php Header("Location: AKTUALNI_STRANKA"); (čímž zabráním znovu odeslání při obnovení stránky) a do parametru připojím proměnnou "sended", kterou posléze v novém načtení stránky vyhodnotím a místo formuláře zobrazím informaci o úspěšném odeslání formuláře.
Přesměrování se v php dá udělat pomocí funkce:
Header("Location: AKTUALNI_STRANKA");Pozor! Tato funkce musí být zavolána ještě přes jakýmkoli výpisem z php na obrazovku.
Proti vícenásobnému odeslání vlivem vícenásobného kliknutí na tlačítko Odeslat (rychle za sebou) můžeme s pomocí Javascriptu při prvním odeslání zakázat (zašednout) odesílací tlačítko, například takto:
function Validace(f) { if (f.vstup.value == "") { // je-li pole vstup prazdne // vyhodime upozorneni alert('Vyplnte vstup.'); // dame kurzor do prislusne kolonky f.vstup.focus(); // zakazeme odeslani return false; } else { // zasedneme tlacitko Odeslat f.operace.disabled = true; // povolime odeslani return true; } } /* ]]> */ </script> <form action="" method="post" onsubmit="return Validace(this);"> <input name="vstup" type="text" value="" /> <input name="operace" type="submit" value="Odeslat" /> </form>
Tento web jsem zakládal na střední, v roce 2008. Je zde hlavně archiv mé tvorby.
Aktuální věci publikuji kvůli úspoře času na Twitter.
Honza
"Čas je materiál, ze kterého se vyrábí život."