使用json时尝试获取非对象错误的属性

Posted

技术标签:

【中文标题】使用json时尝试获取非对象错误的属性【英文标题】:Trying to get property of non-object error when using json 【发布时间】:2016-04-15 04:08:33 【问题描述】:

我不断收到以下错误

通知:试图在D:\XAMPP\htdocs\website\php\login.php中获取非对象的属性 4注意:试图获取D:\XAMPP\htdocs\website\php\login.php中非对象的属性上线5

我正在使用 AngularJS 从表单中获取输入,使用 console.log 函数将数据发送到 php 并使用 php 解码 json 文件,然后检查数据库以查找与输入值匹配的信息。

JS:

$scope.login = function(acc) 
    console.log(acc);//getting data input by user

    //post is used to create
    $http.post('php/login.php', 'user': $scope.acc.user, 'pass': $scope.acc.pass).success(function(data) 
        console.log(data);
        if (data) //row inserted
          // if not successful, bind errors to error variables
          console.log("Succesful");
          $scope.insertMessage = "Data inserted";
         else 
          // if unsuccessful, bind success message to message
          $scope.insertMessage = "Data not inserted";
        
        $scope.acc="";//reset values in form to empty
        //redirect to list
    );

    $http.get('php/login.php').success(function(logged)
            $scope.loggedin = logged;
            console.log($scope.loggedin);
      )
      .error(function(err)
          $log.error(err);
      );   
;

PHP:

<?php
$data = json_decode(file_get_contents("php://input"));

$user = $data->user;
$pass = $data->pass;

require_once("connection.php");

$conn = connectToDb();
$query= "SELECT count(*) 
FROM tbl_logdetails 
WHERE username = '$user' and password = '$pass'";
$result = mysqli_query($conn, $query) 
    or die("error in query: ".mysqli_error($conn));
$row = mysqli_fetch_row($result);
$count = $row[0];

echo $count;

if($count == 0)
    $logged = false;
else
    $logged=true;

echo json_encode($logged);

?>

任何帮助将不胜感激。

【问题讨论】:

var_dump $data = json_decode(file_get_contents("php://input")); 的结果,你得到了什么?这就是您的问题所在。 @ChrisTrudeau object(stdClass)#1 (2) ["user"]=> string(5) "admin" ["pass"]=> string(3) "123" 如果这是输出,你应该有什么工作,你把 var_dump 放在不工作的确切代码中并运行它? @ChrisTrudeau 是的,这就是控制台的样子:gyazo.com/0a38ca0d2dec8996b74d869764298808。我只是注意到登录功能似乎运行了两次,但无法理解为什么会发生这种情况。 @ChrisTrudeau 直到“成功”通知一切正常。 【参考方案1】:

$http.get 是多余的,并且在没有提供任何参数的情况下再次执行 login.php,删除 $http.get 是解决方案...

$scope.login = function(acc) 
    console.log(acc);//getting data input by user

    //post is used to create
    $http.post('php/login.php', 'user': $scope.acc.user, 'pass': $scope.acc.pass).success(function(data) 
        console.log(data);
        if (data) //row inserted
          // if not successful, bind errors to error variables
          console.log("Succesful");
          $scope.insertMessage = "Data inserted";
          $scope.loggedin = data;
            console.log($scope.loggedin);
         else 
          // if unsuccessful, bind success message to message
          $scope.insertMessage = "Data not inserted";
        
        $scope.acc="";//reset values in form to empty
        //redirect to list

    );
;

【讨论】:

【参考方案2】:

你不是用 POST 调用登录,然后一个接一个地用 GET 登录吗?并且您没有将任何内容传递给 GET 登录尝试,因此当您使用 json_decode 时不会传递任何内容。因此,您的脚本正在尝试 POST,但在 GET 尝试时打印出错误消息。

删除这部分:

$http.get('php/login.php').success(function(logged)
            $scope.loggedin = logged;
            console.log($scope.loggedin);
      )
      .error(function(err)
          $log.error(err);
      );   

【讨论】:

以上是关于使用json时尝试获取非对象错误的属性的主要内容,如果未能解决你的问题,请参考以下文章

当我的用户尝试登录到他们的仪表板时,出现尝试获取非对象错误的属性

从laravel控制器返回json时尝试获取非对象的属性“id”

如何解决 laravel 数据表中的“尝试获取非对象的属性‘名称’”错误?

获取此错误“尝试获取非对象的属性”的函数

错误:创建或保存数据时试图获取非对象的属性

试图从模型获取数据到视图,我得到这些错误: 试图获取非对象和未定义变量的属性