?
Solved

Prevent resend of form info on refresh

Posted on 2003-11-15
9
Medium Priority
?
1,155 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
Don't Cry: How Liquid Web is Ensuring Security

WannaCry is just the start. Read how Liquid Web is protecting itself and its customers against new threats.

 
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 120 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: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying 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

This article demonstrates how to create a simple responsive confirmation dialog with Ok and Cancel buttons using HTML, CSS, jQuery and Promises
Originally, this post was published on Monitis Blog, you can check it here . Websites are getting bigger and more complicated by the day. Video, images and custom fonts are all great for showcasing your product or service. But the price to pay in…
In this tutorial viewers will learn how to code links for mobile sites that, once clicked, send a call or text to a specified number. For a telephone link (once clicked, calls a number), begin with a normal "<a href=" link tag. For the href, specify…
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 …
Suggested Courses

762 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