Solved

Prevent resend of form info on refresh

Posted on 2003-11-15
9
1,135 Views
Last Modified: 2007-12-19
I have a simple message system set up where as using a form information is inserted into a mysql database

The problem is if you refresh the page after having made a post it prompts the user to retry sending the information, is there anyway to prevent this? i was thinking along the lines of no cache but i wasnt sure if that would work with forms

thanks
0
Comment
Question by:HeadAcheMike
9 Comments
 

Expert Comment

by:ChikenDude911
ID: 9757524
ok so you have a message system set up right....but if you refresh the page after you have sent the post it tries to do it again, but you dont want it to do it again if the page is refreshed right...?

0
 
LVL 2

Author Comment

by:HeadAcheMike
ID: 9758138
yes correct
0
 
LVL 2

Author Comment

by:HeadAcheMike
ID: 9768366
...anyone ?
0
 
LVL 2

Expert Comment

by:exile_4
ID: 9770279
a snippet of your code might help here.


Cheers,
Exile_4
0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 
LVL 2

Author Comment

by:HeadAcheMike
ID: 9770498
im not sure it will because its just a general question related to all forms, i dont really want to post my code so il just tell you the methods im using

the forms action posts back to the same file (using PHP_SELF), i then get the data using $_POST and run an SQL query with the two posted fields (name and message) whereas they are inserted into the database.

the problem is if the user clicks refresh after having posted a message and then clicks retry on the dialog that appears then then data is resent to the page and therefore the query is run again causing a double entry in the database.

i therefore need to stop the data from being resent, is this possible?
0
 
LVL 1

Expert Comment

by:Witchazel
ID: 9774660
you can pull the table key out when you create the page then when you save to database save it under that key.  if that is taken then it has already been saved.

notice you would need a form page and a post page with this though.
0
 
LVL 2

Author Comment

by:HeadAcheMike
ID: 9774689
id really like to keep it all in the one file

i figured before using two files would solve this problem anyway because i would have to form action pointing to another file with the query and then use the meta refresh tag to redirect back to the index file. As i said though id like to keep it to one file so this wasnt an option
0
 
LVL 1

Accepted Solution

by:
Witchazel earned 30 total points
ID: 9776881
oh, one page

(psudoey)

if(we are posting)
     if(key doesnt exists in db)
          save row  
else
     get next key from db
end if

<form>
   <hidden name=key value=key>
</form>

so if you are not posting, you get the nextval from your db, if you are you save but never change the val

 but....

if you are unfortune enough not to have a oracle db (or sequencing) this might not be best for you because you have a high chance of dupping (unless your site is as active as mine :)

so you would have to be a bit tricky cas you dont want to display a bunch of blanks when you pull it out
first you would have to add nother column to your table for active/inactive

(psudoey)

if(we are posting)
     update tablename set active ='yes' .... where key=key
else
     insert into tablename (id,active) values (mynextid,'no')
end if

<form>
   <hidden name=key value=mynextid>
</form>


note when you pull from this table you will hafta do a where active ='yep'

-w
0
 
LVL 2

Expert Comment

by:smu95rp
ID: 10211137
I'm trying to find the same thing.

Anyone know any JavaScript that can empty the browser's cache of POSTed data so that subsequent refreshes fail to pass the data again?

It is, I suppose, possible to check for existence of a record before INSERTing it again, however I'd prefer to get JavaScript to redirect to some sort of display record page on refresh.

In the meantime I shall consider redirecting the browser to said page after the data has been posted to the database. I can use something like
"<SCRIPT>window.location.href='show-quote.php?quote_num=<?=$quote_num?>';</SCRIPT>"
in my page somewhere after the database has been updated so that the page in the browser isn't actually the one that the data was POSTed to.

I'll let you know how I get on with that, however if anyone has a better solution...

Rich
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
SASS allows you to treat your CSS code in a more OOP way. Let's have a look on how you can structure your code in order for it to be easily maintained and reused.
In this Micro Tutorial viewers will learn how to create navigation buttons that change on rollover, using CSS (Continuation of the CSS Image Sprite tutorial) Create a parent ID for all the list items       - Specify position: absolute and display: block…
In this tutorial viewers will learn how to embed an audio file in a webpage using HTML5. Ensure your DOCTYPE declaration is set to HTML5: : The declaration should display (CODE) HTML5 is supported by the most recent versions of all major browsers…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now