Php 从服务访问变量时出错

Php 从服务访问变量时出错,php,Php,我是PHP新手。我在登录时遇到问题 login.php $email = $password = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $email = filter_var($_POST["email"], FILTER_SANITIZE_STRING); $password = filter_var($_POST[&q

我是PHP新手。我在登录时遇到问题

login.php

 $email = $password = "";
 if ($_SERVER["REQUEST_METHOD"] == "POST") {          
   $email = filter_var($_POST["email"], FILTER_SANITIZE_STRING);
    $password = filter_var($_POST["password"], FILTER_SANITIZE_STRING);
    require_once './Model/Member.php';
    $member = new Member();
    $isValidLogin = $member->loginMember($email, $password);   
    if($isValidLogin==true) // getting the exception here
    {
      // redirect to dashboard page                                     
    } else{
      // Invalid login                              
    }
}
会员服务

public function loginMember($email, $password)
{
        $loginUserResult = $this->ValidateUser($email, $password);
        return $loginUserResult;
}
单击“登录”按钮时,我收到以下错误消息:

Trying to access array offset on value of type null

我在这里做错了什么?

您试图在变量为null(很可能未声明/实例化)时将其用作数组。例如:

$_SERVER['REQUEST_METHOD']; // you expect $_SERVER to be an array and have a key 'REQUEST_METHOD'. $_SERVER is most probably not throwing an error as this can be expected to be set.
$_POST['email']; // you expect $_POST to be an array that has 'email' as a key. This is most likely your culprit, as this variable is null when you have no post.
要避免抛出此错误,请在将变量用作数组之前检查变量是否确实已设置,以及它们是否为数组

if(is_array($_POST))
{
    if(isset($_POST['email']))
    //do something
}

如果您没有将post作为表单操作,那么很明显,您的表单将使用GET发布变量,GET很可能会将变量放入您的url中(例如)。

谢谢大家。我终于找到了解决办法:

在验证方法中:

$loginUserResult = $this->getMember($email);
此处$loginUserResult为空,在下一行中,我们尝试访问电子邮件:

$loginUserResult[0]["email"]

我们必须添加null异常处理来解决问题。

在哪里声明
$email
$password
?@SimoneRossaini:更新了代码哪一行抛出错误,准确地说?@ADyson:登录页面中的它。我已经以评论的形式提到了这句话。@KhajaMoinuddin你确定吗?我认为这是不可能的,因为,
$isValidLogin
可能是一个布尔值(我说的对吗?),而且无论如何,你不会试图把它当作一个访问数组来处理,而在它里面有一个索引。在未使用任何数组语法的行中,无法获取有关数组的错误。我将post作为表单操作。根据编辑中添加的信息,似乎是loginMember()方法导致了错误,因为您声称抛出错误的行不可能导致错误。您能在ValidateUser()方法中显示代码吗?做得好。请接受你自己或我的答案,以表明它有一个被接受的答案:)@stef:谢谢你的帮助!当我调试代码时,异常并没有发生在成员服务中,而是发生在login.php中。很奇怪。