PHP Form Post/Redirect/Get Header Location Error

842 Views Asked by At

I have a simple form that I've made to help me learn php. I'm using my local host server to host the php file (form.php). However, when I refresh the page it resubmits the form, I know I can use the post/redirect/get method to negate this problem. Except implementing the header('Location: form.php'); hasn't been working, if you could take a look at the code- and tell me what I'm doing wrong, that would be much appreciated.

Code example i.e without header('Location: form.php');

<?php 
if (empty($_POST) === false) {
    echo '<pre>', print_r($_POST, true), '</pre>';
    }
?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Form</title>
  </head>
<body>

<form action="form.php" method="post">
  <p>
    <label for="name">Name:</label><br>
    <input type="text" name="name" id="name"><br>
  </p>
  <p>
    <label for="email">Email:</label><br>
    <input type="text" name="email" id="email"><br>
  </p>
  <p>
    <label for="message">Message:</label><br>
    <textarea name="message" id="message"></textarea>
  </p>
  <p>
    <input type="submit" value="submit">
  </p>
</form>

This is the result...

Screen Shot without header location

enter image description here

then I add:

header('Location: form.php');

And I get this...

enter image description here

1

There are 1 best solutions below

8
On

To prevent a form from resubmitting on page refresh, two methods are used:

Method 1: Use AJAX + Redirect

Submit your form using AJAX and then redirect to another page using JQuery.

Method 2: Reload the page

Refresh the page using Javascript.

Your code should be like this:

    <?php 
        if (!empty($_POST)) {
            echo '<pre>', print_r($_POST, true), '</pre>';
            echo '<script type="text/javascript"> location.reload();</script>';
        }
    ?>

    <!DOCTYPE html>
    <html>
       <head>
         <meta charset="utf-8">
         <title>Form</title>
       </head>
       <body>

        <form action="form.php" method="post">
          <p>
            <label for="name">Name:</label><br>
            <input type="text" name="name" id="name"><br>
          </p>
          <p>
            <label for="email">Email:</label><br>
            <input type="text" name="email" id="email"><br>
          </p>
          <p>
            <label for="message">Message:</label><br>
            <textarea name="message" id="message"></textarea>
          </p>
          <p>
            <input type="submit" value="submit">
          </p>
        </form>
       </body>
    </html>