09. juli 2005 - 19:34Der er
33 kommentarer og 1 løsning
dobbelt submit af form
Hej. jeg har nogle gange oplevet at hvis man klikker på submit et par gange efter hinanden så bliver formen submittet to gange, og data indsættes dobbelt i databasen. kan man ikke undgå at det sker ??
Det er vel ikke nødvendigvis så underligt Hver gang man submitter en form så kaldes dit bagved liggende script jo :o) Så hvis du vil undgå det så skal du tjekke op på nogle af dine parametre før du indsætter i databasen. Nu ved jeg ikke hvad det drejer sig om Men feks kunne man tjekke på brugernavnet eller nyheds overskrift og sikre at der ikke kan dannes en dublet
Det er nok ikke noget du skal omgåes med dhtml, men derimod serverside i asp eller php afhængig af hvad du koder i Du kan jo også komme ud for at en bruger trykker F5 , hvorefter browseren spørger om man vil sende data igen, og det er jo heller ikke så smart jo :o)
En mulighed kunne være at generere en unik kode sammen med din form:
<form action=”ditScript.php” method=”post”> <input type=”hidden” name=”formId” value=” ... en eller anden unik kode her ...”> <input type=”text” name=”fornavn”> ... <input type=”submit”> </form>
- og så have en tabel i din database over de formId'er der er blevet brugt. Hvis der kommer en fomId som allerede er brugt afvises, og hvis den ikke er brugt så opdateres tabellen med det nye formId.
kun hvis du beder den om det! Nielles forslag bygger netop på dette. At du genererer en kode hver gang formen hentes Hver gang formen submittes så tester du i en tabel om koden findes, hvis ikke så indsætter du den og gør det du skal. Hvis den findes så fortæller du brugeren at han ikke kan submitte samme form to gange i træk
Du kan endda sagtens sætte et tidsstempel på i tabellen sammen med dit formID, og så simpelthen slette dem som er f.eks. óver 10 minutter gamle. PÅ den måde kommer din tabel ikke til at fylde mere og mere med tiden.
Synes godt om
Slettet bruger
09. juli 2005 - 20:39#8
Jeg tror i glemmer at man stadig kan submitte formen hurtigt, 2 eller flere gange efter hinanden, hvis ellers den bagvedliggende side er lang tid om at blive indlæst.
Dengang Eksperten startede kunne man f.eks. lave 2 ens indlæg ved at trykke flere gange på submit, med et sekunds mellemrum.
Du kan submitte den ligeså tosset og meget du vil Men hvis der hver gang tjekkes op med en database, så vil database kaldene komme i kø til databasen og efter det første kald vil resten jo så netop blive afvist :o)
el_barto> Øh, nej det glemmer vi da ikke. Det er jo det spørgsmålet handler om. Selvfølgelig kan man submitte 2/flere gange hurtigt, men ved at indføre et unikt formId sikre man sig at det netop kun er det ene af de flere submits' som rent faktisk kommer igennem.
Der er ikke nogen måde hvorpå at man kan forhindre dobbelt submit – eller det mere almindelige tilfælde hvor folk trykker på backspace og så prøver at sumbitte en gang til.
nielle, hvis du ser det er det herinde ikke muligt på exp at trykke tilbage og submitte din kommentar igen Jeg mener altså det var nogen i php der engang sagde noget om at sende headeren videre som i fjernede muligheden for at gå tilbage...men er ikke 100 :/
Ekspertens løsning er at sende til en mellemside (respons.php) og derefter redirecte (faktisk replace !-) tilbage til samme side ...
-- men eksperten bruger også præcis tricket med at enhver udsendt form indeholder et unikt id, som den ikke vil acceptere mere end een gang i databasen !o]
steent >> hvis man vil undgå at form data kan indsættes dobbelt i databasen, så er det bare ikke noget at gøre knappen disabled :o) om man submitter til samme script ? En form har mig bekendt kun een action så hvis du trykker f5 .. joo så submitter den da ganske vist til samme script , med mindre du mener noget andet?
busschou >> Problemet er jo velkendt fra betalingssider.
Den procedure jeg selv benytter er følgende:
1. Siden med formen poster til 2. Siden der gemmer i DB som sender brugeren til 3. Siden med en eller anden inforation der skal vises efter data fra form er gemt i DB
steent >> Jeg forstår dig bare ikke, hvordan kan du gøre alt det udelukkende ved at gøre submit knappen disabled? Du skriver selv at det kun fjerner muligheden for at trykke på knappen Hvis du sender brugeren til en eller anden side som skal vise, og brugeren klikker tilbage og derved gensender data. Ja så bliver dataen skisme da gensendt, og kun _kun_ hvis du har kodet dig fra det undgår du at det bliver puttet i db igen. Det har du så tilsyneladende undgået ved at hver ordre har et unikt nummer som kun kan fremkomme i databasen een gang eller hvad? Jamen så er det jo der din sikkerhed ligger og ikke i at gøre knappen disabled :o)
Nej med at kanppen er disabled fjerner brugerens mulighed for at klikke på knappen 2 eller flere gange og derved undgår du 99,9% af alle de gange folk klikker på knappen fordi de ikke tror der sker noget. Alternativt kan man jo ændre teksten i knappen til 'Vent venligst' eller noget lignende.
steent >> ja den er jeg med på, man kan gøre det mere eller mindre usandsynlig for brugeren at lave fejl. Men hvis man gerne vil udelukke at det kan ske. Så er min pointe blot at det ikke er nok at gøre knappen disabled, og derfor kunne jeg ikke forstå at du hårdnakket påstod at du ikke havde problemet i din shop, for det må du da have hvis det er det eneste du har gjort. Hvis man vil være helt sikker så må ved selve opdateringen af databasen lave et tjek på data af den ene eller anden art for at sikre det ikke bliver genindsat
Hmmm, var det vitterligt steent's svar du endte med at bruge eller har du bare accepteret dette svar fordi at det var det eneste som var givet?
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.