Avatar billede acmed Nybegynder
17. november 2003 - 13:44 Der er 12 kommentarer og
1 løsning

Slette submittede variabler

Hvis bruger reloader en side (F5) i browseren, bliver en submittet form sendt igen. Dvs. at hvis man har et PHP script, der indsætter variable i en database, vil den gøre det flere gange, og så kommer der jo til at stå det samme i databasen flere gange.

Er der en måde i PHP hvor man kan slette "cachen" fra den submittede form når den er blevet sendt første gang?

(håber at dette giver mening)
Avatar billede erikjacobsen Ekspert
17. november 2003 - 13:53 #1
Ja, umiddelbart efter din "INSERT..." redirecter du til den side, der siger
"tak" til brugeren (viser han resultetet):

  header("Location: tak.php");
Avatar billede xyborx Nybegynder
17. november 2003 - 13:59 #2
Hvis formularen er blevet POST'ed kan du ganske simpelt redirecte den den nuværende side:

header('Location: http'.($_SERVER['HTTPS']=='on?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI');
Avatar billede acmed Nybegynder
17. november 2003 - 13:59 #3
Det er bare lidt problematisk, for brugeren bliver sendt til en takkeside der ligger under et punkt der er valgt i en menu.
For at komme til dette punkt skal der først submittes menu=5 (f.x.) før man kommer til ovennævnte form.

Ergo skulle jeg skrive noget i stil med header("Location: index.php?menu=5"); og så vil der jo stå en variabel i adresselinjen.
Jeg er ikke så glad for variabler i adresselinjen (jeg poster altid mine variabler) - jeg synes de kan være svære at "komme af med igen".

Kan det ikke lade sig gøre helt at slette de postede variabler når jeg har brugt dem?
Avatar billede xyborx Nybegynder
17. november 2003 - 14:07 #4
Jo.. Enten kan du lave en ny POST-formular, hvor du kun medtager de variabler du ønsker at beholde, eller også laver du en GET vha. en location header, hvilket vil "slette" alle POST variabler.

En lille rettelse til mit header forslag, så den ikke kommer med en notice hvis $_SERVER['HTTPS'] ikke er sat:
header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI');
Avatar billede xyborx Nybegynder
17. november 2003 - 14:10 #5
Hov.. Der mangler lige en appostrof umiddelbart efter on:
=='on?'s':''
rettes til
=='on'?'s':''
Avatar billede erikjacobsen Ekspert
17. november 2003 - 14:15 #6
Hvis du vil acceptere at der kommer den der kedelige "Box" ved tryk på F5,
men at data ikke indsættes mere end een gang, kan du bare når brugeren modtager
formen tildele den en lang tilfældig streng og så registrere (måske i en
ny tabel) når den har været brugt. Anden gang kigger du i tabellen, og hvis
den er der, undlader du indsættelsen.

Men ellers er redirect, evt variabler i adresselinie (eller sessionvariable)
måden at gøre det på.
Avatar billede acmed Nybegynder
17. november 2003 - 18:39 #7
Det lyder fornuftigt det du skriver erikjacobsen.
Xyborx - jeg er ikke helt sikker på hvad din header kommando gør - er det meningen jeg skal køre den, når jeg har behandlet brugerens data efter at han har postet dem?
Avatar billede xyborx Nybegynder
18. november 2003 - 08:12 #8
Jeps
Den header svarer til refresh/F5 uden POST variabler, men bevarer eventuelle GET variabler (dem i url'en). Jeg vil tro der bruges noget i den retning her på eksperten, når man sender en besked.
Avatar billede erikjacobsen Ekspert
18. november 2003 - 13:33 #9
Det er præcis det der sker her. Selv om URL-en ser lidt pænere ud er det
essentielt det samme som  .../spm.php?id=428641, og de anvender en
redirect efter POST. Kigger man i koden kan man se at action for den <form>
man indtaster i går til /respons.php med POST, mens det efterfølgende er
.../spm/428641 man ser i URLen
Avatar billede xyborx Nybegynder
18. november 2003 - 15:50 #10
Så er det jo ikke _præcis_ det samme der sker her ;) Det der sker her er nok nærmere:
header('Location: '.(isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'http://'.$_SERVER['HTTP_HOST'].'/'));
Den redirecter til forrige side, dvs ".../spm.php?id=428641" istedet for ".../respons.php".
Avatar billede erikjacobsen Ekspert
18. november 2003 - 17:02 #11
Nej, det gør den ikke. Her aflæser den nummeret på det aktuelle
spørgsmål i et hidden felt i formen.
Avatar billede acmed Nybegynder
02. januar 2004 - 11:39 #12
Undskyld jeg ikke lige har været på spørgsmålet længe.
Brugte en kombination af det I beskrev - deler pointene imellem jer (erikjacobsen læg et svar)...
Takker!
Avatar billede acmed Nybegynder
15. september 2004 - 14:37 #13
Lukker...
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