-1

I have a basic login form on my blog page and when I enter a correct username and password, it says that the username + password are correct, but I am not redirected to the index1.php page.

Here is my code:

<?php
    require_once('header.php');
    require_once('config.php');

$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    //check to see if form has been submitted
    if (isset($_POST['submit'])) {
    if ($_POST['username'] == 'bruce' && ($_POST['password'] == 'wayne')) {
        echo 'Correct username and password.';
    }
    else {
        echo 'Incorrect username or password. Please try again.';
    }

    $result = mysqli_query($db, $sql);
    $numrows = mysqli_num_rows($result);

    if($numrows == 1) {
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        $_SESSION['USERNAME'] = $row['username'];
        $_SESSION['USERID'] = $row['id'];

        header("Location:"."index1.php");
    }
    else {
        header("Location"."login.php?error=1");
    }
}

    else {
        if(isset($_GET['error'])) {
            echo "Incorrect login, please try again!";
        }
    }
?>

<form action="<?php echo $_SERVER['index1.php'] ?>" method="post">
<table id='login'>
<tr>
    <td>Username</td>
    <td><input type="text" name="username"></td>
</tr>
<tr>
    <td>Password</td>
    <td><input type="password" name="password"></td>
</tr>
<tr>
    <td></td>
    <td><input type="submit" name="submit" value="Login!"></td>
</tr>
</table>
</form>

index1.php below!

<?php
    require("header.php");

    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    $sql = "SELECT entries.*, categories.cat FROM entries, categories
        WHERE entries.cat_id = categories.id
        ORDER BY dateposted DESC
        LIMIT 1;";

    $result = mysqli_query($db,$sql);
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

    echo "<h2><a href= 'viewentry.php?id=" . $row['id'] . "'>" . $row['subject']. "</a></h2><br />";
    echo "<i>In <a href='viewcat.php?id=" . $row['cat_id'] . "'>" . $row['cat'] ."</a> - Posted on " .
            date("D jS F Y g.iA", strtotime($row['dateposted'])) ."</i>";
    echo "<p>";
    echo nl2br($row['body']);
    echo "</p>";

    require("footer.php");

?>
chris
  • 7
  • 2
  • 7

4 Answers4

0

Use the exit() or die() functions after the header() function. Otherwise, the script won't terminate. Here's a related example:

Why I have to call 'exit' after redirection through header('Location..') in PHP?

Community
  • 1
  • 1
JBoss
  • 1
  • 2
0

first of all you need to use session_start(); before using session in php, if you didnot then $_SESSION becomes normal array, and no longer will be remembered.

Veshraj Joshi
  • 3,544
  • 3
  • 27
  • 45
0

You cannot echo before a redirect unless you are using output buffering. I commented out your echos.

I use this all the time. you must call exit after a redirect.

/**
 * This is designed to redirect using a quick, easy function.
 */
function gfRedir($_NewPath){
    header('Location: '.$_NewPath);
    exit();
}

You would use it like:

<?php
    require_once('header.php');
    require_once('config.php');

$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    //check to see if form has been submitted
    if (isset($_POST['submit'])) {
    if ($_POST['username'] == 'bruce' && ($_POST['password'] == 'wayne')) {
       //you cannot echo before a redirect unless you are using output buffering.
      //echo 'Correct username and password.';
    }
    else {
        //you cannot echo before a redirect unless you are using output buffering.
        //echo 'Incorrect username or password. Please try again.';
    }

    //where is this $sql at that you are passing into the below function? 

    $result = mysqli_query($db, $sql);
    $numrows = mysqli_num_rows($result);

    if($numrows == 1) {
       $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
       $_SESSION['USERNAME'] = $row['username'];
       $_SESSION['USERID'] = $row['id'];

       gfRedir('index2.php');
    }
    else {

       gfRedir('login.php?error=1');
    }
   }

    else {
        if(isset($_GET['error'])) {
            echo "Incorrect login, please try again!";
        }
    }


    function gfRedir($_NewPath){
        header('Location: '.$_NewPath);
        exit();
    }
?>

<form action="<?php echo $_SERVER['index1.php'] ?>" method="post">
<table id='login'>
<tr>
    <td>Username</td>
    <td><input type="text" name="username"></td>
</tr>
<tr>
    <td>Password</td>
    <td><input type="password" name="password"></td>
</tr>
<tr>
    <td></td>
    <td><input type="submit" name="submit" value="Login!"></td>
</tr>
</table>
</form>
M H
  • 2,179
  • 25
  • 50
0

Please try to use this syntax for redirect.

header("Location:index1.php");
exit();

Thank you

Ragu Natarajan
  • 709
  • 3
  • 16