You want to automatically send a user to a new URL. For example, after successfully saving form data, you want to redirect a user to a page that confirms that the data has been saved.
Before any output is printed, use header() to send a Location header with the new URL, and then call exit() so that nothing else is printed:
1 2 |
header('Location: http://www.example.com/confirm.html'); exit(); |
To pass variables to the new page, include them in the query string of the URL, as in Example 8-11.
Example 8-11. Redirecting with query string variables
1 2 |
header('Location: http://www.example.com/?monkey=turtle'); exit(); |
Redirect URLs must include the protocol and hostname.
Example 8-12. Good and bad Location headers
1 2 3 4 5 |
// Good Redirect header('Location: http://www.example.com/catalog/food/pemmican.php'); // Bad Redirect header('Location: /catalog/food/pemmican.php'); |
The URL that you are redirecting a user to is retrieved with GET. You can’t redirect someone to retrieve a URL via POST.
With JavaScript, however, you can simulate a redirect via POST by generating a form that gets submitted (via POST) automatically. When a (JavaScript-enabled) browser receives the page in Example 8-13, it will immediately
POST the form that is included.
Example 8-13. Redirecting via a posted form
1 2 3 4 5 6 7 8 9 |
<html> <body onload="document.getElementById('redirectForm').submit()"> <form id='redirectForm' method='POST' action='/done.html'> <input type='hidden' name='status' value='complete'/> <input type='hidden' name='id' value='0u812'/> <input type='submit' value='Please Click Here To Continue'/> </form> </body> </html> |
The form in Example 8-13 has an id of redirectForm, so the code in the <body/> element’s onload attribute submits the form.
The onload action does not execute if the browser has JavaScript disabled. In that situation, the user sees a Please Click Here To Continue button.