ryanmetzler3 Posted December 26, 2015 Share Posted December 26, 2015 I have a script where a user can register and then login to my site. It all works fine on WAMP. When I put it on a live server I am having issues. I am getting this error when you try to login. Warning: Cannot modify header information - headers already sent by (output started at /home/wetdogno/public_html/login_scripts/login.php:12) in /home/wetdogno/public_html/login_scripts/login.phpon line 75 I know sessions are not starting becuase normally when you register, it automatically logs you into the account you just created, but its not doing that. It creates the user, because their information gets injected into my DB. Their session just isn't starting. Also the header() function is not working. Here is the code that the error message describes. I really don't think its a white space issue like many of the blogs that I have read indicated. f ($password == $dbpass) { if ($dbactive == 1) { $_SESSION['userid'] = $dbid; $_SESSION['username'] = $dbuser; header('Location:/login_scripts/member.php'); } Quote Link to comment Share on other sites More sharing options...
benanamen Posted December 26, 2015 Share Posted December 26, 2015 Your going to have to post more code than that. Show the code for the whole page. Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted December 26, 2015 Share Posted December 26, 2015 the code you posted is where the header() statement is at. that's just the affect of the error. the cause of the problem is the OUTPUT you are sending in login.php on line 12 - (output started at /home/wetdogno/public_html/login_scripts/login.php:12) Quote Link to comment Share on other sites More sharing options...
ryanmetzler3 Posted December 26, 2015 Author Share Posted December 26, 2015 the code you posted is where the header() statement is at. that's just the affect of the error. the cause of the problem is the OUTPUT you are sending in login.php on line 12 - (output started at /home/wetdogno/public_html/login_scripts/login.php:12) Here is all the code. I put line 12 in red so you can see it easier. Thank you <html> <head> <link rel="stylesheet" type="text/css" href="/style.css" /> <link rel="stylesheet" type="text/css" href="/login_scripts/user_style.css" /> <title>Wet Dog Nose Polls</title> </head> <body> <div id="wrapper"> <div id="headerwrap"> <div id="header"> <?php include $_SERVER['DOCUMENT_ROOT'] . '/header_source/index.php'; ?> <a href="/index.php"> <img src="/images/wetdognose.jpg"> </a> </div> </div> <div id="navigationwrap"> <div id="navigation"> <?php include $_SERVER['DOCUMENT_ROOT'] . '/menu_source/index.php'; ?> </div> </div> <div id="loginwrap"> <div id="login"> <h2>Welcome back! Sign in here.</h2> <?php include $_SERVER['DOCUMENT_ROOT'] . '/login_scripts/sessionstart.php'; if (isset($_POST['loginbtn']) or ($username && $userid)) {} else{echo "";} if ($username && $userid) { echo "You are already logged in as <b>$username</b>"; echo "<br/>Not " . $username . "? <a href='/login_scripts/logout.php'>Logout</a>"; } else { $form = "<div id='forms'> <form action='/login_scripts/login.php' method='post'> <table class='forms'> <td><input type='text' name='user' placeholder='Username' class='input_style'/></td> </tr> <tr> <td><input type='password' name='password' placeholder='Password' class='input_style'/></td> </tr> <td><input type='submit' name='loginbtn' id='loginbtn' value='Login'/></td> </tr> <tr> <td><a href='/login_scripts/register.php'>Register</a> <a href='/login_scripts/forgotpass.php'>Forgot Password?</a></td> </tr> </table> </form> </div>"; } if ($_POST['loginbtn']) { $user = $_POST['user']; $password = $_POST['password']; if ($user) { if ($password) { include $_SERVER['DOCUMENT_ROOT'] . '/login_scripts/connect.php'; $password = md5(md5("R4E2M0".$password."R4E2M0")); $link = mysqli_connect("localhost","wetdogno_ryan","Relztem$3","wetdogno_login") or die ("Cannot connect"); $query = mysqli_query($link, "SELECT * FROM user WHERE username='$user'") or die (mysqli_error()); $numrows = mysqli_num_rows($query); if ($numrows ==1) { $row = mysqli_fetch_assoc($query); $dbid= $row['id']; $dbuser= $row['username']; $dbpass = $row['password']; $dbactive = $row['active']; if ($password == $dbpass) { if ($dbactive == 1) { $_SESSION['userid'] = $dbid; $_SESSION['username'] = $dbuser; header('Location:/login_scripts/member.php'); } else { echo "<font color='red'>You must activate your account to login. $form</font>"; } } else { echo "<font color='red'>You did not enter the correct password. $form</font>"; } } else { echo "<font color='red'>The username you entered was not found. Be sure that you are entering your username and not email.$form</font>"; } } else { echo "<font color='red'>You must enter your password . $form</font>"; } } else { echo "<font color='red'><p>You must enter your username. Be sure you are entering your username and not your email. $form</font>"; } } else{ echo $form; } ?> </div> </div> <div id="rightcolumnwrap"> <div id="rightcolumn"> <?php include $_SERVER['DOCUMENT_ROOT'] . '/ad.php'; ?> </div> </div> <div id="footerwrap"> <div id="footer"> <?php include $_SERVER['DOCUMENT_ROOT'] . '/footerlinks.php'; ?> </div> </div> </div> </body> </html> Quote Link to comment Share on other sites More sharing options...
ryanmetzler3 Posted December 26, 2015 Author Share Posted December 26, 2015 Your going to have to post more code than that. Show the code for the whole page. the code you posted is where the header() statement is at. that's just the affect of the error. the cause of the problem is the OUTPUT you are sending in login.php on line 12 - (output started at /home/wetdogno/public_html/login_scripts/login.php:12) I have found that the error is always at the line where the first php tag occurs. Right now it is reading an error at line 12 which is the first php tag in the code. If I delete that section (because it does not contribute to the functionality of the code) , the errror reads line 19 which is the next php tag. If I delete that, the error jumps to the next php tag. It doesnt like the first php tag for some reason. Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted December 26, 2015 Share Posted December 26, 2015 this is a very common error. if you search the web for it, you will get several million results that tell you what causes it and how to fix what is causing it. you cannot send any (1 or more) character to the browser before you use a header(), session_start(), of setcookie() statement. ALL THE HTML MARKUP you have before the header() statement are characters and cannot be sent to the browser. the way to fix this is to refactor your code and move the majority of your php code to the top of your file and put ALL the html document, starting with the <!DOCTYPE tag near the end of your file. the only php code that should be inside the html document as basic php statements that are concerned with displaying the dynamic portion of the html document. logging a user is has nothing to do with the html document. if you read the following post for a recommend page layout to follow, your code won't have this problem, because processing post method form data will be near the top of your file and the html document/template will be at the end - http://forums.phpfreaks.com/topic/297824-database-issues-and-working/?do=findComment&comment=1519095 Quote Link to comment Share on other sites More sharing options...
Jacques1 Posted December 26, 2015 Share Posted December 26, 2015 You don't seem to understand that HTML markup is in fact output. So you have output all over the place, starting at line 1. The fact that PHP reports the first tag after the markup is just an implementation detail. Long story short: Your code is definitely broken. While it's theoretically possible to circumvent the issue with output buffering (which is what your test server does), I strongly recommend against that. Get rid of this awful spaghetti code and write your scripts properly, that is, separate the logic from the visuals. The best way to enforce clean separation is to use an actual template language like Twig. Or, if you insist on using PHP as a poor man's template engine, put the logic on top and keep the markup at the bottom. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.