header location delay

I have the following php code which I want to add a delay too:

<?php
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

The above code happens too fast so I can’t see the message:

I have tried:

<?php
    sleep(5);
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

This doesn’t display the message either, but it does sleep for 5 seconds, which is just a waste of time.

How do I get it to display a message for 5 second before redirecting?

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You cannot do this with a HTTP location redirect, as this redirect will happen as soon as the browser gets the header. Instead, use a refresh redirect in the header:

header( "Refresh:5; url=http://www.example.com/page2.php", true, 303);

This should work on modern browsers, however it is not standardized, so to get the equivalent functionality would be do use a meta refresh redirect (meaning you’d have to output a full HTML too):

<meta http-equiv="refresh" content="5;url=http://www.example.com/page2.php"> 

From the Wikipedia page:

Used in redirection, or when a new resource has been created. This
refresh redirects after X seconds. This is a proprietary, non-standard
header extension introduced by Netscape and supported by most web
browsers.

Solution 2

Do the redirect using client-side scripting:

<script>
window.setTimeout(function() {
    window.location = 'page2.php';
  }, 5000);
</script>
<p>Message has been sent.</p>

Solution 3

You have to modify your code like this:

<?php

    echo "Message has been sent.";
    sleep(5);
    header("Location: page2.php", true, 303);
    exit;
?>

Solution 4

You won’t be able to see the message if you’re using a header(Location) redirect. In fact, that redirect shouldn’t work at all since output starts before the headers are sent. Instead, you should echo a meta tag refresh with a delay, like this
echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';


which will have a delay of five seconds. Alternatively, (and more properly) you could output a JS redirect, as the meta refresh tag is deprecated.

Solution 5

i don’t know if it helps but as i was dealing with the same issue in a form which need to be clean after the submission of the message, i found this answer that explains that you could change the value input to be empty.

This is the answer:
How do I reset the value of a text input when the page reloads?

and this is how i fix my issue, using my class .form-control

$(document).ready(function() {
   $(".form-control").val('');
});

Solution 6

header( "Refresh:time; url='filelocation'");

Solution 7

This is what worked for me… I’m using the latest PHP version 7.3.3 on WAMPP for Windows…

<?php

$name = $_POST['name'] ?? null; 

if(empty(trim($name))){
    header("location: http://localhost/testsite/index.php");
}

echo 'Greetings '. $_POST['name'].', how can I help you?';

echo '<meta http-equiv="refresh" content="5;URL=\'http://localhost/testsite/index.php\'">';

I hope this helps.

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply