JanKoWeb: Tvorba webu - Odesílání formuláře: zabránění vícenásobnému odeslání

Odesílání formuláře: zabránění vícenásobnému odeslání

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í

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.

Zašednutí tlačítka Odeslat

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>

Rubrika Tvorba webu | Tagy Formulář, Odeslání, Vícenásobné | So 30.04.2011 | 5417x

Náhodné články

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."

B. Franklin