我有一個接受登錄資訊的會話,如果用戶在我的資料庫中有效,我將使用其他資料為用戶設定 pages post 陣列,并將其顯示在不同頁面的另一個會話中。我的電子郵件和密碼被發送到下一個會話,但我的其余資料沒有,我不知道為什么。我確實知道我成功地從資料庫表中檢索了登錄用戶的資料,但是其他欄位被發送到 post 然后到下一個會話存在一些問題。
我的登錄頁面
<?php
session_start();
if(isset($_POST["firstName"]))
{
$_SESSION["firstName"] = $_POST["firstName"];
}
if(isset($_POST["lastName"]))
{
$_SESSION["lastName"] = $_POST["lastName"];
}
if(isset($_POST["phone"]))
{
$_SESSION["phone"] = $_POST["phone"];
}
if(isset($_POST["email"]))
{
$_SESSION["email"] = $_POST["email"];
}
if(isset($_POST["sin"]))
{
$_SESSION["sin"] = $_POST["sin"];
}
if(isset($_POST["password"]))
{
$_SESSION["password"] = $_POST["password"];
header('Location: ViewAllEmployees.php');
exit;
}
require "MySQLConnectionInfo.php";
$error = "";
// if email and password not set
if (! isset($_POST["email"]) || ! isset($_POST["password"])) {
$error = "Please enter employee login information.";
} else {
// if email and password set from login input
if ($_POST["email"] != "" && $_POST["password"] != "") {
try {
$pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password);
// set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully" . "</br>";
$sqlQuery = "SELECT * FROM employee";
try {
$result = $pdo->query($sqlQuery);
$rowCount = $result->rowCount();
if ($rowCount == 0)
echo "There are no rows to display from the Employee table ";
// find employee
for ($i = 0; $i < $rowCount; $i ) {
$row = $result->fetch();
$firstname = $row[1];
$lastname = $row[2];
$email = $row[3];
$phone = $row[4];
$sin = $row[5];
$password = $row[6];
if (isset($_POST["email"]) && isset($_POST["password"])) {
if ($email == $_POST["email"] && $password == $_POST["password"]) {
$_POST["firstName"] = $firstname;
$_POST["lastName"] = $lastname;
$_POST["email"] = $email;
$_POST["phone"] = $phone;
$_POST["sin"] = $sin;
$_POST["password"] = $password;
break;
}
}
}
} catch (PDOException $e) {
echo "Login unsuccessful. " . $e->getMessage();
}
$pdo = null;
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
} else
$error = "Please enter employee login information.";
}
?>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
include "Header.php";
include "Menu.php";
?>
<div class="content">
<form action="Login.php" method="post">
Email Address: <input type="text" name="email" /> <br /> Password: <input
type="text" name="password" /> <br /> <br /> <input type="submit"
value="Login" />
</form>
<br /> <br />
</div>
<?php
echo $error;
include "Footer.php";
?>
</body>
</html>
uj5u.com熱心網友回復:
這里的問題是,在將 $_SESSION 陣列分配給 $_POST 陣列之前設定了它們。當您分配 $_SESSION['firstName'] = $_POST['firstName'] 時,$_POST['firstName'] 為空。
解決方案:移動您設定 $_SESSION 變數的區域
if(isset($_POST["firstName"]))
{
$_SESSION["firstName"] = $_POST["firstName"];
}
設定 $_POST 變數后。
if ($email == $_POST["email"] && $password == $_POST["password"]) {
$_POST["firstName"] = $firstname;
$_POST["lastName"] = $lastname;
對于電子郵件和密碼,這些欄位會保存在會話中,因為您從 HTML 表單傳遞這兩個 POST 欄位,并且在設定 $_SESSION 變數的頂部部分中,這兩個欄位已填充在 $_POST 中大批。
uj5u.com熱心網友回復:
代碼的某些部分可以改進,例如:
在
WHERE子句中直接在此處添加電子郵件,這樣您就不需要for為所有員工做一個回圈。$sqlQuery = "SELECT * FROM employee";if (isset($_POST["email"]) && isset($_POST["password"]))在try塊中是不必要的,可以向上移動并替換第一個檢查(您正在使用的地方!= "")。
無論如何,要回答您的問題,您需要了解一些代碼流程。其他資訊未發送到其他頁面的原因是您設定$_SESSION變數的位置,該資訊對代碼不可用。
您的 html 中有一個表單可以將資料發送到您的代碼。這只會填充$POST["email"]和$POST["password"]。在代碼的開頭,您正在檢查$POST尚未填充的其他資料,因此它們不會保存在$_SESSION.
如果您堅持不從評論中使用 Kinglish 的方法,您應該將$_SESSION["phone"] = $_POST["phone"]等移動到您從資料庫中找到用戶的位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365162.html
