PHP错误 - 不能将标量值用作数组

时间:2015-08-08 10:49:29

标签: php codeigniter

您好我是codeigniter框架的初学者,我遇到了一些问题。

在我的索引页面上,我有登录表单,当用户插入用户名和密码并单击提交按钮时,他调用控制器的方法登录,其任务是从表单收集用户名和密码,并将数据传递给模型方法“login($ username,$ password)“然后models方法返回true或false,具体取决于我们是否在数据库中有有效用户,然后控制器的方法要么进一步传递用户,要么在开始时返回给他。 我的问题是我想知道用户的访问级别,我在模型中创建了这个方法

public function users_level($username){

    $query = $this->db->get_where('users',array('username' => $username) );

    $users_level = $query->result();    // I tried with these too $users_level[] = $query->result();    

    return $users_level;
}

我希望返回用户的访问级别,并使用该信息来确定为该特定用户显示的视图。

这是来自控制器的登录方法:

public function login(){
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        $this->load->model('model_user');
        $result = $this->model_user->login($username,$password);
        if ($result == true){     
                $result['level'] = $this->model_user->users_level($username);    //i believe that mistake is maybe in this line
                $this->welcome();   //I'm going to send information to welcome method about users level of access                  
            }else if ($result == false){
                $this->index();
            }
}

这是一个错误发生

Severity: Warning

Message: Cannot use a scalar value as an array

Filename: controllers/controler_user.php

Line Number: 33

Backtrace:

File: C:\wamp\www\ci_project_2015\application\controllers\controler_user.php
Line: 33
Function: _error_handler

File: C:\wamp\www\ci_project_2015\index.php
Line: 292
Function: require_once

1 个答案:

答案 0 :(得分:1)

当您已将$result初始化为布尔值时,尝试将其用作数组。您可以使用以下命令将其重新初始化为数组:

$result = array('level' => $this->model_user->users_level($username));

$result = array();
$result['level'] = $this->model_user->users_level($username);

然而,这是一个坏主意,因为您对不同的事物使用相同的变量。更好的解决方案是重命名其中一个变量,例如

$logged_in = $this->model_user->login($username,$password);
if ($logged_in == true){

或者更好的是,由于布尔值仅被使用一次,因此您可以跳过$logged_in的初始化并直接在条件中使用$this->model_user->login($username,$password)的结果

if ($this->model_user->login($username,$password)) {

您可以省略== true,因为它返回一个布尔值。