-1

この関数を定義しました

function login_user($emailusername, $password) { }

関数は変数を使用しますが、使用して呼び出そうとすると

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

これらの変数が関数内で定義されていないというエラーが返されます。

EDIT:ログインモデルで機能を設定しました

次のエラーが表示されます。

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 エラーが発生しました 重大度: 通知メッセージ: 未定義 インデックス: email ファイル名: 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という名前のインデックスが含まれていないため、受け取ったエラー メッセージが表示されます。passwordusernameemail

そのクエリから返された最初の行のみに関心がある場合 (これは私の仮定です)、次のよう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');

関数がライブラリにある場合は、ライブラリがロードされていて、インスタンスの名前が「login」であることを確認してください。

ファイルを直接インクルードした場合は、オブジェクトを作成してメソッドを呼び出すだけです

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

乾杯、

ヴェダント

于 2012-07-24T19:05:37.387 に答える