Solved

php redirect header conditional querystring

Posted on 2012-03-30
3
536 Views
Last Modified: 2012-03-30
(I am a beginner in php)

I can set up a redirect that works.
<?php
header("Location: http://www.MyWebsite.org/SomePage.php");
## more code here 
?>

Open in new window

...but what I want to do is to redirect based on conditions in the code
and
fill-in the URL's querystring variables:
<?php
require_once "Mail.php";
include_once "MyConnect.php";

## create and assign default values to 3 variables:
$successful=FALSE;
$redirt=99;
$redirm=99;

## processing code here
## variables would be the querystring values

if(blablabla)
	{
	$successful=FALSE;
	$redirt=42;
	$redirm=31;
	}
else
	{
	if(something)
		{
		$successful=TRUE;
		$redirt=4;
		$redirm=2;
		}
	else
		{
		$successful=TRUE;
		$redirt=28;
		$redirm=13;
		}
   }

## ok, now, use the variables in the querystring AND use the correct header redirect destination:

if(!$successful)
{
header("Location: http://www.MyWebsite.org/SignUpPage.php?paratitle=".$redirt."&msgbody=".$redirm."");
exit();
}
else
{
header("Location: http://www.MyWebsite.org/MessagePage?paratitle=".$redirt."&msgbody=".$redirm."");
exit();
}

Open in new window


but I am getting the dreaded error:
"Warning: Cannot modify header information - headers already sent by..."

I understand that I cannot send anything to a browser before calling the "header" function. What I think that means in that I cannot use "echo" anywhere on the page. Or maybe I can have an echo on the page, but if it is invoked, the redirect will not work and I'll get the error.

My page is a processing page, all php, no HTML.  I know that MyConnect.php is strictly php, no HTML, but I am not sure about the Mail.php file (maybe that is the problem.)

So, is this doable? If yes, is my coding problem obvious?

Thanks!

Dennis
0
Comment
Question by:dtleahy
3 Comments
 
LVL 15

Accepted Solution

by:
StingRaY earned 450 total points
ID: 37786821
It's not only HTML that may cause such warning, but "new line" character also does.
You can use output buffering to avoid this problem.

<?php
ob_start(); // start buffering
require_once "Mail.php";
include_once "MyConnect.php";

## create and assign default values to 3 variables:
$successful=FALSE;
$redirt=99;
$redirm=99;

## processing code here
## variables would be the querystring values

if(blablabla)
	{
	$successful=FALSE;
	$redirt=42;
	$redirm=31;
	}
else
	{
	if(something)
		{
		$successful=TRUE;
		$redirt=4;
		$redirm=2;
		}
	else
		{
		$successful=TRUE;
		$redirt=28;
		$redirm=13;
		}
   }

## ok, now, use the variables in the querystring AND use the correct header redirect destination:

ob_end_clean(); // end buffering and empty the buffer

if(!$successful)
{
header("Location: http://www.MyWebsite.org/SignUpPage.php?paratitle=".$redirt."&msgbody=".$redirm."");
exit();
}
else
{
header("Location: http://www.MyWebsite.org/MessagePage?paratitle=".$redirt."&msgbody=".$redirm."");
exit();
}

Open in new window

0
 
LVL 14

Assisted Solution

by:Scott Madeira
Scott Madeira earned 50 total points
ID: 37786924
One thing to try would be to go into Mail.php and MyConnect.php and remove the ?>  from the end of each file.  If there is whitespace after the ?> in the file you will get this error.

Also, if there is any output from those files echoed to the screen you will get that problem too.
0
 

Author Comment

by:dtleahy
ID: 37787211
Thanks to StingRay and smadeira for the rapid replies.

StingRay nailed it:
ob_start(); // start buffering
worked perfectly. Thanks! I'll have to read-up on the ob_start() function, and see what it does.

I'll award 450 of the 500 points to StingRay, and 50 to smadeira. So,smadeira, the php closing tag is optional?

The Mail.php file is the one that would be on the server environment when the hosting company loaded php. I assume it is all php functions, but you never know. I was really hoping that I did not have to get a copy of Mail.php from the server environment, and possibly recreate a version with no output.

Thanks again!

Dennis
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

These days socially coordinated efforts have turned into a critical requirement for enterprises.
Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question