Page Refresh na Form Submit

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jan Koehoorn

Jan Koehoorn

06/11/2005 12:57:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

22/01/2020 23:44:47
 
Alfred -

Alfred -

06/11/2005 13:23:00
Quote Anchor link
Op mijn website maak ik gebruik van een "anti-flood" systeem... Maw, 30 seconden tussen elke post, of je krijgt een melding dat je nog x aantal seconden moet wachten :)

Vroeger heb ik dit ook eens gedaan door gewoon een directe refresh na het posten, dat werktte toen ook wel, maar was niet zo handig.

Of je kan de stijl die men hier toepast gebruiken, posten, pagina dat het in orde is, en doorlinken, dan is vernieuwen ook niet meer mogelijk (tenzij je vernieuw op de pagina met tekst dat het in orde is ;))
 
PurpleMadness -

PurpleMadness -

06/11/2005 13:25:00
Quote Anchor link
Of je kan iets met sessions doen..
Dat je een session aanmaakt bij het verzenden van de form, en als hij dan op een andere pagina komt, als het afgerond is, dat je hem dan unset ;)
En als hij dan refresh't, kijk dan of die session bestaat :P
Gewijzigd op 06/11/2005 13:26:00 door PurpleMadness -
 
- SanThe -

- SanThe -

06/11/2005 13:25:00
Quote Anchor link
Waarom stuur je de bezoeker niet gewoon opnieuw naar de pagina, waarom een refresh?
 
Jelmer -

Jelmer -

06/11/2005 14:40:00
Quote Anchor link
Volgens mij werkt header('Location: zoveel.php'); na het verzenden (dus aan het einde van de if-submit-lus) best aardig.
 
Eric Cartman

Eric Cartman

06/11/2005 15:17:00
Quote Anchor link
SanThe:
Waarom stuur je de bezoeker niet gewoon opnieuw naar de pagina, waarom een refresh?


Volgens mij bedoeld Jan dat wanneer de gebruiker zelf refresht, dan een dubbel iets krijgt...
 
- SanThe -

- SanThe -

06/11/2005 15:44:00
Quote Anchor link
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.
 
Eric Cartman

Eric Cartman

06/11/2005 16:45:00
Quote Anchor link
En als het formulier nou gebruikt wordt voor een doel waar geen database voor nodig is, zoals het e-mailen...
 

06/11/2005 17:01:00
Quote Anchor link
Ik gebruik een JS script dat de submit button disabled ;)
werkt goed!
 
- SanThe -

- SanThe -

06/11/2005 17:02:00
Quote Anchor link
@Jip: Je bent wel lastig jij...(geintje) Maar je hebt wéér gelijk. Vijf keer hetzelfde mailtje versturen is inderdaad een mogelijkheid. Tja, nou moet ik écht na gaan denken.
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 17:17:00
Quote Anchor link
SanThe:
Waarom stuur je de bezoeker niet gewoon opnieuw naar de pagina, waarom een refresh?


Jip:
Volgens mij bedoeld Jan dat wanneer de gebruiker zelf refresht, dan een dubbel iets krijgt...


Klopt, dat bedoel ik. Ze klikken submit, of typen enter. Om de één of andere reden gaat het traag of ze snappen niet wat er gebeurt, en dan gaan ze zélf refreshen. Ik heb nog niet alle antwoorden op deze post gelezen, ga ik nu doen.
Gewijzigd op 06/11/2005 17:18:00 door Jan Koehoorn
 
Dutchcamel

dutchcamel

06/11/2005 17:18:00
Quote Anchor link
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 :)
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 17:31:00
Quote Anchor link
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?
Gewijzigd op 06/11/2005 17:32:00 door Jan Koehoorn
 
Han eev

Han eev

06/11/2005 17:34:00
Quote Anchor link
Ik heb gewoon dat ze maar 2x mogen reageren op 1 ding per dag...!
Werkt prima gen problemen mee gehad ;)
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 17:37:00
Quote Anchor link
Han:
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?
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 17:40:00
Quote Anchor link
SanThe:
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.
 
Jelmer -

Jelmer -

06/11/2005 18:14:00
Quote Anchor link
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.
 
Eric Cartman

Eric Cartman

06/11/2005 18:16:00
Quote Anchor link
Ja, dat is wel de beste oplossing denk ik... Dat ga ik zeker gebruiken..!
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 18:22:00
Quote Anchor link
Jelmer:
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
Gewijzigd op 06/11/2005 18:26:00 door Jan Koehoorn
 
- SanThe -

- SanThe -

06/11/2005 18:23:00
Quote Anchor link
Jan:
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.
 
Jan Koehoorn

Jan Koehoorn

06/11/2005 18:24:00
Quote Anchor link
SanThe:
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?
Gewijzigd op 06/11/2005 18:25:00 door Jan Koehoorn
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.