Php 会话变量未被传递
我正在尝试检查我的Php 会话变量未被传递,php,session,login,Php,Session,Login,我正在尝试检查我的resultId是否存在,如果不存在,我可以重定向到我的登录页面。从我对会话变量的理解来看,这些信息应该传递到我的页面,但事实并非如此。现在登录后,页面应该重定向到主页,但它会直接返回到登录屏幕,因为它在会话中找不到resultId的值 我的登录页面: <?php session_start(); // Define variables and set to empty values $usernameErr = $passwordErr = $
resultId
是否存在,如果不存在,我可以重定向到我的登录页面。从我对会话变量的理解来看,这些信息应该传递到我的页面,但事实并非如此。现在登录后,页面应该重定向到主页,但它会直接返回到登录屏幕,因为它在会话中找不到resultId
的值
我的登录页面:
<?php
session_start();
// Define variables and set to empty values
$usernameErr = $passwordErr = $loginErr = "";
$loginName = $loginPass = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$valid = True;
if (empty($_POST['loginName'])) {
$usernameErr = "Please enter your username";
$valid = False;
} else {
$loginName = test_input($_POST['loginName']);
$_SESSION['loginName'] = $loginName;
}
if (empty($_POST['loginPass'])) {
$passwordErr = "Please enter your password";
$valid = False;
} else {
$loginPass = test_input($_POST['loginPass']);
$_SESSION['loginPass'] = $loginPass;
}
// If valid connect to database
if ($valid) {
$username = "root";
$password = "";
$servername = "";
try {
$pdo = new PDO("mysql:host=$servername; dbname=capstonedb", $username, $password);
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {echo "Connection failed: " . $e->getMessage();}
// Select username and password from database
// and compare with user input.
$sql_login = "SELECT id FROM login
WHERE username = '$_SESSION[loginName]'
AND password = '$_SESSION[loginPass]'";
$result = $pdo->query($sql_login);
$resultId = $result->fetch();
$_SESSION['resultId'] = $result->fetch();
if ($resultId['id'] != null) {
// Login successful
// Redirect to home.php
header('location: home.php');
} else {
$loginErr = "Incorrect login/password";
}
// Close the connection
session_destroy();
$pdo = null;
}
}
// Function to sanitize data
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Childcare Facilities</title>
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<link href="mystyles.css" rel="stylesheet">
<style>
.error {
color: red;
}
</style>
</head>
<body>
<div class="jumbotron" style="margin-bottom:100px">
<div class="container">
<img src="Mountain.jpg" width="138px" height="138px" alt="logo" style="float:right" class="main-logo">
<h1 style="color: white" style="float:clear">Smileside Childcare Facilities</h1>
</div>
</div>
<div class="col-md-4"></div>
<div class="col-md-4">
<div class="panel panel-default" style="margin-bottom:50px;">
<div class="panel-heading" style="background-color: #9ad3de; text-align:center;">
<h3><strong>Login</strong></h3>
<span class="error"><strong><?php echo $loginErr ?></strong></span>
</div>
<div class="panel-body">
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<div class="form-group">
<label for="loginName" class="col-sm-3 control-label">Username: </label>
<div class="col-sm-8">
<input class="form-control" type="text" name="loginName" />
<span class="error">* <?php echo $usernameErr; ?></span>
</div>
</div><br /><br />
<div class="form-group">
<label for="loginPass" class="col-sm-3 control-label">Password: </label>
<div class="col-sm-8">
<input class="form-control" type="password" name="loginPass" />
<span class="error">* <?php echo $passwordErr; ?></span>
</div>
</div>
<br />
<br />
<input type="submit" class="btn btn-primary pull-right" value="Log In" />
</form>
</div>
</div>
</div>
<div class="navbar navbar-default navbar-fixed-bottom">
<div class="container">
<p class="navbar-text pull-left">© 2016 - Built By Michal Patriak
</p>
</div>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
儿童保育设施
.错误{
颜色:红色;
}
斯米尔赛德儿童保育设施
登录
检查此代码
而不是
$_SESSION['resultId'] = $result->fetch();
应该是
$_SESSION['resultId'] = $resultId['id'];
您必须检查会话是否存在,然后启动会话
if(!isset($_SESSION)){
session_start();
}
if(!isset($_SESSION['resultId'])){
header("Location: index.php"); // Redirect to login page
}
检查此代码
而不是
$_SESSION['resultId'] = $result->fetch();
应该是
$_SESSION['resultId'] = $resultId['id'];
您必须检查会话是否存在,然后启动会话
if(!isset($_SESSION)){
session_start();
}
if(!isset($_SESSION['resultId'])){
header("Location: index.php"); // Redirect to login page
}
试试这个
if (session_status() !== PHP_SESSION_ACTIVE)
{
session_start();
}
if(!isset($_SESSION['resultId'])){
header("Location: index.php"); // Redirect to login page
}
试试这个
if (session_status() !== PHP_SESSION_ACTIVE)
{
session_start();
}
if(!isset($_SESSION['resultId'])){
header("Location: index.php"); // Redirect to login page
}
您必须将会话保存在变量中,然后将其应用到SQL查询中。它可以减少单引号(')错误
尝试以下操作:)您必须将会话保存在变量中,然后将其应用到SQL查询中。它可以减少单引号(')错误
试试这个:)你的密码是纯文本的,希望它是“不在其他地方使用”。不,只是这个项目的一个简单的密码,但是谢谢你的提醒。当你使用var_dump($_SESSION)时会发生什么?您以明文形式留下了密码,希望它是“不在其他地方使用”。不,这只是本项目的一个简单密码,但感谢您的提醒。当您使用var_dump($_SESSION)时会发生什么?代码最初是这样设置的,但当我意识到会话变量没有收到值时,我想我会尝试直接从fetch中提取它。@MichalPatriak我添加了一些修改,请检查。您可以这样做并检查$resultId=$result->fetch(PDO::fetch_ASSOC);代码最初是这样设置的,但当我意识到会话变量没有收到值时,我想我会尝试直接从fetch中提取它。@MichalPatriak我添加了一些修改,请检查。您可以这样做并检查$resultId=$result->fetch(PDO::fetch_ASSOC);