CodeIgniter函数没有参数

时间:2012-07-24 17:56:32

标签: php oop codeigniter function

我定义了这个功能

function login_user($emailusername, $password) { }

该函数使用变量但是,当我尝试使用

调用它时
$this->login->login_user('username', 'password');

它返回一个错误,说明这些变量在函数中是未定义的。

编辑:我在登录模型中设置了该功能

我收到这些错误:

  

遇到PHP错误   严重性:注意   消息:未定义的索引:密码   文件名:models / login.php   行号:20

     

第20行:$ pass = crypt($ password,$ hash ['password']);

     

遇到PHP错误   严重性:注意   消息:未定义的索引:用户名   文件名:models / login.php   行号:26

     

第26行:if($ user_data ['username'] == $ emailusername || $ user_data ['email'] == $ emailusername){

     

遇到PHP错误   严重性:注意   消息:未定义的索引:电子邮件   文件名:models / login.php   行号:26

     

第26行:if($ user_data ['username'] == $ emailusername || $ user_data ['email'] == $ emailusername){

这是功能

     function login_user($emailusername, $password) {
        //To initiate session set this cookie
        $query = $this->db->query("SELECT password FROM usrs WHERE username = '$emailusername' or email = '$emailusername'"); 

        $hash = $query->result();

        $pass = crypt($password, $hash['password']);

        $nq = $this->db->query("SELECT usr_id, username, email from usrs WHERE email = '$emailusername' or username = '$emailusername' and password = '$pass'");
        $user_data = $nq->result(); 

        if($emailusername&&$password) {
            if ($user_data['username'] == $emailusername || $user_data['email'] == $emailusername) {
                if($hash['password'] == $pass) {

                    $_SESSION['login'] = True;
                    $_SESSION['uid'] = $user_data['usr_id'];
                    $_SESSION['username'] = $user_data['username'];


                    return True;
                } else
                    return False; 
            } else
                return False;
        } else 
            return False; 
    }

3 个答案:

答案 0 :(得分:1)

此错误不在您的变量中。 $ hash表中没有索引calldes'password'; 首先检查你的$ hash表。

$hash = $query->result();

函数返回对象数组包含

$hash->password = '';

如果想获得单行而结果是数组使用row_array()函数

$hash = $query->row_array();

返回

$hash['password']

答案 1 :(得分:1)

问题源于这一行:

$hash = $query->result();

As per the documentationresult()执行以下操作:

  

此函数在失败时将查询结果作为对象空数组的数组返回。通常你会在foreach循环中使用它......

因此,$hash不包含名为passwordusernameemail的索引 - 因此您收到错误消息。

如果您只关心从该查询返回的第一行(这是我的假设),您可以使用row_array()仅返回第一条记录,作为数组,这将使这些指数可用,如下:

$hash = $query->row_array();
// $hash['password'], $hash['username'], and $hash['email'] are now available

答案 2 :(得分:0)

考虑到您使用的是codeignitor,如果该功能位于控制器“Login”中,请使用

$this->login_user('username', 'password');

如果函数在库中,那么请确保已加载库并且实例的名称为“login”

如果你直接包含了文件,那么只需创建一个对象并调用方法

$loginObj = new login();
$loginObj->login_user('username', 'password');

干杯,

吠陀