我叫 Thibaud,我是 PHP 的初學者。我正在嘗試為我的“應用程式”設定登錄邏輯并遇到此錯誤:
致命錯誤:未捕獲錯誤:呼叫 C:\xampp\htdocs\assignment11_autosession\login.php:15 中的未定義函式 header() 堆疊跟蹤:#0 {main} throw in C:\xampp\htdocs\assignment11_autosession\login.php在第 15 行
這是我的代碼:
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>
我試圖在谷歌上找到更多關于這個錯誤資訊的資訊。我知道它可能是:
- 語法問題
- 對尚未宣告的函式的呼叫。
但是我還沒有在我的代碼中找到這方面的跡象......
當我測驗放置錯誤的“who”或錯誤的“pass”時,瀏覽器重定向到同一頁面效果很好(網路控制臺中的 http 回應 302 和頁面重繪 )。只有在正確的“who”和正確的“pass”的情況下,才不會重定向到另一個“view.php”頁面,并且我收到此錯誤訊息。
我試圖前后修改這個 header() 的語法,我試圖從它正在作業的另一段代碼中復制,但錯誤仍然存??在。
我希望這個問題的格式正確,并在此先感謝您對此的幫助 :) 此致,Thibaud。
uj5u.com熱心網友回復:
進一步查看代碼后,我重新撰寫了它。此代碼的此版本運行良好。我不確定它起作用的確切原因,但我仍然把它放在這里,這樣如果有人遇到類似的問題,他/她將能夠檢索到正確的邏輯:
<?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>
謝謝,蒂博。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534744.html
標籤:PHP验证会议重定向标头
