Avatar billede petey Nybegynder
09. august 2002 - 00:31 Der er 24 kommentarer og
1 løsning

Mange klik smadre min gæstebog

Jeg udlover 100 point til den der kan give en løsning på det her problem:

Jeg har en gæstebog på min hjemmeside. Man skriver i gæstebogen ved at bruge en form med en submit knap, hvorefter at brugerens data (hilsen og navn) bliver sendt til en database. Problemet er, at hvis man er hurtig og trykker flere gange på submit knappen kan man få sendt de samme data sendt afsted og gemt i databasen mange gange, hvilket ikke er meningen. Hvordan løser jeg dette problem ?
Avatar billede petey Nybegynder
09. august 2002 - 00:42 #1
Kan det løses ved brug af Session variabler eller er der en metode i Response objektet der løse problemet ?
Avatar billede KingMedia Novice
09. august 2002 - 01:01 #2
TJa....    du kan måske bruge client side scripting til det...

f.eks

OnSubmit="document.form.submitknap.disabled=true

Har ikke testet det, men det er en mulighed

/Mads
Avatar billede KingMedia Novice
09. august 2002 - 01:05 #3
Det burde virke...    så skal du jo bare sørge for, at når din form er submittet, bliver brugerne redirectet til en anden side.. f.eks gæstebogens forside....

SÅ skulle de ikke kunne trykke flere gange :o)

/Mads
Avatar billede KingMedia Novice
09. august 2002 - 01:05 #4
Det skulle jo være et svar ;o) *GG*
Avatar billede teamdev Novice
09. august 2002 - 07:48 #5
Eller som du selv er inde på session variabler...  du kunne jo smide session variablen ned i databsen sammen med beskeden, og når der submittes tjekke om session variablen eksisterer i db i forvejen, hvis den gør, så skal der ikke skrives noget i db. Ulempen er at folk så ikke kun kan skrive 1 besked pr. besøg
Avatar billede petey Nybegynder
09. august 2002 - 10:19 #6
Kingmedia: Hvad betyder denne linje: OnSubmit="document.form.submitknap.disabled=true
Avatar billede coltau Juniormester
09. august 2002 - 11:06 #7
Kingmedia mener at linien kan disable submit-knappen når man trykker på den første gang. Det betyder at man ikke kan tryke på den mere end en gang og det kan jo løse dit problem. MEN linien dur ikke på den måde som Kingmedia har lavet den. (Så får man fejlmeddelelse hvis det er slået til.)

Linien skal skrives meget nøjagtigt for at virke. Eksempelvis på denne måde:

<form method="POST" action="updatebook.asp" OnSubmit="java script:this.submit.disabled=true">

Ovenstående html-linie kan disable submitknappen når man trykker på den første gang. (Den er testet)

Du skal bare sikre dig at submitknappen hedder "submit". Sådan:

<input type="submit" name="submit" value="Send">

Det skulle løse problemet.
Avatar billede tmceu Praktikant
09. august 2002 - 17:22 #8
Du kunne også blot indsætte flg. i toppen af både scriptet med formen og den der submitter:

    Response.Expires = 60
    Response.Expiresabsolute = Now() - 1
    Response.AddHeader "pragma","no-cache"
    Response.AddHeader "cache-control","no-store"
    Response.CacheControl = "no-cache"

Dermed sikrer du dig, at 2. og efterfølgende submits indeholder en tom formular, som du selvfølgelig ikke submitter.
Avatar billede petey Nybegynder
09. august 2002 - 20:16 #9
tmceu vil du prøve at forklare hver linje. På forhånd tak.
Avatar billede tmceu Praktikant
09. august 2002 - 20:27 #10
Det er egentlig ikke nødvendigt at forklare dem enkeltvis :-) Det er blot parametre der forhindrer browseren i at cache siden. Mange af dem burde kunne gøre hver for sig, men der er brugt livrem og seler, for at tage højde for forskellige browsere, versioner m.v. der agerer en smule forskelligt.
Avatar billede KingMedia Novice
10. august 2002 - 00:18 #11
Coltau >>>>

Hvis man indsætter følgende ...

OnSubmit="document.form.submitknap.disabled=true" i <form> elementet, og ændrer "form" til form navnet og, "submitknap" til submitknappens navn, virker den 100%  ... Jeg har selv testet den, og du vil ikke få nogen fejlmeddelelse.... Så jeg kan ikke helt se hvorfor du nu siger at man får en fejlmeddelelse hvis man skriver den OnSubmit linie ? ....

Og iøvrigt er det mere korrekt at benytte document.formnavn.submitknapnavn, i stedet for this.submit... ;o) ... 

Men ok .....  Jeg er jo åbenbart for meget newbie til dig ? ;o) ..

/Mads
Avatar billede coltau Juniormester
10. august 2002 - 07:24 #12
--> KingMedia

Sorry - Sorry - Jeg har lige prøvet at fremprovokere fejlen igen (document.form.submit is not an object) og det kan jeg kun hvis jeg staver knappens navn forkert. :--|

Så dit forslag virker.
Avatar billede KingMedia Novice
10. august 2002 - 09:46 #13
Coltau >>  Heh ... no offence taken ;o) ...

Så længe man bare sørger for at navngive sit form element, og sin submitknap, og staver dem 100% korrekt, så burde det i hvert tilfælde virke :o) ....

Var bare lige i humør til at "stikke" lidt ;o) *GG* Intet ondt ment overhovedet :o))
Avatar billede oasen Nybegynder
10. august 2002 - 16:47 #14
Du kan jo også lade et nyt vindue åbne, hvor brugeren skriver i bogen. Når data sendes opdateres basen og der viderestilles til en anden side, hvor vinduet automatisk lukkes.
Avatar billede petey Nybegynder
14. august 2002 - 20:01 #15
tmceu: din Response-kode virker ikke.
Avatar billede KingMedia Novice
14. august 2002 - 20:19 #16
petey  Har du prøvet mit forslag længere oppe ? .. :)
Avatar billede petey Nybegynder
14. august 2002 - 20:24 #17
Kingmedia: Nej, jeg prøver nu.
Avatar billede petey Nybegynder
14. august 2002 - 21:23 #18
Kingmedia jeg er ikke helt klar over hvordan, jeg skal implementere din løsning. I øjeblikket har jeg en form der ser således ud:

<form method="post" action="response.asp">
...
<input type="submit" name="send" value ="Tilføj">
</form>

Hvor (og hvad ekstra skal tilføjes) for at få din onsubmit til at virke ?
Avatar billede petey Nybegynder
14. august 2002 - 21:30 #19
Denne linje
OnSubmit="document.form.submitknap.disabled=true"
er da html ?
Avatar billede petey Nybegynder
14. august 2002 - 21:34 #20
Jeg har prøvet det her :

<form method="post" action="response.asp" name="formen" OnSubmit="document.formen.send.disabled=true">
...
<input type="submit" name="send" value ="Tilføj">
</form>

og det virker ikke.
Avatar billede KingMedia Novice
14. august 2002 - 23:10 #21
Den disabler da din submitknap petey ?

Jeg har testet det, og det virker :)
Avatar billede petey Nybegynder
14. august 2002 - 23:24 #22
kingmedia:

min kode er:

<form method="post" action="response.asp" name="formen" OnSubmit="document.formen.send.disabled=true">
...
<input type="submit" name="send" value ="Tilføj">
</form>

<%
if (Request.ServerVariables("HTTP_METHOD") == "POST") {
//Gemmer i database
Response.Redirect(response.asp);
}
%>

Med andre ord: samme side behandler data fra form (er det sådan du har testet ?).
Avatar billede petey Nybegynder
14. august 2002 - 23:25 #23
Eller har du to sider: en med formen og en der behandler dataene ?
Avatar billede petey Nybegynder
14. august 2002 - 23:34 #24
Kingmedia: jeg har prøvet med to sider og det virker heller ikke. Må jeg have lov at se din kode ?
Avatar billede petey Nybegynder
29. august 2002 - 23:55 #25
Kingmedia: Det lykkedes mig at få din kode til at virke perfekt. Jeg tænker på, om det også vil virke, hvis man slår scripting fra i internet explorer...

Tak for hjælpen alle sammen.
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