Avatar billede jytte Nybegynder
26. maj 2004 - 09:13 Der 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 ?

3)på en hel anden måde

Jeg efterlyser meninger med begrundelser
Avatar billede arne_v Ekspert
26. maj 2004 - 09:19 #1
Du kan gemme en værdi N i session, outputte N i et hidden field,
tælle N op efter hvert spørgsmål, rejecte hvis submitted N ikke
matcher N i session.
Avatar billede jytte Nybegynder
26. maj 2004 - 09:42 #2
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
Avatar billede arne_v Ekspert
26. maj 2004 - 23:50 #3
Jeg ville først tælle på op hvis det var OK.

Og du skal huske at generere det skjulte felt.

Men ja du har forstået ideen.
Avatar billede arne_v Ekspert
29. maj 2004 - 20:30 #4
OK ?
Avatar billede jytte Nybegynder
30. maj 2004 - 09:55 #5
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.

Tror du det er en uholdbar løsning ?
Avatar billede jytte Nybegynder
30. maj 2004 - 10:07 #6
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
Avatar billede jytte Nybegynder
09. juni 2004 - 10:22 #7
Da jeg har brugt din idé skal du også have point omend med lidt forsinkelse
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester