Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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$\u会话值设置不正确_Php_Mysql_Session - Fatal编程技术网

PHP$\u会话值设置不正确

PHP$\u会话值设置不正确,php,mysql,session,Php,Mysql,Session,我在PHP中有一个简单的登录页面,它在mysql数据库中查找提供的用户名和密码,并在找到用户时设置PHP$\会话变量。它基本上可以正常工作,除了$\u会话['user\u type\u id']的值为1,而不管$row[0][“user\u type\u id”]的值是多少 下面代码中的var_dump($row[0][“user_type_id”])确认其值正确,var_dump($_SESSION)(与第一个var_dump一起)显示$_SESSION['user_type_id']始终为1

我在PHP中有一个简单的登录页面,它在mysql数据库中查找提供的用户名和密码,并在找到用户时设置PHP$\会话变量。它基本上可以正常工作,除了$\u会话['user\u type\u id']的值为1,而不管$row[0][“user\u type\u id”]的值是多少

下面代码中的var_dump($row[0][“user_type_id”])确认其值正确,var_dump($_SESSION)(与第一个var_dump一起)显示$_SESSION['user_type_id']始终为1

$row值是int,而$\u会话值是字符串,我不知道这是否相关。我能想到的唯一一件事是,我正在其他地方重置会话变量,但我不记得这样做过,我也找不到它发生在任何地方

我正在尝试使用此值来控制权限。有人能看出我哪里做错了吗

这是会话代码

public static function new_session ($username, $pw, $inactive) {

    $db = mydb::getConnection();

    $statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
    $statement->bindValue(':parameter1', $username);
    $statement->bindValue(':parameter2', $pw);
    $statement->execute();
    $row = $statement->fetchAll();

    var_dump ($row[0]["user_type_id"]);

    if (count($row) == 1) {

        session_start();
        ini_set('session.gc_maxlifetime', 60 * 20);

        $_SESSION['name'] = $row[0]['username'];
        $_SESSION['id'] = $row[0]['id'];
        $_SESSION['user_type_id'] = $row[0]["user_type_id"];

        $_SESSION['max'] = $inactive;
        $_SESSION['timeout'] = time() + $inactive;
        $_SESSION['loggedin'] = true;

        return true;

    } else {
        return false;
    }

}
这是var\u dump的输出($row[0]['user\u type\u id'])

下面是var_dump($_SESSION['user_type_id'])的输出

编辑:下面是var_dump($result)的输出,如下@user3314428所示

array(5) {
  ["id"]=>
  int(2)
  ["user_type_id"]=>
  int(500)
  ["username"]=>
  string(5) "shane"
  ["password"]=>
  string(8) "***"
  ["email"]=>
  string(13) "***@***.**"
}


var\u dump($\u SESSION['user\u type\u id']仍然是字符串(1)“1”

我不知道是什么导致了这里的问题。但通常我使用这种类型的格式登录

if(!isset($_SESSION) session_start();    
public static function new_session ($username, $pw, $inactive) {

$db = mydb::getConnection();

$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
$statement->bindValue(':parameter1', $username);
$statement->bindValue(':parameter2', $pw);
$statement->execute();
if($statement->rowCount()==1)
{
  $result = $statement->fetch(PDO::FETCH_ASSOC);
  $_SESSION['user_type_id']=$result['user_type_id'];
  $_SESSION['var2']= $result['var2'];
  //and so on
}

session_start()应该位于页面顶部,而不是函数内部

只要尝试在$row[0][“user_type_id”]中使用单引号而不是双引号即可;我一点也不确定,但请尝试一下。谢谢@VaisakhPc,不过不是这样,我尝试了各种引号,只是在直接从var_转储复制变量名时使用了双引号,以确保其正确性。这只是个人偏好,与使其正常工作无关。许多网页错误地说它一定是第一个linphp文件中的e,这是错误的,不幸的是,它遍布整个Web。在这种情况下,它已经在每个页面的开头被调用。我已经从函数中删除了这一行,它似乎仍然可以正常工作(除了一点不起作用)谢谢。该函数工作正常,id和用户名设置正确,只是用户类型id值设置不正确。仍然存在问题??是的!同样的问题。我暂时没有回答,也许问题稍后会变得明显…请尝试var_dump($result)和注释输出。我已经添加了var_dump($result)输出到原始post
array(5) {
  ["id"]=>
  int(2)
  ["user_type_id"]=>
  int(500)
  ["username"]=>
  string(5) "shane"
  ["password"]=>
  string(8) "***"
  ["email"]=>
  string(13) "***@***.**"
if(!isset($_SESSION) session_start();    
public static function new_session ($username, $pw, $inactive) {

$db = mydb::getConnection();

$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
$statement->bindValue(':parameter1', $username);
$statement->bindValue(':parameter2', $pw);
$statement->execute();
if($statement->rowCount()==1)
{
  $result = $statement->fetch(PDO::FETCH_ASSOC);
  $_SESSION['user_type_id']=$result['user_type_id'];
  $_SESSION['var2']= $result['var2'];
  //and so on
}