Avatar billede anderskj1 Nybegynder
21. januar 2003 - 17:15 Der er 9 kommentarer og
2 løsninger

Problem med at indsættelse af data i en DB fra form (PHP)

Mit problem er at jeg ikke kan undgå at få "dobbelt indsættelse" i min mysql DB når jeg trykker Refresh (F5)

Kan jeg ikke på en eller anden måde tømme min form helt ved refresh? Jeg har taget disse forholdsregler for indsættelse:
(PHP)
if ($message2 && $name)
{ //Indsæt i DB }
(/PHP)

Problemet er bar at det ikke virker. Felter SER tomme ud men er det åbenbart ikke. Har også firtlet med noget lign. if( isset(&Ok) ) { //indsæt i DB  }
Men det virker heller ikke. Min submit knap hedder Ok...

Nogen forslag?

Mvh
Anders
Avatar billede olebole Juniormester
21. januar 2003 - 21:56 #1
<ole>

Jo, felterne er helt tomme  :)
Når du trykker F5, refresher du siden - dvs, du kalder siden med de samme parametre, den blev kaldt med sidst.

Problemet kan du ikke løse med i HTML/JavaScript ... det er et PHP-problem. Du skal altid sammenligne den aktuelle query med den senest indsatte, hvis du vil undgå problemet.
Problemet var også oppe i dette spm: http://www.eksperten.dk/spm/303276 - godt nok en txt-chat, men problemet er nogenlunde det samme  :)

/mvh
</bole>
Avatar billede anderskj1 Nybegynder
22. januar 2003 - 00:45 #2
Hmmmm. Det var jo lidt sørgeligt. Hvade tængt på at tjekke for sidste indlæg men det er sgu lidt kluntet. Men jeg betragter svaret som....besvaret.

Takker :)  ---- :(
Avatar billede anderskj1 Nybegynder
22. januar 2003 - 00:49 #3
Hmmm. Dette er mit første indlæg på eksperten. Hvordan faen godkender jeg dit svar?
Avatar billede olebole Juniormester
22. januar 2003 - 01:34 #4
Det kan du først nu, hvor jeg har svaret  ;o)
Avatar billede miraculix Nybegynder
22. januar 2003 - 01:37 #5
Du kan også bare bruger http-headeren location i det script der gemmer dine data. Den kan du bruge til at videresende browseren til en anden side. Forløbet bliver således opbygget af 3 sider:

Formularside -> submit script der gemmer i DB -> resultat liste

Brugeren ser kun den første og den sidste side. Og trykker hun F5 når foløbet er færdigt er det kun resultatet der bliver opdateret. Formularen bliver IKKE resubmittet.

Lad os antage de tre filer hedder hhv. form.php, submit.php og result.php

I form php har du bl.a.:
<form action="submit.php">

I submit.php har du:
<Kode der indsætter data fra form>
header ("location: result.php\n\n");

(Bemærk der må ikke være noget html for "header" kaldet

I result.php har du:
<Kode der viser resultatet af indsættelsen>
Avatar billede olebole Juniormester
22. januar 2003 - 02:10 #6
I så fald bør du anbringe disse headers i dokumentet med formen. Ellers er du ligevidt, hvis der trykkes på Back-knappen og derefter F5:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

/mvh
Avatar billede miraculix Nybegynder
22. januar 2003 - 09:12 #7
Hmm. Det er da aldrig sket i de systemer jeg har lavet. Bemærk at jeg ikke snakker om <META REFRESH> tag'et, men om "location: " headeren.

Når man trykker back, ryger man tilbage til den side der indeholder formularen.
Avatar billede anderskj1 Nybegynder
23. januar 2003 - 00:44 #8
Hejsa. (lige først. Hvem skal jeg give point når jeg synes 50/50%?)
Når men det kan den der svare på dette "tillægsspørgsmål".

Kunne jeg omgåes problemet ved at indsætte selve input formen i et selvstændigt "popup" vindue som sætter data direkte ind i DB. Så på der på hovedesiden er et link til indsættelse + visning af resultat nedenunder.

Jeg er lidt newbie så jeg kan ikke helt gennemskue om det er en løsning.
Avatar billede miraculix Nybegynder
23. januar 2003 - 01:32 #9
Det vil ikke løse problemet rigtig, for der kommer jo også en side når du har submittet den, (den side vil så bare være i pop-upen) og så har du balladen igen.

Du kan ligeså godt vænne dig til at bruge den metode med header("location: xxx"), for det er den eneste der rigtig duer på web. (jvf. sprgs. http://exp.dk/spm/308617, og problemet med samtidighed som jeg nævner i http://www.eksperten.dk/spm/303276)

Giv du bare pointene til olebole, det tager jeg ikke så tungt, men jeg har faktisk set et spørgsmål hvor "stilleren" delte pointene mellem 3 svar. Jeg aner ikke hvordan det gøres..
Avatar billede anderskj1 Nybegynder
23. januar 2003 - 22:00 #10
Du fandt jeg selv ud af. Der er en option avanceret hvor man kan tildele antal ønsket point til dem der har svaret. 20 til Miraculix 10 til OleBole. Takker begge to og jeg vil kigge lidt på loction lidt dybere.
Avatar billede miraculix Nybegynder
23. januar 2003 - 22:25 #11
Tak for point.

Jeg har siden lavet et klip-bart eksempel i sprgsml:
http://www.eksperten.dk/spm/308632

Prøv at eksperimentere med det.
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