在index.php中声明会话变量时遇到错误


Facing an error when declaring session variables in index.php

我有一个index.php页面,如下所示,该页面有一个登录表单,调用login.php页。它在那里创建会话值。

<?php 
  session_start();
  $con=mysqli_connect("localhost","root","","sam");
  if (mysqli_connect_errno($con))
  {
      echo "Could not connect " . mysqli_connect_error();
  }
  $id = $_SESSION["id"];
  $user_login = $_SESSION["user_login"];
  $password_login = $_SESSION["password_login"];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Samsung Ops Guide</title>
<link href="css/index.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <a href="#" class="title">Tracker</a>
    <form action="login.php" method="post" id="login">
    <input id="email" placeholder="T-ID" type="text" name="em" />
    <input id="email" placeholder="Password" type="password" name="pwd"/>
    <input id="loginButton" type="submit" value="Login" name="log" />
    </form>
    <div id="error1"></div>

</body>
</html>
<?php 
if (isset($_SESSION["user_login"]) && isset($_SESSION["password_login"])) {
$query = mysqli_query($con,"select * from employees where Tid='$user_login' and    password='$password_login'");
while($row = mysqli_fetch_array($query)){ 
         $ptype = $row["designation"];
}
if($ptype=="agent")
{
    header("location:/new/l1/");
}
if($ptype=="l2")
{
    header("location:/new/l2/");
}
 }
?>

然后有一个login.php页面,当调用登录表单时会调用该页面。登录表单调用并从数据库中获取值,然后根据该值创建会话。

login.php如下所示:

<?php
session_start();
 include "inc_files/connection.php"; // it is only creating a connection with database nothing else
 $user_login=$_POST['em'];
 $password_login=$_POST['pwd'];
 $password_login = md5($password_login);
if(empty($user_login) || empty($password_login))
{
die (retmsg(0,"Please fill T-ID and Password"));
}
$query = mysqli_query($con,"select * from employees where Tid='$user_login' and password='$password_login'");
  $read = mysqli_num_rows($query);
  if(!$read)
  {
    die (retmsg(0,"Incorrect T-ID or Password"));
  }
  else
  {
    while($row = mysqli_fetch_array($query)){ 
                     $id = $row["id"];
         $ptype = $row["designation"];
    }
     $_SESSION["id"] = $id;
     $_SESSION["user_login"] = $user_login;
     $_SESSION["password_login"] = $password_login;
     if (isset($_SESSION["user_login"]) && isset($_SESSION["password_login"]))
         {
            if ($ptype == "l1")
                {echo retmsg(1,"l1");}
            if ($ptype == "l2")
                {echo retmsg(1,"l2");}
     }
}
  function retmsg($status,$txt)
  {
        return json_encode(array('status' => $status, 'txt' => $txt));
  }
?>

我收到一个错误,

  $id = $_SESSION["id"];
  $user_login = $_SESSION["user_login"];
  $password_login = $_SESSION["password_login"];

未定义。在index.php中

这里,会话变量只有在您登录时才会设置。第一次,它们没有设置,您正试图在这些行中访问它们(在index.php中)。

  $id = $_SESSION["id"];
  $user_login = $_SESSION["user_login"];
  $password_login = $_SESSION["password_login"];

首先,你必须检查它们是否已设置,然后访问它,如:

if(isset($_SESSION["id"]))
  $id = $_SESSION["id"];
if(isset($_SESSION["user_login"]))
  $user_login = $_SESSION["user_login"];
if(isset($_SESSION["password_login"]))
  $password_login = $_SESSION["password_login"];

当您使用同一页面提交表格时,您可以访问

 $user_login=$_POST['em'];
 $password_login=$_POST['pwd'];

只有提交了表格。即,在页面加载时,表单不会提交,这意味着页面中不会有任何POST变量。所以这肯定会产生问题(和我们上面讨论过的问题一样)。因此,在这里,您必须确保只有在提交表单时才能访问表单变量。你可以通过以下几行来完成,

if (!empty($_POST))    // if there are any posted variables
{
 $user_login=$_POST['em'];
 $password_login=$_POST['pwd'];
 $password_login = md5($password_login);
..............................
}

此外,请确保您已在此if条件内添加了表单提交的所有代码。

我不知道确切的错误。让我们试试单引号。

  $id = $_SESSION['id'];
  $user_login = $_SESSION['user_login'];
  $password_login = $_SESSION['password_login'];**