Az űrlap újraküldésének letiltása. Az oldalfrissítésnél küldje el újra az űrlapadatokat. Űrlapok újraküldésének megakadályozása ügyféloldali átirányítással
Egy időben elgondolkodtatott a kérdés - hogyan lehet megvédeni az oldal oldalait az űrlapadatok újraküldésétől az oldalfrissítés során (persze, ha előtte volt küldés).
Valószínűleg minden webmester és fejlesztő tudja, hogy ha az oldalon bármilyen űrlap kitöltésével a „küldés” gombra kattintott, akkor a beküldés után, ha megpróbálja frissíteni az oldalt, a böngésző egy üzenetet jelenít meg, amely megerősíti az újraküldést.
Ez bizonyos pontokon elfogadhatatlan. Például az elemi alak esetében Visszacsatolás. Amikor a felhasználó kitöltötte az űrlapot és elküldte az üzenetet, majd valamilyen általa ismert okból frissítette az oldalt, a levél ismét eltűnt. Ez persze nem lehet végzetes eset, csak példaként. Minden sokkal fájdalmasabb, például egy webáruházban történő rendelés feladásakor.
Feltettem tehát magamnak a kérdést, hogy találjak-e megoldást erre a problémára, és rájöttem, hogy egyetlen megoldás létezik: az űrlapfejléc ('helyszín: cím') elküldése után átirányítást kell használni. Azok. minden egyszerű - küldés után hívunk egy átirányítást (akár ugyanarra az oldalra is) és kész! Az oldal frissítése tiszta lesz, befejezett POST-ok és GET-ek nélkül.
Minden rendben lenne, de személyesen tapasztaltam néhány problémát ezzel kapcsolatban. Ezek a következők. Korábban az átirányítások használata nélkül a webhelyeim adatküldésének mechanizmusa a következőképpen működött:
A felhasználó kitölti az űrlapot, rákattint a "küldés" gombra, a szkript megkapja a beküldött adatokat, ellenőrzi azok helyességét (érvényesség, kötelező adatok stb.) és választ ad - vagy sikeres volt a művelet, vagy hiba történt és egy lista hibák (például: hiba - a „név” mező nincs kitöltve. A küldő oldalon pedig egy megfelelő üzenet jelenik meg: a küldés sikeres vagy nem sikerült.
Ha a beküldés sikertelen, az űrlap a képernyőn marad, és a mezői feltöltődnek a felhasználó által megadott adatokkal. Azok. az adatok a $_POST változóból származnak (ha POST módszer), és írja be a megfelelő mezőket (azaz a posztból visszatérnek a saját mezőibe, hogy ne írják be újra). Hiszen mindenkit feldühít, amikor kitöltötted az űrlapot, és ne adj isten valamit rosszul jeleztél, és amikor megpróbálod elküldeni, akkor kapsz egy üzenetet, hogy valami rosszul van kitöltve, és az űrlap frissül és újra üres. És egy hibásan kitöltött mező miatt újra ki kell töltenie.
Így, mint már említettük, sikertelen kitöltés esetén az űrlap feltöltve marad a $_POST-ból vett adatokkal, és a felhasználó javíthatja a hibás adatokat és újra elküldheti az űrlapot.
Minden jó volt és minden működött.
De aztán csináltam egy küldést átirányítással, és kiderült, hogy a "küldés" gombra kattintás után sikertelen kitöltés esetén az űrlap frissült és a kitöltött mezők már nem maradhattak benne, mert. korábban automatikusan kitöltötték a $_POST tömbből, most pedig az átirányítás után a $_POST úgy lett megtisztítva, mintha nem is lett volna küldés.
De ebben az esetben volt kiút. Használjon munkameneteket. Azok. a fejléc hívása előtt vigye át az adatokat a POST-ból a session változókhoz, és csak ezután, átirányítás után, működjön velük.
Ennek eredményeként a kód sokkal bonyolultabb lett. A hibakeresés nehezebbé vált, mert általában nehéz meghatározni, hogy mi történik a függvényekkel, amikor átirányítás történik. Ha valami hibát vétett a kódokban (ami pontosan a küldéskor jelenik meg), akkor az nem is jelenik meg, mert. átirányítás történik, és még hibaüzenetet sem fog látni.
Általánosságban elmondható, hogy miután implementáltam a fejlécet a kódjaimba, nehezebbé vált az alkalmazásaimmal való munka. A fejlesztés / átdolgozás / hibakeresés bonyolultabbá vált. De én sem tagadhatom meg.
És folyton azon töprengek: vannak más, elegánsabb megoldások?
Küldési folyamat HTML űrlapok eltarthat néhány másodpercig, amíg az űrlap sikeresen elküldésre kerül, és megjelenik a válaszoldal. Azok a felhasználók, akik nem elég türelmesek, többször is rákattinthatnak a Küldés gombra, így az űrlap újra elküldésre kerül. Általában ez nem jelent problémát, de bizonyos esetekben megakadályozhatja, hogy ez megtörténjen.
Az alábbiakban két egyszerű trükköt találsz a dupla feladás elkerülésére, ezek bármelyikét, vagy ezek kombinációját is használhatod.
Többszörös beküldés megakadályozása Javascript segítségével
Valószínűleg a Javascript használata az űrlapok újraküldésének megakadályozására a legjobb a könnyű út. Amikor a felhasználó elküldi az űrlapot, kikapcsolhatja a „Küldés” gombot, és módosíthatja a nevét valami leíróbb „Küldés, kérem várjon...”-ra.
Az első lépés egy egyedi azonosító beállítása id, például id="myButton":
A második (és utolsó) lépésben két Javascript-parancsot kell beállítani a címkében