Hello please help me troubleshooting this. i got this error in my login.. pleaaaaase. below is the error that prompts me when i login:

PHP Warning: Cannot modify header information - headers already sent by (output started at D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php:9) in D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php on line 71 PHP Warning: Cannot modify header information - headers already sent by (output started at D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php:9) in D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php on line 72 PHP Warning: Cannot modify header information - headers already sent by (output started at D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php:9) in D:\HostingSpaces\spindev\spindev.spinweb.ph\wwwroot\YPS\login\login.php on line 75 

Here is my code: please tell me what's going wrong. thanks. :)

<?php 
// Connects to your Database 
mysql_connect("spindev.spinweb.ph", "spindev_ypsuser", "yps123") or die(mysql_error()); 
mysql_select_db("spindev_ypsnew") or die(mysql_error()); 
//checks cookies to make sure they are logged in 
if(isset($_COOKIE['ID_my_site'])) 
{ 
$username = $_COOKIE['ID_my_site']; 
$pass = $_COOKIE['Key_my_site']; 
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error()); 
while($info = mysql_fetch_array( $check )) 
{ 
//if the cookie has the wrong password, they are taken to the login page 
if ($pass != $info['password']) 
{ header("Location: login.php"); 
} 
//otherwise they are shown the admin area 
else 
{ 
echo "Admin Area<p>"; 
echo "Your Content<p>"; 
echo "<a href=logout.php>Logout</a>"; 
} 
} 
} 
else 
//if the cookie does not exist, they are taken to the login screen 
{ 
header("Location: login.php"); 
} 
?>

:)

Recommended Answers

All 105 Replies

From first glance it looks like you've placed echo above the header location script.

Headers must be parsed before any HTML, and for some reason (Unknown by me, but I'm sure others can answer why) certain hosts don't like it when you place any HTML above header tags.

I would stick the HTML below the php code, specifically below the Header("Location: login.php") script.

Eg:

<?php
// Connects to your Database
mysql_connect("spindev.spinweb.ph", "spindev_ypsuser", "yps123") or die(mysql_error());
mysql_select_db("spindev_ypsnew") or die(mysql_error());
//checks cookies to make sure they are logged in
if(isset($_COOKIE['ID_my_site']))
{
    $username = $_COOKIE['ID_my_site'];
    $pass = $_COOKIE['Key_my_site'];
    $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
    while($info = mysql_fetch_array( $check ))
    {
        //if the cookie has the wrong password, they are taken to the login page
        if ($pass != $info['password'])
        { 
            header("Location: login.php");
        }
        //otherwise they are shown the admin area
        else
        {
            //echo "Admin Area<p>";
            //echo "Your Content<p>";
            //echo "<a href=logout.php>Logout</a>";
        }
    }
}
else
//if the cookie does not exist, they are taken to the login screen
{
    header("Location: login.php");
}
?>
<h1>Admin Area</h1>
<p>Your content</p>
<p><a href="logout.php">Logout</a>

I could be completely off the mark, since it is late. I'd suggest tweaking the order of your conditions so that if an error occurs the user is directed away from the page, otherwise the html at the end loads on a successful log in.

try placing this at the top of your page:
<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

commented: this post totally helped me. thank you! +0

Thanks to both of you. I have tried your solution JeniF and the login script works. Thanks a lot. I will try to implement your solutions as well WhiteLeo so that i do have lot of references if it works. Thank you very much again. :)

Really Thank you for your Valuable info.....

try placing this at the top of your page:
<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

_________________________________________________
Thank you so much JeniF. I have been receiving a similar error for days now, and have been unable to complete a class assignment. Popped your suggestion in, and it now works. My elation is directly correlated to my previous frustration, and I just wanted to take the time to say thanks. Have a good one.

(Incidentally, if you get the time, what exactly is the recommended code doing?)

(Incidentally, if you get the time, what exactly is the recommended code doing?)

ob_start() . Its turning on the output buffer. So any output is kept in the buffer. And ob_flush() is to flush the buffer :)

I had a problem with the "headers already sent" too at my http://www.maxi-pedia.com website. In my case, it was caused by a blank line at the beginning of one *.inc file. PHP seems to have problems with extra spaces here and there.

Check all your *.inc files to make sure you do not have closing ?> in any of them. Closing ?> is not needed in your *.inc files. Check all your *.php files to make sure you do not have blank lines at the beginning or at the end.

If you are working in a CMS, then it may be caused by some module, disable your modules one by one to find out which one causes this.

This can also be caused by UTF-8. If you have your website coded in ASCII and are saving your php files as UTF-8, it can cause this message. If your website and DB are UTF-8, you should be ok with saving php files as UTF-8 though.

Btw, this error message is related to output_buffering on/off in your php.ini. If you have output_buffering set to some cache, the server will allow to send headers with delay (or to modify them shortly after they are sent), and this error will not be tripped. But if you set output_buffering to 0 or not at all, then headers can be sent at only one moment, and if you have some bad code, it will trip this error message.

thanks to jenif that worked perfectly few - strange as i had had a site up for sometime and it nevr encountered the problem until recently

try placing this at the top of your page:
<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

I Googled on this problem and found your simple solution, JeniF. Because of you, I joined DaniWeb. Thought you should know that even 2 years later your reply is still helping people!

Thanks, JeniF!! And thanks DaniWeb!

John

1. As mentioned, header has to be before ANY html code. So, change the order of your code and try again.

2. Have you changed the hostname of the machine? Be sure the correct hostname is in the Hosts file.

John

P.S. Please be sure to let us know your solution, when you get this problem fixed.

try placing this at the top of your page:
<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

hi

thank you for you reply.that was really helpful. cd u plz tell me what actually the problem is. plz mail me at <EMAIL SNIPPED>
regards
charles

again. another thanks from me. been looking for whitespace to delete that wasn't there. many thanks

Was having this issue recently. Thanks for the suggestion ob_start()/ob_flush().

The UTF-8 problem for me was due to the implicit inclusion of the UTF 2 byte signature at the beginning of the file. This is used to give parsers a heads up about the encoding of the file. I guess my XAMPP php config is not sensitive to that marker and implicitly streams it off ahead of my <?php ?> tag.

Visual Studio 2008 has an advanced option to save the file without that signature. When I did this - all was well.

First of all, in my case, the problem was caused by using Microsoft Expression Web (Front Page replacement) to edit a php file.

Since the coding is UTF-8 it inserted the appropriate (invisible) character identifiers for UTF-8 at the beginning of the file (before the <?php). Now since they are invisible you can't edit them out unless you log in to your File Manager in C-Panel and edit them out from there where they are indeed visible and look a bit like a Chinese characters!

Thanks for the help, Worked! :P

Dears,

I am having the same headers warning.


Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 62

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 63

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 66

I tried the following

  1. ob_start() / ob_flush()
  2. checked the 1st and last line to see blank lines or strange characters
  3. changed the file type from UTF8 to ANSI

My website is divided into sections is separate files that are included in the main php file.

here is the index.php file:

<div id="templatemo_content">
    	<div id="templatemo_main_leftcol">
        	<div class="templatemo_leftcol_subcol">
            	<?php
                    include("topnews.php");
                    include("todaysimage.php");
                ?>
            </div> <!-- end of left column -->
            <div class="templatemo_leftcol_subcol">
                <?php
                    include("generalnews.php");
                    include("sports.php");
                    include("regular.php");
                ?>
            </div>
            <?php
                include("tabsec.php");
            ?>
    	</div> <!-- end of left column -->
        <div id="templatemo_main_rightcol">
        	<?php
                include("members.php");
                // include("newsletter.php");
                include("videos.php");
                include("blogs.php");
                include("polls.php");
            ?>
        </div>
    </div>

The file that generate the error is members.php. Here is the code:

<?php
// Connects to your Database
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("tgaff") or die(mysql_error());

//Checks if there is a login cookie
if(isset($_COOKIE['ID_my_site']))

//if there is, it logs you in and directes you to the members page
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
if ($pass != $info['password'])
{
}
else
{
header("Location: members.php");

}
}
}

//if the login form is submitted
if (isset($_POST['submit'])) { // if form has been submitted

// makes sure they filled it in
if(!$_POST['username'] | !$_POST['pass']) {
die('You did not fill in a required field.');
}
// checks it against the database

if (!get_magic_quotes_gpc()) {
$_POST['email'] = addslashes($_POST['email']);
}
$check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error());

//Gives error if user dosen't exist
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>');
}
while($info = mysql_fetch_array( $check ))
{
$_POST['pass'] = stripslashes($_POST['pass']);
$info['password'] = stripslashes($info['password']);
$_POST['pass'] = md5($_POST['pass']);

//gives error if the password is wrong
if ($_POST['pass'] != $info['password']) {
die('Incorrect password, please try again.');
}
else
{

// if login is ok then we add a cookie
$_POST['username'] = stripslashes($_POST['username']);
$hour = time() + 3600;
setcookie(ID_my_site, $_POST['username'], $hour);
setcookie(Key_my_site, $_POST['pass'], $hour);

//then redirect them to the members area
header("Location: members.php");
}
}
}
else
{

// if they are not logged in
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td colspan=2><h1>Login</h1></td></tr>
<tr><td>Username:</td><td>
<input type="text" name="username" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}

?>

Can anyone help please? I have spent more than 5 days trying to find out a solution for this problem.

Regards,

Aziz

Dears,

I am having the same headers warning.


Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 62

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 63

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tgaff\index.php:25) in C:\xampp\htdocs\tgaff\members.php on line 66

I tried the following

  1. ob_start() / ob_flush()
  2. checked the 1st and last line to see blank lines or strange characters
  3. changed the file type from UTF8 to ANSI

My website is divided into sections is separate files that are included in the main php file.

here is the index.php file:

<div id="templatemo_content">
    	<div id="templatemo_main_leftcol">
        	<div class="templatemo_leftcol_subcol">
            	<?php
                    include("topnews.php");
                    include("todaysimage.php");
                ?>
            </div> <!-- end of left column -->
            <div class="templatemo_leftcol_subcol">
                <?php
                    include("generalnews.php");
                    include("sports.php");
                    include("regular.php");
                ?>
            </div>
            <?php
                include("tabsec.php");
            ?>
    	</div> <!-- end of left column -->
        <div id="templatemo_main_rightcol">
        	<?php
                include("members.php");
                // include("newsletter.php");
                include("videos.php");
                include("blogs.php");
                include("polls.php");
            ?>
        </div>
    </div>

The file that generate the error is members.php. Here is the code:

<?php
// Connects to your Database
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("tgaff") or die(mysql_error());

//Checks if there is a login cookie
if(isset($_COOKIE['ID_my_site']))

//if there is, it logs you in and directes you to the members page
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
if ($pass != $info['password'])
{
}
else
{
header("Location: members.php");

}
}
}

//if the login form is submitted
if (isset($_POST['submit'])) { // if form has been submitted

// makes sure they filled it in
if(!$_POST['username'] | !$_POST['pass']) {
die('You did not fill in a required field.');
}
// checks it against the database

if (!get_magic_quotes_gpc()) {
$_POST['email'] = addslashes($_POST['email']);
}
$check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error());

//Gives error if user dosen't exist
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>');
}
while($info = mysql_fetch_array( $check ))
{
$_POST['pass'] = stripslashes($_POST['pass']);
$info['password'] = stripslashes($info['password']);
$_POST['pass'] = md5($_POST['pass']);

//gives error if the password is wrong
if ($_POST['pass'] != $info['password']) {
die('Incorrect password, please try again.');
}
else
{

// if login is ok then we add a cookie
$_POST['username'] = stripslashes($_POST['username']);
$hour = time() + 3600;
setcookie(ID_my_site, $_POST['username'], $hour);
setcookie(Key_my_site, $_POST['pass'], $hour);

//then redirect them to the members area
header("Location: members.php");
}
}
}
else
{

// if they are not logged in
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td colspan=2><h1>Login</h1></td></tr>
<tr><td>Username:</td><td>
<input type="text" name="username" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}

?>

Can anyone help please? I have spent more than 5 days trying to find out a solution for this problem.

Regards,

Aziz

If you have white space before and after php tags , then that can be another cause for this error,

great this worked for me tnx.

try placing this at the top of your page:

<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

end quote.

I had same error i used this two cords as u said ,now my problem solved

how this happen?what is the meaning of this two cords.

try placing this at the top of your page:

<? ob_start(); ?>

then at the bottom of the page place this line of code:

<? ob_flush(); ?>

Thanks from yet another person who found the ob_start and flush functions helpful in ridding myself of this warning so I can get back to fun errors.

you guys are really great.. thanks for the help.. !
-shinz

I had the same warning.

I've tried everything to fix my problem:
- Looked for blank spaces before or after the php tags (NOTHING);
- Used in my code the ob_start() and ob_flush() (NOTHING);

I am warning you. This could be the ultimate idiot's guide for fixing this thing.

My header code looked like this:

header("Location: cucu.php");

In fact the header code should have been this:

header ("Location: cucu.php");

See the difference. You need to have space between "header" and '("Location: cucu.php");'

Hope this information helps a lot of you guys, because I already have gray hair.

thanks Jenif, i was stucked in the same problem.
i feel lucky coz i read through the thread, thanks again, no matter this reply can reach you or not, i still wan to say thanks.

_________________________________________________
Thank you so much JeniF. I have been receiving a similar error for days now, and have been unable to complete a class assignment. Popped your suggestion in, and it now works. My elation is directly correlated to my previous frustration, and I just wanted to take the time to say thanks. Have a good one.

(Incidentally, if you get the time, what exactly is the recommended code doing?)

I love you. everyone i asked said it was because of my text editor. i put the two lines in and now it work perfectly. your awesome!

oooooughhh.... thank you so much!! I'm almost desperate ...

the solution is
echo 'window.location="your_page.php"';
i have the same problem before

i have same problem
my code is..........please suggest???

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml1/DTD/xhtml11.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb">
	
	<link href="Admin.css" rel="stylesheet" type="text/css" media="screen" />
<br />
<br />
<table width="1240px" border="0" cellpadding="10" cellspacing="0"border="0">
<tr>
	<div class="banner">
   <span style="font-size: x-large; float: Left;">Television Station Broadcasting</span>

        </div>
		<div style="border: solid 2px gray; width: 1240px; height: 18px; margin-top: 2px;
            padding-top: 3px; padding-bottom: 1px;">
        </div>




<tr bgcolor="Black">
<td nowrap><a href="master.html">Home</a></td>
<td nowrap><a href="#">Channel 1</a></td>
<td nowrap><a href="#">Channel 2</a></td>
<td nowrap><a href="#">Channel 3</a></td>
<td width=:1240px>&nbsp;</td>
</tr>
</table>
<br/>
<br/>
<? ob_start(); ?>
<?php

// Connects to your Database
mysql_connect("studb", "qm907", "teatkh8J") or die(mysql_error());
mysql_select_db("mdb_qm907") or die(mysql_error());

//checks cookies to make sure they are logged in
if(isset($_COOKIE['ID_my_site']))
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{

//if the cookie has the wrong password, they are taken to the login page
if ($pass != $info['password'])
{ header("Location: login.php");
}

//otherwise they are shown the admin area
else
{



echo "<a href=Entering_Prog.php>Enter Programme Information<p>";
echo "Your Content<p>";
echo "<a href=logout.php>Logout</a>";





}
}
}
else

//if the cookie does not exist, they are taken to the login screen
{
header("Location: login.php");
}

?> 



<head>
<title>Mailing list form</title>

<link href="mailform.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>Join our product mailing list</h2>
<h4>Plain XHTML MySQL version</h4>
<form method="post" action="Entering_Prog_2.php" enctype="application/x-www-form-urlencoded">




<p>
progtitle <input type="text" name="progtitle" size="8" maxlength="16" value="<?php echo $_POST['progtitle'] ?>" />
progdesc <input type="text" name="progdesc" size="6" maxlength="12" value="<?php echo $_POST['progdesc'] ?>" />
progtype <input type="text" name="progtype" size="32" maxlength="64" value="<?php echo $_POST['progtype'] ?>" /><br /><br />
progtime <input type="text" name="progtime" size="32" maxlength="64" value="<?php echo $_POST['progtime'] ?>" /><br /><br />
progdate <input type="text" name="progdate" size="32" maxlength="64" value="<?php echo $_POST['progdate'] ?>" /><br /><br />
Channelname <input type="text" name="Channelname" size="32" maxlength="64" value="<?php echo $_POST['Channelname'] ?>" /><br /><br />
<input type="submit" name="Sub" value="Add Details"/>
<input type="reset" value="Reset Form"/>
</p></form>
<hr />
</body></html>

<br />
<br />
<table width="1240px" cellspacing="0" cellpadding="10" border="0">
<tr>
<td colspan="2" bgcolor="#9933FF"></td>

</tr>
</table>

<div id="footer">
            **TSB**<br />
            Copyright © 2010</div>
    </div>

</form></html>
<? ob_flush(); ?>
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.