PHP Web Fundamentals
Redirecting to a Different Location
Problem
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.Solution
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:header('Location: http://www.example.com/confirm.html');
exit();
Discussion
Example Redirecting with query string variablesheader('Location: http://www.example.com/?monkey=turtle');
exit();
Redirect URLs must include the protocol and hostname. They cannot be just a pathname.
Example shows a good Location header and a bad one.
Example Good and bad Location headers
// 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, it will immediately POST the form that is included.
Example Redirecting via a posted form
<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 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.
No comments:
Post a Comment