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);