How do i stop resubmission when a page is refreshed php?

In my solution, first of all, detect each form input is received and saved by the database properly. If it is a successful attempt, then execute the success function to refresh… 

How do i stop resubmission when a page is refreshed php?

In my solution, first of all, detect each form input is received and saved by the database properly. If it is a successful attempt, then execute the success function to refresh the page without resubmitting the form by printing a script in PHP as you can inspect below.

In my solution, first of all, detect each form input is received and saved by the database properly. If it is a successful attempt, then execute the success function to refresh the page without resubmitting the form by printing a script in PHP as you can inspect below.

  1. Home
  2. php - How to prevent form resubmission when page is refreshed (F5 / CTRL+R)

177 votes

23 answers

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Get the solution ↓↓↓

I have a simple form that submits text to my SQL table. The problem is that after the user submits the text, they can refresh the page and the data gets submitted again without filling the form again. I could redirect the user to another page after the text is submitted, but I want users to stay on the same page.

I remember reading something about giving each user a unique session id and comparing it with another value which solved the problem I am having but I forgot where it is.

2022-02-17




594

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

I would also like to point out that you can use a javascript approach,window.history.replaceState to prevent a resubmit on refresh and back button.

<script>
    if ( window.history.replaceState ) {
        window.history.replaceState( null, null, window.location.href );
    }
</script>

Proof of concept here: https://dtbaker.net/files/prevent-post-resubmit.php (Link no longer works)

I would still recommend a Post/Redirect/Get approach, but this is a novel JS solution.

Undefined answered

2022-02-17

Link to answer




327

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Use the Post/Redirect/Get pattern. http://en.wikipedia.org/wiki/Post/Redirect/Get

With my website, I will store a message in a cookie or session, redirect after the post, read the cookie/session, and then clear the value of that session or cookie variable.

Undefined answered

2022-02-17

Link to answer




409

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

You can prevent form resubmission via a session variable.

First you have to setrand() in a textbox and$_SESSION['rand'] on the form page:

<form action="" method="post">
  <?php
   $rand=rand();
   $_SESSION['rand']=$rand;
  ?>
 <input type="hidden" value="<?php echo $rand; ?>" name="randcheck" />
   Your Form's Other Field 
 <input type="submit" name="submitbtn" value="submit" />
</form>

After that check$_SESSION['rand'] with textbox$_POST['randcheck'] value like this:

if(isset($_POST['submitbtn']) && $_POST['randcheck']==$_SESSION['rand'])
{
    // Your code here
}

Make sure you start the session on every file you are using it withsession_start()

Undefined answered

2022-02-17

Link to answer




750

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

This method works for me well, and I think this is the simplest one to do this job.

The general idea is to redirect the user to some other pages after the form submission, which would stop the form resubmission on page refresh. Still, if you need to hold the user on the same page after the form is submitted, you can do it in multiple ways, but here I am describing the JavaScript method.


JavaScript Method

This method is quite easy and blocks the pop up asking for form resubmission on refresh once the form is submitted. Just place this line of JavaScript code at the footer of your file and see the "magic".

<script>
if ( window.history.replaceState ) {
  window.history.replaceState( null, null, window.location.href );
}
</script>

Undefined answered

2022-02-17

Link to answer




792

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

I use this javascript line to block the pop up asking for form resubmission on refresh once the form is submitted.

if ( window.history.replaceState ) {
  window.history.replaceState( null, null, window.location.href );
}

Just place this line at the footer of your file and see the magic

Undefined answered

2022-02-17

Link to answer




63

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

You should really use a Post Redirect Get pattern for handling this but if you've somehow ended up in a position where PRG isn't viable (e.g. the form itself is in an include, preventing redirects) you can hash some of the request parameters to make a string based on the content and then check that you haven't sent it already.

//create digest of the form submission:

    $messageIdent = md5($_POST['name'] . $_POST['email'] . $_POST['phone'] . $_POST['comment']);

//and check it against the stored value:

    $sessionMessageIdent = isset($_SESSION['messageIdent'])?$_SESSION['messageIdent']:'';

    if($messageIdent!=$sessionMessageIdent){//if its different:          
        //save the session var:
            $_SESSION['messageIdent'] = $messageIdent;
        //and...
            do_your_thang();
    } else {
        //you've sent this already!
    }

Undefined answered

2022-02-17

Link to answer




173

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

When the form is processed, you redirect to another page:

... process complete....
header('Location: thankyou.php');

you can also redirect to the same page.

if you are doing something like comments and you want the user to stay on the same page, you can use Ajax to handle the form submission

Undefined answered

2022-02-17

Link to answer




928

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

I found next workaround. You may escape the redirection after processingPOST request by manipulating object.

So you have the HTML form:

<form method=POST action='/process.php'>
 <input type=submit value=OK>
</form>

When you process this form on your server you instead of redirecting user to/the/result/page by setting up theLocation header like this:

$cat process.php
<?php 
     process POST data here
     ... 
     header('Location: /the/result/page');
     exit();
?>

How do i stop resubmission when a page is refreshed php?

After processingPOSTed data you render small<script> and the result/the/result/page

<?php 
     process POST data here
     render the <script>         // see below
     render `/the/result/page`   // OK
?>

The<script> you should render:

<script>
    window.onload = function() {
        history.replaceState("", "", "/the/result/page");
    }
</script>

The result is:

How do i stop resubmission when a page is refreshed php?

as you can see the form data isPOSTed toprocess.php script.
This script processPOSTed data and rendering/the/result/page at once with:

  1. no redirection
  2. no rePOST data when you refresh page (F5)
  3. no rePOST when you navigate to previous/next page through the browser history

UPD

As another solution I ask feature request the Mozilla FireFox team to allow users to setupNextPage header which will work likeLocation header and makepost/redirect/get pattern obsolete.

In short. When server process formPOST data successfully it:

  1. SetupNextPage header instead ofLocation
  2. Render the result of processingPOST form data as it would render forGET request inpost/redirect/get pattern

The browser in turn when see theNextPage header:

  1. Adjustwindow.location withNextPage value
  2. When user refresh the page the browser will negotiateGET request toNextPage instead of rePOST form data

I think this would be excelent if implemented, would not?=)

Undefined answered

2022-02-17

Link to answer




84

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

  1. Use header and redirect the page.

    header("Location:your_page.php"); You can redirect to same page or different page.

  2. Unset $_POST after inserting it to Database.

    unset($_POST);

Undefined answered

2022-02-17

Link to answer




790

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

A pretty surefire way is to implement a unique ID into the post and cache it in the

<input type='hidden' name='post_id' value='".createPassword(64)."'>

Then in your code do this:

if( ($_SESSION['post_id'] != $_POST['post_id']) )
{
    $_SESSION['post_id'] = $_POST['post_id'];
    //do post stuff
} else {
    //normal display
}

function createPassword($length)
{
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;

    while ($i <= ($length - 1)) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}

Undefined answered

2022-02-17

Link to answer




129

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Just redirect it to the same page after making the use of form data, and it works. I have tried it.

header('location:yourpage.php');

Undefined answered

2022-02-17

Link to answer




292

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

A refined version of Moob's post. Create a hash of the POST, save it as a session cookie, and compare hashes every session.

// Optionally Disable browser caching on "Back"
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Expires: Sun, 1 Jan 2000 12:00:00 GMT' );
header( 'Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT' );

$post_hash = md5( json_encode( $_POST ) );

if( session_start() )
{
    $post_resubmitted = isset( $_SESSION[ 'post_hash' ] ) && $_SESSION[ 'post_hash' ] == $post_hash;
    $_SESSION[ 'post_hash' ] = $post_hash;
    session_write_close();
}
else
{
    $post_resubmitted = false;
}

if ( $post_resubmitted ) {
  // POST was resubmitted
}
else
{
  // POST was submitted normally
}

Undefined answered

2022-02-17

Link to answer




790

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Basically, you need to redirect out of that page but it still can make a problem while your internet slow (Redirect header from serverside)

Example of basic scenario :

Click on submit button twice

Way to solve

  • Client side

    • Disable submit button once client click on it
    • If you using Jquery : Jquery.one
    • PRG Pattern
  • Server side

    • Using differentiate based hashing timestamp / timestamp when request was sent.
    • Userequest tokens. When the main loads up assign a temporary request tocken which if repeated is ignored.

Undefined answered

2022-02-17

Link to answer




979

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

How to prevent php form resubmission without redirect. If you are using $_SESSION (after session_start) and a $_POST form, you can do something like this:

if ( !empty($_SESSION['act']) && !empty($_POST['act']) && $_POST['act'] == $_SESSION['act'] ) {
  // do your stuff, save data into database, etc
}

In your html form put this:

<input type="hidden" id="act" name="act" value="<?php echo ( empty($_POST['act']) || $_POST['act']==2 )? 1 : 2; ?>">
<?php
if ( $_POST['act'] == $_SESSION['act'] ){
    if ( empty( $_SESSION['act'] ) || $_SESSION['act'] == 2 ){
        $_SESSION['act'] = 1;
    } else {
        $_SESSION['act'] = 2;
    }
}
?>

So, every time when the form is submitted, a new act is generated, stored in session and compared with the post act.

Ps: if you are using an Get form, you can easily change all POST with GET and it works too.

Undefined answered

2022-02-17

Link to answer




73

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

After inserting it to database, call unset() method to clear the data.

unset($_POST);

To prevent refresh data insertion, do a page redirection to same page or different page after record insert.

header('Location:'.$_SERVER['PHP_SELF']);

Undefined answered

2022-02-17

Link to answer




187

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

The $_POST['submit'] variable would not exist on initial loading of page, and curl can be run only if below condition is true.

if($_POST['submit'] == "submit"){

// This is where you run the Curl code and display the output
  $curl = curl_init();



//clear $post variables after posting
$_POST = array();

}

Undefined answered

2022-02-17

Link to answer




811

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Using the Post/Redirect/Get pattern from Keverw answer is a good idea. However, you are not able to stay on your page (and I think this was what you were asking for?) In addition, it may sometimes fail:

If a web user refreshes before the initial submission has completed because of server lag, resulting in a duplicate HTTP POST request in certain user agents.

Another option would be to store in a session if text should be written to your SQL database like this:

if($_SERVER['REQUEST_METHOD'] != 'POST')
{
  $_SESSION['writeSQL'] = true;
}
else
{
  if(isset($_SESSION['writeSQL']) && $_SESSION['writeSQL'])
  {
    $_SESSION['writeSQL'] = false;

    /* save $_POST values into SQL */
  }
}

Undefined answered

2022-02-17

Link to answer




988

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

As others have said, it is not possible to out of using post/redirect/get. But at the same time it is quite easy to do what you want to do server side.

In your POST page you simply validate the user input but do not act on it, instead you copy it into a SESSION array. You then redirect back to the main submission page again. Your main submission page starts by checking to see if the SESSION array that you are using exists, and if so copy it into a local array and unset it. From there you can act on it.

This way you only do all your main work once, achieving what you want to do.

Undefined answered

2022-02-17

Link to answer




670

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

I searched for solution to prevent resubmission in a huge project afterwards. The code highly works with $_GET and $_POST and I can't change the form elements behaviour without the risk of unforeseen bugs. So, here is my code:

<!-- language: lang-php -->
<?php

// Very top of your code:

// Start session:
session_start();

// If Post Form Data send and no File Upload
if ( empty( $_FILES ) && ! empty( $_POST ) ) {
    // Store Post Form Data in Session Variable
    $_SESSION["POST"] = $_POST;
    // Reload Page if there were no outputs
    if ( ! headers_sent() ) {
        // Build URL to reload with GET Parameters
        // Change https to http if your site has no ssl
        $location = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        // Reload Page
        header( "location: " . $location, true, 303 );
        // Stop any further progress
        die();
    }
}

// Rebuilt POST Form Data from Session Variable
if ( isset( $_SESSION["POST"] ) ) {
    $_POST = $_SESSION["POST"];
    // Tell PHP that POST is sent
    $_SERVER['REQUEST_METHOD'] = 'POST';
}

// Your code:
?><html>
    <head>
        <title>GET/POST Resubmit</title>
    </head>
    <body>

    <h2>Forms:</h2>
    <h2>GET Form:</h2>
    <form action="index.php" method="get">
        <input type="text" id="text_get" value="test text get" name="text_get"/>
        <input type="submit" value="submit">
    </form>
    <h2>POST Form:</h2>
    <form action="index.php" method="post">
        <input type="text" id="text_post" value="test text post" name="text_post"/>
        <input type="submit" value="submit">
    </form>
    <h2>POST Form with GET action:</h2>
    <form action="index.php?text_get2=getwithpost" method="post">
        <input type="text" id="text_post2" value="test text get post" name="text_post2"/>
        <input type="submit" value="submit">
    </form>
    <h2>File Upload Form:</h2>
    <form action="index.php" method="post" enctype="multipart/form-data">
        <input type="file" id="file" name="file">
        <input type="submit" value="submit">
    </form>

    <h2>Results:</h2>
    <h2>GET Form Result:</h2>
    <p>text_get: <?php echo $_GET["text_get"]; ?></p>
    <h2>POST Form Result:</h2>
    <p>text_post: <?php echo $_POST["text_post"]; ?></p>
    <h2>POST Form with GET Result:</h2>
    <p>text_get2: <?php echo $_GET["text_get2"]; ?></p>
    <p>text_post2: <?php echo $_POST["text_post2"]; ?></p>
    <h2>File Upload:</h2>
    <p>file:
    <pre><?php if ( ! empty( $_FILES ) ) {
            echo print_r( $_FILES, true );
        } ?></pre>
    </p>
    <p></p>
    </body>
    </html><?php
// Very Bottom of your code:
// Kill Post Form Data Session Variable, so User can reload the Page without sending post data twice
unset( $_SESSION["POST"] );

It only works to avoid the resubmit of $_POST, not $_GET. But this is the behaviour I need. The resubmit issue doesn't work with file uploads!

Undefined answered

2022-02-17

Link to answer




568

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

What Works For Me is :

if ( !refreshed()) {
   //Your Submit Here
        if (isset( $_GET['refresh'])) {
            setcookie("refresh",$_GET['refresh'], time() + (86400 * 5), "/");
        }

    }    
}


function refreshed()
{
    if (isset($_GET['refresh'])) {
        $token = $_GET['refresh'];
        if (isset($_COOKIE['refresh'])) {
            if ($_COOKIE['refresh'] != $token) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    } else {
        return false;
    }
}  


function createToken($length) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

?>

And in your Form

 <form  action="?refresh=<?php echo createToken(3)?>">



 </form>

Undefined answered

2022-02-17

Link to answer




880

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Thisform.php sample shows how to use PRG correct (when form is valid or not).

  • It redirects to the same page, only when form is valid and action was performed.
  • Redirection protects form from being resubmitted on page refresh.
  • It uses session to not loose success messages you want to show when form is valid.
  • There are two buttons for testing: "Valid submit", "Invalid submit". Try both and refresh page after that.
<?php
session_start();

function doSelfRedirect()
{
  header('Location:'.$_SERVER['PHP_SELF']);
  exit;
}

function setFlashMessage($msg)
{
  $_SESSION['message'] = $msg;
}

function getFlashMessage()
{
  if (!empty($_SESSION['message'])) {
    $msg = $_SESSION['message'];
    unset($_SESSION['message']);
  } else {
    $msg = null;
  }

  return $msg;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Validation primitive example.
  if (empty($_POST['valid'])) {
    $formIsValid = false;
    setFlashMessage('Invalid form submit');
  } else {
    $formIsValid = true;
  }

  if ($formIsValid) {
    // Perform any actions here.
    // ...

    // Cool!
    setFlashMessage('Form is valid. Action performed.');

    // Prevent form resubmission.
    doSelfRedirect();
  }
}
?>
<h2>Hello form</h2>

<?php if ($msg = getFlashMessage()): ?>
  <div><?= $msg ?></div>
<?php endif; ?>

<form method="post">
  <input type="text" name="foo" value="bar"><br><br>
  <button type="submit" name="invalid" value="0">Invalid submit</button>
  <button type="submit" name="valid" value="1">Valid submit</button>
</form>

Undefined answered

2022-02-17

Link to answer




632

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

if (($_SERVER['REQUEST_METHOD'] == 'POST') and (isset($_SESSION['uniq']))){
    if($everything_fine){
        unset($_SESSION['uniq']);
    }
}
else{
    $_SESSION['uniq'] = uniqid();
}

$everything_fine is the boolean result of form-validation. If the form is not validating then it shall be usually displayed again with a hint what to correct, so that the user can send it again. Therefore the $_SESSION['uniq'] is created again too if a corrected form is desired

Undefined answered

2022-02-17

Link to answer




264

votes

How do i stop resubmission when a page is refreshed php?

How do i stop resubmission when a page is refreshed php?

Answer

Solution:

Why not just use the$_POST['submit'] variable as a logical statement in order to save whatever is in the form. You can always redirect to the same page (In case they refresh, and when they hitgo back in the browser, the submit post variable wouldn't be set anymore. Just make sure your submit button has aname andid ofsubmit.

Undefined answered

2022-02-17

Link to answer




People are also looking for solutions of the problem: call to undefined function illuminate\encryption\openssl_cipher_iv_length()
Source

Share


Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.


Similar questions

Find the answer in similar questions on our website.

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.


About the technologies asked in this question

PHP

PHP (from the English Hypertext Preprocessor - hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites. The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/


JavaScript

JavaScript is a multi-paradigm language that supports event-driven, functional, and mandatory (including object-oriented and prototype-based) programming types. Originally JavaScript was only used on the client side. JavaScript is now still used as a server-side programming language. To summarize, we can say that JavaScript is the language of the Internet.
https://www.javascript.com/


JQuery

JQuery is arguably the most popular JavaScript library with so many features for modern development. JQuery is a fast and concise JavaScript library created by John Resig in 2006. It is a cross-platform JavaScript library designed to simplify client-side HTML scripting. Over 19 million websites are currently using jQuery! Companies like WordPress, Facebook, Google, IBM and many more rely on jQuery to provide a kind of web browsing experience.
https://jquery.com/


HTML

HTML (English "hyper text markup language" - hypertext markup language) is a special markup language that is used to create sites on the Internet. Browsers understand html perfectly and can interpret it in an understandable way. In general, any page on the site is html-code, which the browser translates into a user-friendly form. By the way, the code of any page is available to everyone.
https://www.w3.org/html/



Welcome to programmierfrage.com

How do i stop resubmission when a page is refreshed php?

programmierfrage.com is a question and answer site for professional web developers, programming enthusiasts and website builders. Site created and operated by the community. Together with you, we create a free library of detailed answers to any question on programming, web development, website creation and website administration.

Get answers to specific questions

Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.

Help Others Solve Their Issues

Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.

How do I stop confirmation resubmission in PHP?

If you are using form in header with this PHP code then you can prevent Confirm Form Resubmission error. That code usually is; header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); Now to fix it, simply delete ('no-store') from the header.

How do you prevent a form from submitting when the page is refreshed?

Use the preventDefault() method on the event object to prevent a page refresh on form submit in React, e.g. event. preventDefault() . The preventDefault method prevents the browser from issuing the default action which in the case of a form submission is to refresh the page.

How do I turn off confirmed resubmission?

How to Disable Confirm Form Resubmission Popup.
First, right-click the Google Chrome shortcut icon and choose the Properties option..
You will be able to open a dialog box and get a field named Target..
Now add this text to the target's end, "deactivate-prompt-on-repost" (no quotes)..
For me, the target is:.

How do I stop resending data on Refresh in laravel?

After pressing F5 the input is still displayed. Last updated 3 months ago. If your on the response to the post and you refresh it is going to resubmit, normal behavior. Redirect away to stop a resubmit.