Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

header redirect not working on server but working on localhost

Tags:

php

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();
like image 933
Sammy Lopez Avatar asked Mar 14 '13 00:03

Sammy Lopez


5 Answers

best option is to use like this.

// Use this line instead of header
echo "<script>location='your_url.com'</script>";
like image 193
Srinivasulu Rao Avatar answered Nov 05 '22 21:11

Srinivasulu Rao


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.

like image 7
Havenard Avatar answered Nov 05 '22 23:11

Havenard


use ob_start(); just after <?php and use ob_end_flush(); at the end of your document.

like image 4
Shahnawaz Siddique Avatar answered Nov 05 '22 22:11

Shahnawaz Siddique


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.

like image 2
Boann Avatar answered Nov 05 '22 23:11

Boann


header("Location: http://sound-booth.com/");

it goes after text output.

Use OB_start() or change your code.

like image 1
el Dude Avatar answered Nov 05 '22 21:11

el Dude