Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我收到通知:使用会话时未定义索引:loggedin_Php_Session - Fatal编程技术网

Php 我收到通知:使用会话时未定义索引:loggedin

Php 我收到通知:使用会话时未定义索引:loggedin,php,session,Php,Session,成功验证用户身份后,如果用户尚未注册培训,则会将其重定向到register.php 如果用户已经注册了培训,则会将其重定向到register.php以查看/修改其培训课程 到目前为止,这一切都很好 问题是,如果用户试图直接进入register.php或register.php,他/她会在未登录的情况下进入任何网页 这是我试图阻止的,但我一直收到以下错误消息: Notice: Undefined index: loggedin in .... on line 3 Please log in fi

成功验证用户身份后,如果用户尚未注册培训,则会将其重定向到register.php

如果用户已经注册了培训,则会将其重定向到register.php以查看/修改其培训课程

到目前为止,这一切都很好

问题是,如果用户试图直接进入register.php或register.php,他/她会在未登录的情况下进入任何网页

这是我试图阻止的,但我一直收到以下错误消息:

Notice: Undefined index: loggedin in .... on line 3
 Please log in first to see this page 
这是我目前正在使用的,谢谢你的帮助

//login.php

 $user = trim($_POST['user']);
 $pass = trim($_POST['pass']);

     // hash to sanitize the input further
    $pass = md5($pass);

   $tSQL = "SELECT u.empl_first, u.username FROM users u inner join Training t on u.Employee_Id = t.Employee_ID WHERE USERNAME = ?
    and PASSWORD = ? ";

    $params = array($user, $pass, $params);
    $sqll = sqlsrv_query($con, $tSQL);

if ($objResult = sqlsrv_fetch_array($sqll, SQLSRV_FETCH_ASSOC)) {
    $firstname = $objResult["empl_first"];
    $_SESSION["firstname"] = $objResult["empl_first"];
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $user;
    header('location:registered.php');
  }
  else
    header("location:register.php?user='".ms_escape_string($user)."'&pass='".ms_escape_string($pass)."' ");

sqlsrv_close($con);

?>
//register.php

<?php
session_start();
if (!isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != true) {
    echo "Please log in first to see this page";
}

login.php上的
具有
会话启动()顶部的某个位置

在使用会话的每个脚本上都必须有它。

有两个错误:-

login.php
中,使用
session_start()启动会话,以便在
$\u会话
中设置变量的代码可以工作

register.php
中,将IF语句从

if (!isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != true)


那么IF将不会测试
$\u会话['loggedin']!=如果if的第一部分发现变量不存在,则为true,即
!isset($\u SESSION['loggedin'])

如果(!isset($\u SESSION['loggedin'])和&$\u SESSION['loggedin']!=true)
,请仔细查看这行代码。。。。然后修复它,以删除登录页上的
未定义索引错误
,并启动会话。@riggsfully,这就是好代码。不过,我还是犯了同样的错误。顺便说一句:是的,我有session_start();在页面的最顶端。理解错误的原因是弄清这一点的关键。再次感谢你,你的意思是你仍然得到未定义的索引错误?如果是,错误发生在哪一行?您确定它仍然是您在
register.php
@riggsfully中显示的行吗?我必须关闭浏览器并重新打开它,而不是刷新它。在这样做之后,现在发生了两件事。首先,错误消失了——感谢上帝。然而,当我成功登录时,我仍然会看到我的自定义消息,上面写着“请先登录以查看此页面”。如果您成功登录,则该消息不应出现。另一个问题是,当我试图直接进入该页面而不登录时,它仍然允许我在页面顶部显示相同的自定义消息。你有没有想过为什么会发生这种情况。非常感谢你现在的帮助。我的$\u会话['loggedin']线路错误。非常感谢你的帮助
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] != true)