Solved

php redirect header conditional querystring

Posted on 2012-03-30
3
529 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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
It is a general practice to get rid of old user profiles on a computer  in a LAN environment. As I have been working with a company in a LAN environment where users move from one place to some other place at times. This will make many user profil…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

758 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now