Link
Link

Reputation: 403

php redirect when wrong password

is this right the code will redirect a person to the login page when they try to access it using without going into the login page

<?php

$pass = 'password';

?>
<html>
<head>
<title></title>
</head>
<body>
<?php 

if ( $_POST["pass"] == $pass){
?>

Congrats you have log in!


<?php 

}else{

header("Location: http://signin.com/");
}
?>
</body>
</html>

i ended up having a "Server error The website encountered an error while retrieving http://www.test.com It may be down for maintenance or configured incorrectly."

Upvotes: 0

Views: 4014

Answers (5)

Paul Dessert
Paul Dessert

Reputation: 6389

Something like this would work better:

<?php
$pass = 'password';

if ($_POST["pass"] != $pass){
    header("Location: http://signin.com/");
    exit;
    }
?>

<html>
<head>
<title></title>
</head>
<body>
Congrats you have log in!

</body>
</html>

You need to check if the user is logged in. If not, redirect and exit. If so, display the message.

Upvotes: 1

Igor Parra
Igor Parra

Reputation: 10348

You can't output html before make a redirect with header. Code all logic before:

<?php 
$pass = 'password';

if ($_POST["pass"] == $pass)
{
    $message = "Congrats you have log in!";
}
else
{
    header("Location: http://signin.com/");
}
?>  

<html>
<head>
<title></title>
</head>
<body>
    <?php echo $message; ?>
</body>

Upvotes: 1

Fluffeh
Fluffeh

Reputation: 33512

You can't send a header() after any output to the user:

<?php
    $pass = 'password';
    if ( $_POST["pass"] == $pass)
    {
        ?>
        <html>
        <head>
        <title></title>
        </head>
        <body>

        Congrats you have log in!

        </body>
        </html>

        <?php 
    }
    else
    {
        header("Location: http://signin.com/");
    }
?>

Upvotes: 2

temporalslide
temporalslide

Reputation: 947

You can't call header after you've already outputted some HTML. Do your password checks & redirect. above the HTML

Eg:

<?php 
$pass = 'password';
if ( $_POST["pass"] != $pass){
    header("Location: http://signin.com/");
    exit;
}
?>
<html>
<head>
<title></title>
</head>
....

So the HTML will only show if they're successful.

Upvotes: 2

ryebread761
ryebread761

Reputation: 705

Put ob_start(); at the top and ob_end_flush(); and that might fix it.

Upvotes: 1

Related Questions