tags:

views:

590

answers:

4

Hello. So I have this output on my page.. not understanding why I have it popping up. I'm new to php though, so maybe it's something easy to fix

-I have a header.php file, which includes all important info, as well has the banner of the page. This header.php is included on every page.

-I have it checking the session value to make sure user is allowed to be at a certain page. If user is not allowed to be there, I kick them back to login page

This is where the error comes up though. This is what I have:

include_once ("header.php");

if ($_SESSION['uid']!='programmer')
{       
header('Location: index.php');
echo 'you cannot be here';
exit;
}

The index that it is redirecting to also has the header. So is having these multiple header references giving me this error? I see no other way to do this, and it's driving me nuts!

+13  A: 

You cannot use header() once text has been output to the browser. As your header.php include presumably outputs HTML, header() cannot be used.

You can solve this in a couple ways:

  • Move the if statement above the header include (this won't work, as you've indicated in comments that header.php sets the uid session and other vital stuff).
  • Call ob_start() at the top of the script to buffer the output.
ceejayoz
Also note that unless you're buffering output, this error can be encountered by having even a single blank line (or space?) before the starting php tag, because even whitespace counts as output for the purposes of determining whether you can send headers.
Dathan
alright, so I added the include header AFTER the if statement, and that got rid of the error, however, now when I log in properly, I get redirected to the index.php no matter what.. why is that?URL: http://nait.jtlnet.com/~fpkj5v0r/index.phpUser: programmerPassword: prog123-this is now my code:<? if ($_SESSION['uid']!='programmer') { header('Location: index.php');echo 'you cannot be here';exit; } include_once ("header.php"); ?>
Marcus
And ya, thanks for the heads up Dathan, I read about the white space bug, and it doesn't appear to be that. I wish it were that easy!
Marcus
Is header.php responsible for the logic that authenticates the user and assigns the $_SESSION["uid"] value? If so, then your if statement is always interrogating the value of uid before it's set.
Dathan
+5  A: 

If the header.php file "has the banner", then it is presumably outputting some HTML content to the page.

You can't issue HTTP headers after you have outputted content.

David Dorward
+2  A: 

You cannot send any headers after sending any other content. A very likely culprit is extra whitespace after your closing ?> tag in your header.php. It's generally a good practice to omit the closing tag entirely in any script-only php files.

Your error should tell you exactly what line (and what file) is sending the output.

keithjgrant
A: 

Alright, so it's fixed...... not sure how though, maybe somebody can explain why this works all of a sudden.

This is my code:

    include_once ("header.php");
    if ($_SESSION['uid']!='programmer') 
    {  

    if(isset($_SESSION['uid'])) 
    {
    echo $_SESSION['uid'];
}            
    header('Location: index.php');
    exit;
    }

Let me repeat, it all works now! PHP... why do you work now?

Marcus