Solved

Prevent resend of form info on refresh

Posted on 2003-11-15
9
1,151 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Expert Comment

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


Cheers,
Exile_4
0
 
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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this. Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it i…
This article describes how to create custom column layout styles for Bootstrap. The article uses 5 columns to illustrate the concept, but the principle can be extended to any number of columns.
In this tutorial viewers will learn how to style transparent/translucent elements using alpha transparency in CSS Start with a normal styled element, such as a div.: Define its "background-color" property as "rgba (255, 255, 255, .5): The numbers in…
In this tutorial viewers will learn how to embed videos in a webpage using HTML5. Ensure your DOCTYPE declaration is set to HTML5: "<!DOCTYPE html>": Use the <video> tag to insert a video. Define the src as the URL of your video; this is similar to …

717 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