-1

我定义了这个函数

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; 
    }
4

3 回答 3

1

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

$hash = $query->result();

函数返回对象数组组成

$hash->password = '';

如果要获得单行并且结果是数组,请使用 row_array() 函数

$hash = $query->row_array();

这返回

$hash['password']
于 2012-07-24T19:43:11.580 回答
1

问题源于这一行:

$hash = $query->result();

根据文档result()执行以下操作:

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

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

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

$hash = $query->row_array();
// $hash['password'], $hash['username'], and $hash['email'] are now available
于 2012-07-24T19:48:26.090 回答
0

考虑到您正在使用 codeignitor,如果该功能在控制器“登录”中,则使用

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

如果函数在库中,请确保您已加载库并且实例的名称是“登录”

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

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

干杯,

韦当

于 2012-07-24T19:05:37.387 回答