Php 多维关联数组,session()和isset()用于登录,我做错了什么?

Php 多维关联数组,session()和isset()用于登录,我做错了什么?,php,arrays,session,Php,Arrays,Session,我正在尝试创建一个简单的登录页面 如果我采用以下阵列变量,它将起作用: $users=[]hello@domain.de'=>'Asd23'],['hello2@domain.de“=>”hell5123']]; 如果设置了$logins[$userKey][$email]&&$logins[$userKey][$email]==$password 但对于下面的多维关联数组变量,我无法做到这一点。 我在做什么,还是我弄错了 //多维关联数组 $users=[ //////////// [ '电子

我正在尝试创建一个简单的登录页面

如果我采用以下阵列变量,它将起作用: $users=[]hello@domain.de'=>'Asd23'],['hello2@domain.de“=>”hell5123']]; 如果设置了$logins[$userKey][$email]&&$logins[$userKey][$email]==$password

但对于下面的多维关联数组变量,我无法做到这一点。 我在做什么,还是我弄错了

//多维关联数组 $users=[ //////////// [ '电子邮件'=>'sandra@domain.com', “密码”=>“San1”, 'name'=>'Sandra', 'lastname'=>'Meier', “状态”=>“管理员”, “内容”=> ], [ '电子邮件'=>'franz@domain.com', “密码”=>“Fra1”, “name”=>“Franz”, 'lastname'=>'Eder', “状态”=>“标准”, “内容”=>“里尔” ], ] //检查并将提交的电子邮件和密码分配给新变量 $email=isset$\u POST['email']$_POST['email']:; $password=isset$\u POST['password']$_POST['password']:; ifisset$\u POST['Submit']{ //从给定的电子邮件中查找密钥 //多维数组搜索按特定值查找键 $userKey=array_search$email,array_column$users,'email'; //检查给定的电子邮件地址和密码是否存在并匹配 如果设置了$users[$userKey][$email]&&$users[$userKey][$password]=$password{ //成功:电子邮件地址和密码存在,并且电子邮件地址与密码匹配 //设置会话变量并重定向到受保护页面 $\会话['UserData']['email']=$users[$userKey][$email]; headerlocation:{$protocol_domain}{$actualur}; 出口 }否则{ //尝试失败:电子邮件地址和密码不存在或电子邮件不匹配 //设置错误消息 $msg='无效的登录详细信息'; } } 使用$userKey=array_search$email进行搜索,array_列$users,“email”;将为您提供索引,例如-0

接下来检查是否设置了$users[0][$email]。但它没有设置,因为您没有密钥$email,所以密钥'email'是一个普通字符串,与$password/'password'相同,所以检查应该是:

// you check that 
// - 'email' key is set and 
// - value in 'password' key is same as value from $_POST
if (isset($users[$userKey]['email']) && $users[$userKey]['password'] == $password) {
同时将会话集更新为:

$_SESSION['UserData']['email'] = $users[$userKey]['email'];

您看到了什么错误或意外行为?谢谢,我现在使用了字符串,我没有收到错误消息,但我也没有登录。还有什么不对劲?会话定义正确吗?我想它应该是$_session['UserData']['email']=$users[$userKey]['email'];,不原因与之前的更改相同。