Avatar billede hkb-x Nybegynder
08. november 2006 - 13:26 Der er 11 kommentarer og
1 løsning

undgå gensendelse af post data ved opdatering af vindue

kan man undgå at post data sendes igen hvis brugeren opdaterer sit vindue?

Eller kan man  få php til ikke at acceptere det?
Avatar billede hmortensen Nybegynder
08. november 2006 - 13:33 #1
Normalt behandler man data på en anden side, og sender så brugeren til en ny side, hvor der så ikke skedr noget hvis brugeren vælger opdatér.
Avatar billede hkb-x Nybegynder
08. november 2006 - 13:35 #2
nu er det princippet bag jeg er intereseret i...

men du har ret det er en ok måde at gardere sig på... men kan man få php til ikke at accceptere den samme data 2 gange?
Avatar billede dadane Novice
08. november 2006 - 13:43 #3
Du kunne give brugeren et unikt id og så skrive det i en database når data indsendes. Men elegant, - nej vel?
Avatar billede coderdk Praktikant
08. november 2006 - 14:22 #4
Den "korrekte" måde er, som hmortensen siger, at lave en header("location: nyside.php") - på den side der postes til (nyside kan også være samme side)... Det er f.eks. sådan eksperten gør...
Avatar billede hmortensen Nybegynder
08. november 2006 - 14:37 #5
På den måde får du også en fornuftig adskillelse af design og logik.

Når du får beskeden "gensend post data", eller hvad den nu siger, er det browseren der giver beskeden, og det vil fra PHP se ud som en ny forspørgelse.
Avatar billede onkel_satan Nybegynder
08. november 2006 - 15:08 #6
Der er dog et lille smuthul i ovenstående løsning. Den beskytter godt nok mod opdatering  (F5), men hvis serveren er lidt langsom har folk tendens til at spamme submit knappen. Dette blev et problem på min side. Så hvis en person trykker på submit to gange efter hinanden vil den samme request gå igennem 2 gange.
Det er så her at du kan bruge id tag som dadane var lidt inde på. Gå kan gøre det således:
[Afsender side]
$idTag = mt_rand();
$_SESSION['idTag'] = $idTag;
<input type=hidden name=idTag value=$idTag>

[Modtagerside]
if($_POST['idTag'] == $_SESSION['signID']){
$_SESSION['signID']= false;
// indsæt i db, eller hvad du nu vil
Avatar billede hkb-x Nybegynder
08. november 2006 - 15:17 #7
jeg kender alle de løsninger i kommer med og der er mange flere... det var mere om der var en smart måde at opsætte php på...
Avatar billede coderdk Praktikant
08. november 2006 - 15:20 #8
onkel_satan, Det kan vel fixes ved at lave submit-knappen sådan:

<input type="submit" name="sbmit" value="Gem" onclick="this.form.sbmit.disabled=true">

?
Avatar billede onkel_satan Nybegynder
08. november 2006 - 16:27 #9
coderdk: Har ikke bruge den metode, men ser jo fornuftig ud. Det er i hvert fald hurtigt at fikse. Jeg føgler mig bare lidt bedre tilpas php check løsning, hvorfor ?? smagssag vel.
Avatar billede coderdk Praktikant
08. november 2006 - 16:43 #10
Tjah :) Begge dele er vel fine :) En combo ville være optimalt, da du jo med din metode stadig genererer et request til serveren, men det er lidt meget arbejde :-D
Avatar billede hkb-x Nybegynder
10. november 2006 - 15:39 #11
tak for de mange indlæg alle sammen... men det lader ikke til der er nogen metode jeg ikke kender... nogle der vil have point så bare kast et svar...
Avatar billede hkb-x Nybegynder
19. marts 2007 - 13:25 #12
LUKKET
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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