Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple PHP Post-Redirect-Get code example

Tags:

php

I have found many sites that describes PRG, but no simple PHP code example.


Here's what I implemented:

  1. The form.php has an action: validate.php.
  2. The validate.php is never seen by the user; if validates all $_GET and, if valid writes it to database and generates the HTML of a confirmation page / if not valid, it generates the HTML of an error page explaining what is wrong.
  3. Whichever HTML is generated get stored in a $_SESSION variable and then validate.php calls header('Location: <as appropriate>);.
  4. The submitted.php of invalid_input.php (in case the user reads the URL) consists only of echo $_SESSION['form_html'];.

That seems to me like protection against both page reload and back button problems.

Did I goof by trying to reinvent the wheel?

like image 833
Mawg says reinstate Monica Avatar asked Nov 10 '10 09:11

Mawg says reinstate Monica


People also ask

Is redirect a GET or POST?

POST: A form is sent to the server with a post-request and an entry in the database is changed. Redirect: After a post request, the correct webpage with the changed data is delivered to the client using the redirect instruction (HTTP 303). GET: The client requests a confirmation page.

How do you use a PRG pattern?

With PRG the browser ends up making two requests. The first request is a POST request and is typically used to modify data. The server responds with a Location header in the response and no HTML in the body. This causes the browser to be redirected to a new URL.


1 Answers

Simplest scenario:

if ($_POST) {    // Execute code (such as database updates) here.     // Redirect to this page.    header( "Location: {$_SERVER['REQUEST_URI']}", true, 303 );    exit(); } 

Use REQUEST_URI. Do not use PHP_SELF as in most CMS systems and frameworks PHP_SELF would refer to /index.php.

like image 139
Hannes Avatar answered Sep 23 '22 20:09

Hannes