I'm using bluehost as my webhost, I'm having a few problems. The code below is my point of confusion.
<?php
include '../init.php';
error_reporting(0);
?>
<div class='container'>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/responsive.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/responsive.min.css">
<script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<link rel="stylesheet" type="text/css" href="SignIn.css">
<title>SoundBooth - Sign in</title>
<link rel="icon" href="../Images/Logo.png" type="image/x-icon"/>
</head>
<body background="../Images/BGMain.png">
<div class='signinLabel'>Sign in</div>
<div class='bg'></div>
<div class='user'>Username</div>
<div class='pass'>Password</div>
<form action="index.php" method='POST'>
<input name='Username' autocomplete="off"class='usr' type="text" style='height:34px;'/>
<input name='Password' autocomplete="off"class='pas'type="password" style='height:34px;'/>
<input type='submit' class='submit' value='Log in' ></input>
</form>
<a class='forgotPass' href="#">(Forgot password)</a>
<div class='no-account-label'>Don't have an account? |</div>
<a class='no-account-button' href="/signup">Sign up</a>
<?php
if (empty($_POST) === false){
$username = $_POST['Username'];
$password = $_POST['Password'];
if (empty($username) || empty($password)){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">You need to enter a username and password!</div>
<?php
}elseif (user_exists($username) === false){?>
<div style="float:left;margin:-415px 170px;width:500px;text-indent:100px;"class="alert alert-error">We can't find that username! Have you <a style='color: rgb(185, 74, 72);' href='../HTML/signup.html'>registered?</a></div>
<?php
}elseif (user_active($username) === false){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">You haven't activated your account!</div> <!--Remove this-->
<?php
}else{
$login = login($username, $password);
if ($login === false){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">The username or password you have entered is incorrect!</div>
<?php
}else{
$errors[] = 'Logging In...';
$_SESSION['user_id'] = $login;
if (isset($_SESSION['user_id'])){
mysql_query("UPDATE `users` SET `online_offline`='1' WHERE `user_id`='$_SESSION[user_id]'");
}
header("Location: http://sound-booth.com/");
exit();
}
}
}
echo output_errors($errors)
?>
</div>
</body>
</html>
is the link to the script. It works in localhost, but not in my actual server. Not even the header() redirect works.
Could somebody please explain this?
Solution:
ob_start();
best option is to use like this.
// Use this line instead of header
echo "<script>location='your_url.com'</script>";
Headers must be set before any output is sent. You are sending a lot of HTML to the user before doing that header()
call. Perhaps its working in one environment but not in another because output_buffering
is set on your localhost php.ini but not on the server.
You should rework your code to make sure header()
is sent before any stuff, but if you want to just get it working append ob_start()
to the beginning of your code, it will enforce the buffering.
use
ob_start();
just after <?php
and use ob_end_flush();
at the end of your document.
HTTP headers must be sent before the HTTP response. I.e., you must call header
before echoing anything else or sending any HTML.
Chances are, the reason it works on your local server is because you have configured output buffering there. You can insert a call to ob_start();
at the top of the page to enable output buffering within the script. Then, since the HTML will be buffered until the script is done, the redirect header can get to the browser first, as it must. Or, you can rework the script to put the header
call at the top.
header("Location: http://sound-booth.com/");
it goes after text output.
Use OB_start() or change your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With