php - Fatal error: Uncaught Error: Call to undefined function header() - Beginner question

My name is Thibaud, I'm beginner on PHP. I'm trying to set up a login logic to my "app" and encountering this error :

Fatal error: Uncaught Error: Call to undefined function header() in C:\xampp\htdocs\assignment11_autosession\login.php:15 Stack trace: #0 {main} thrown in C:\xampp\htdocs\assignment11_autosession\login.php on line 15

Here is my code :


session_start();
// If there is no parameter, error message is generated
if ( isset($_POST["who"])  && isset($_POST["pass"])) {
$pass = $_POST["pass"];
$salt = 'hello';
$stored_hash = 'hello';
$md5 = hash('md5', $salt.$pass);
    unset($_SESSION["who"]);  // Logout current user
    if (filter_var($_POST["who"], FILTER_VALIDATE_EMAIL) && $md5 == $stored_hash) {
            $_SESSION["who"] = $_POST["who"];
            $_SESSION["success"] = "Logged in.";
?�?�?�?�?�?�?�?�?�?�?�**?�header('Location: view.php');**
            return;
    }
    elseif (!filter_var($_POST["who"], FILTER_VALIDATE_EMAIL)) {
        $_SESSION["error"] = "Email must have an at-sign (@)";
        header('Location: login.php');
        return;}
    elseif ( strlen($_POST["who"]) < 1 || strlen($_POST["pass"]) < 1 ) {
    $_SESSION["error"] = "User name and password are required";
    header('Location: login.php');
    return;}
    else{ $_SESSION["error"] = "Incorrect password.";
            header( 'Location: login.php' );
            return;}
}
?>

<html>
<head>
<title>Thibaud  - login</title>
</head>
<body>
<h1>Thibaud - login page</h1>
<p>
<form method="POST">
<label for="nam">User Name</label>
<input type="text" name="who" id="nam"><br/>
<label for="id_1723">Password</label>
<input type="text" name="pass" id="id_1723"><br/>
<input type="submit" value="Log In">
<input type="submit" name="cancel" value="Cancel">

</form>
</p>

<p>
<?php
    if ( isset($_SESSION["error"]) ) {
        echo('<p style="color:red">'.$_SESSION["error"]."</p>\n");
        unset($_SESSION["error"]);
        unset($_SESSION["pass"]);
    }
    else {echo('<p style="color:green">'.$_SESSION["success"]."</p>\n");
        unset($_SESSION["success"]);
        unset($_SESSION["pass"]);
    }
?>
</p>
</body>
</html>

I tried to find out more about this error message on google. I understood it could be :

  • a syntax issue
  • a call to a function that has not been declared yet.

But I did not find signs of this in my code yet...

When I test to put a bad "who" or a bad "pass", browser redirection to the same page works well (http response 302 in the network console and refresh of the page). It's only in the case of a correct "who" and correct "pass" that the redirection to this other "view.php" page does not occur and I get this error message.

I tried to modify the syntax of this header() before and after, I tried to copy from another piece of code where it was working, but error remains there.

I hope this question is in the correct format and thanks a lot in advance for your help on this one :) Best Regards, Thibaud.

Answer

Solution:

After a further look at the code, I reworked it. This version of this code works well. I am not sure of the exact reason it's working but still, I let it here so that if a similar issue is coming for someone, he/she'll be able to retrieve a correct logic :

<?php

session_start();
// If there is no parameter, error message is generated
if ( isset($_POST["who"])  && isset($_POST["pass"])) {
$pass = $_POST["pass"];
$salt = 'XyZzy12*_';
$stored_hash = '1a52e17fa899cf40fb04cfc42e6352f1';
$md5 = hash('md5', $salt.$pass);
    unset($_SESSION["who"]);  // Logout current user
    if (filter_var($_POST["who"], FILTER_VALIDATE_EMAIL) && $md5 == $stored_hash) {
            $_SESSION["who"] = $_POST["who"];
            $_SESSION["success"] = "Logged in.";
            header('Location: view.php');
            return;}
    elseif (!filter_var($_POST["who"], FILTER_VALIDATE_EMAIL)) {
            $_SESSION["error"] = "Email must have an at-sign (@)";
            header('Location: login.php');
            return;}
    elseif ( strlen($_POST["who"]) < 1 || strlen($_POST["pass"]) < 1 ) {
            $_SESSION["error"] = "User name and password are required";
            header('Location: login.php');
            return;}
    else{ $_SESSION["error"] = "Incorrect password.";
            header( 'Location: login.php' );
            return;}
}
?>


<html>
<head>
<title>Thibaud LOYRIAC  - AUTOSDB - login</title>
</head>
<body>
<h1>Thibaud LOYRIAC  - AUTOSDB - login page</h1>
<p>
<form method="POST">
<label for="nam">User Name</label>
<input type="text" name="who" id="nam"><br/>
<label for="id_1723">Password</label>
<input type="text" name="pass" id="id_1723"><br/>
<input type="submit" value="Log In">
<input type="submit" name="cancel" value="Cancel">

</form>
</p>

<p>
<?php
    if ( isset($_SESSION["error"]) ) {
        echo('<p style="color:red">'.$_SESSION["error"]."</p>\n");
        unset($_SESSION["error"]);
        unset($_SESSION["pass"]);
    }
    elseif ( isset($_SESSION["success"]) ) {
    echo('<p style="color:green">'.$_SESSION["success"]."</p>\n");
        unset($_SESSION["success"]);
        unset($_SESSION["pass"]);
    }
?>
</p>
</body>
</html>

Thanks, Thibaud.

Source