Hallo mede PHP-ers.

Stel een bezoeker heeft net een formulier verzonden en daarna vernieuwt hij de pagina. Als je geen controle inbouwt, worden de gegevens twee keer verzonden. Ik wil eens een elegante manier verzinnen om dat op te vangen.

Als het bijvoorbeeld gaat om het invoegen van de formuliergegevens in een db, zou je kunnen checken op dubbele records, maar misschien zijn er veel mooiere manieren. Ik ben benieuwd naar jullie gedachtes hierover?
Wat Sebastiaan zegt, met javascript de submit laten disablen werkt idd wel voor het voorkomen van 2 keer posten, maar niet voor het refreshen op de resultaat pagina. Daarom kies ik altijd voor het laten disablen van de submit button, het formulier laten verwerken en onderaan een header('Location: ...'); plaatsen. Dan voorkom je dat men 2 keer op submit klikt en de pagina waar je op uitkomt kan zo vaak je wil gerefresht worden :)
Okee, ik heb de meeste gelezen.

Oplossingen met PHP verdienen de voorkeur vind ik, want JavaScript is minder waterdicht.

Oplossingen met een time-out zijn natuurlijk minder gebruiksvriendelijk. Ik denk dat de andere forumleden die hier veel posten het met me eens zijn dat die time-out die je hier krijgt als je even snel op een stuk of wat posts wilt reageren toch een beetje irritant is. Het zou mooi zijn als het anders zou kunnen.

Iemand naar een andere pagina sturen werkt ook wel, maar dan kunnen ze altijd nog de back-toets van de browser gebruiken.

Ik denk zelf in deze richting:

1) maak een sessievariabele aan, waarin je de POST of de GET array opslaat.
2) als er een formulier verzonden wordt, op wat voor manier dan ook, hetzij door een klik op submit, hetzij door een druk op 'enter', hetzij door een handmatige page-refresh, vergelijk je de resultaat-array met de eventuele array die in de sessie opgeslagen is. Zijn ze hetzelfde, dan is er sprake van een dubbele post.

Any ideas?
Ik heb gewoon dat ze maar 2x mogen reageren op 1 ding per dag...!
Werkt prima gen problemen mee gehad ;)
Han schreef op 06.11.2005 17:34
Ik heb gewoon dat ze maar 2x mogen reageren op 1 ding per dag...!
Werkt prima gen problemen mee gehad ;)


Bedoel je in een forum? Dat ze maar twee keer per dag op één topic mogen reageren?
SanThe schreef op 06.11.2005 15:44
Als je in je database één veld of een combinatie hebt van velden die 'uniek' zijn zal er geen dubbele invoer plaatshebben. En dan bedoel ik dus niet het id veld.


Zoiets zou ik me ook voor kunnen stellen. Dat MySQL kan eisen dat een bepaalde combinatie van velden uniek moet zijn.
Je zou in een input type hidden een bepaalde random waarde kunnen zetten (microtime md5 o.i.d) en die bij het verzenden in een sessie opslaan. Waneer de random waarde met de sessie overeenkomt, is de pagina 2 keer verstuurt.
Ja, dat is wel de beste oplossing denk ik... Dat ga ik zeker gebruiken..!
Jelmer schreef op 06.11.2005 18:14
Je zou in een input type hidden een bepaalde random waarde kunnen zetten (microtime md5 o.i.d) en die bij het verzenden in een sessie opslaan. Waneer de random waarde met de sessie overeenkomt, is de pagina 2 keer verstuurt.


Dat klinkt inderdaad goed! Simpel en elegant. Dan hoef je maar één waarde te controleren en niet een hele array.

edit: of in plaats met random iets maken met microtime () misschien?

edit2: sorry, niet goed gelezen. Jij stelde ook al microtime voor :s
Jan Koehoorn schreef op 06.11.2005 17:40
Zoiets zou ik me ook voor kunnen stellen. Dat MySQL kan eisen dat een bepaalde combinatie van velden uniek moet zijn.


Je klinkt twijfelachtig. Maar dit bestaat, ik gebruik het zelf ook.
SanThe schreef op 06.11.2005 18:23
Je klinkt twijfelachtig. Maar dit bestaat, ik gebruik het zelf ook.


Klopt, ik wist inderdaad niet zeker of MySQL dit zou kunnen.

edit:
@SanThe: wat vind je van de Jelmer-variant?

Reageren