Solved

php redirect header conditional querystring

Posted on 2012-03-30
3
542 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
Learn the basics of lists in Python. Lists, as their name suggests, are a means for ordering and storing values. : Lists are declared using brackets; for example: t = [1, 2, 3]: Lists may contain a mix of data types; for example: t = ['string', 1, T…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

635 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