Search code examples
phppostpost-redirect-get

Post/Redirect/Get for a form posting to itself


I would like to implement the Post/Redirect/Get pattern in a page that will post to itself.

The form is part of an MVC application I am building at the moment, and the form fields are generated in php.

The form resides here: http://site.com/mycontroller/myaction/

Here's the relevant code for "myaction" (note that a session has already been started, so I can read and write from $_SESSION):

public function myaction(){



 $login = $_POST['comment'];

    if(isset($comment)){
       //I am not doing any real checking here as I am just testing the redirect. Just checking to see if a value was supplied to the comment text input.
       $_SESSION['test'] = 'SUCCESS';

       //Insert the comment here (into some database).

       header("Location: http://site.com/mycontroller/myaction/", 302);
       exit();

       echo "<BR>Thanks for commenting! <BR>";
    }else{
       //Show the form here.
       //The form posts to itself, so the action looks like: <form action="" method="POST">
    }
}

The above code works fine, if the user refreshes or uses the back button, he is not asked to repost the data by the browser.

The problem is that I would like to display a message that says "Thanks for commenting" when the comment has been inserted. At the same time, if they provided an empty comment, I would like to display the form and a message that says "Please enter a comment!".

How can I go about implementing these 2 requirements?

Cheers :)


Solution

  • There are 3 possible solutions

    1. Forget PRG and go for AJAX
    2. as heximal said
    3. write your messages into session

    For the error message you could show it in place, without redirect. It has an disadvantage of asking a user to reload a page if they fail to fill out the form finally, however it is often considered negligible.