26. maj 2004 - 09:13Der er
6 kommentarer og 1 løsning
forhindre dobbelt-submit vha ASP/javascript
jeg afvikler nogle tests (et spørgsmål pr. side) online hvor bruger skal være logget ind og resultatet gemmes i en database
der er en fejl i min programmering idet jeg ikke har taget højde for at testtagere kan finde på at klikke flere gange på submitknappen "Afgiv svar". Det har den uheldig effekt at der bliver gemt for mange besvarelser og jeg "spoler videre til næste testopgave" for hvert tryk og dermed bliver det gemte ubrugeligt.
Mit spørgsmål går nu på hvordan jeg bedst løser problematikken.
1)Jeg kan i mit ASP lave en application.lock ... application.unlock omkring gemningen af data og registrering af at det ikke må gemmes igen, MEN tror I dette vil gøre det MEGET langsommere hvis nu der er mange brugere på samtidig ?
2)jeg kunne vha noget javascript dimme summit-knappen når man har trykket på den, MEN hvis nu brugeren laver en refresh vil der vel stadig være mulighed for at komme til at submitte flere gange ?
Jeg skal vel stadig sørge for at optællingen af N bliver udelelig?
Tror du følgende vil virke:
application.lock session("N")=session("N")+1 application.unlock if session("N")-1=request.form("N") then 'Gem testresultat 'hent næste testopgave 'redirect else 'redirect end if
Jeg har fundet ud af at det ikke er så simpelt endda. I mit testsystem kan man mellem besvarelserne få respons på ens afgivne svar -- dvs. det nytter ikke noget at vise næste side hvis der ikke er blevet gemt (som der jo ikke nødvendigvis er når det kun er sidste klik på submit der for lov til at redirecte) Derudover er det ikke alle redirects som går til samme side, så hvis ikke der er blevet gemt ved jeg ikke hvor der skal redirectes til.
Da jeg ikke umiddelbart kan finde en løsning på dette har jeg valgt en løsning hvor jeg bruger javascript til på onsubmit at disable submit-knappen.
For at være sikker på at man ikke kan snyde javascriptet til at der bliver gemt flere gange har jeg dog lavet følgende
if <ej submittet hertil> then <vis testen med hidden inputfelt session("N")+1> else 'ej submittet hertil application.lock if session("N")<>request.("N") session("N")=request("N") udfør=true else udfør=false end if application.lock if udfør then <gem besvarelsen> <getNext> <redirect> else Response.write "trykket for mange gange på submit" Response.end end if end if
Da jeg har brugt din idé skal du også have point omend med lidt forsinkelse
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.