user3915152
user3915152

Reputation: 15

Is it possible for a page to know that it has been redirected to using header()?

I'm creating a form. There is some server-side validation being executed in a php file separate from the html file containing the form. If the validation fails, I want to redirect back to the original html page with a error message saying what went wrong.

Right now, I am able to successful validate and redirect back to the html page with header(), but I'm not sure how to create and place the error message. Is it possible to check at the top of the html page with php if it's been redirected to through header()? If so, that would solve the problem...

Thanks!

Upvotes: 1

Views: 112

Answers (5)

As @Mark wrote, you can send a message in a variable by the url in your header() (I mean url + "?variable=$variable") and capture the message in your page (now php page) by $_GET. The message will depend on your validation

Of course you can check: https://stackoverflow.com/a/872522/2737474 (@Jrgns) Different ways to pass one variable between pages.


In my opinion, you must be careful in choose one of those:

-If you would use one value for many pages (keeping in mind it would be store on server), it would be better to use SESSION.

-If you would use one value for only two pages, it would be better to use GET or POST (depending on your situation, url/form).

-If you would use one value for many pages and want to keep it between sessions (keeping in mind it would be store on client), it would be better to use COOKIE.

Upvotes: 0

VeeeneX
VeeeneX

Reputation: 1578

As many clever users wrote you have several methods how to achive this (I won't write all of these):

1st Use sessions check Daniel's answer

2nd Use GET check Sanket Shembekar's answer

3rd Use rZaaaa's answer, but you can enchant it :D


Enchant:

Page 1

header('error: true');

Page 2

print_r(headers_list()); //and find your error

Upvotes: 0

Daniel
Daniel

Reputation: 128

You should set a variable using PHP sessions.

Form page

session_start();
$_SESSION["formerror"] = "Error code here";
header("Location: http://www.example.com");

Redirected to page

session_start();
$errorcode = $_SESSION["formerror"];
// Now convert the error code to something readable and print it out if needed.

IMO this is much cleaner than a GET variable.

Upvotes: 1

Sanket Shembekar
Sanket Shembekar

Reputation: 298

You can do this with using $_GET[] method

If validation is successful then redirect to url like

form.php?status=1 // 1 for success 

If validation is failed then redirect to

form.php?status=0 // 0 for fail

In form.php which is your form page.

use simple if-else condition

if(isset($_GET['status']))
{
  if($_GET['status']==0)
    echo'something went wrong';
 //else nothing
 }

Upvotes: 0

Reza
Reza

Reputation: 880

there are several methods to do this i think.

1 add get parameters like:

<input type="hidden" name="formsent" value="1" />

then add method get to your <form>

when you redirect from the other page,, the get would be in the link so you could send it back

header("Location: http://localhost/yourform.php/?{$_GET['formsent']}");

or you could do the validation in the post

if (isset($_POST) && !empty($_POST)) {
do stuff here.. if all is ok go to next page otherwise show errors
}

or you could add a var into a session using $_SESSION['formsent'] = 1 after the post then u could check that also.

its up 2 u

Upvotes: 1

Related Questions