2017-02-22 20 views
0

私は、ユーザー名とパスワードの入力をデータベースと照合してユーザーを認証しようとしています。パスワードはSHA1です。ここでは、関連するコードがあります:認証のためのユーザー名とパスワードを取得する

public function init() 
{ 
    $bootstrap = $this->getInvokeArg('bootstrap'); 
    $this->db = $bootstrap->getResource('auth'); 
    $this->session = new Zend_Session_Namespace('login'); 
    if(isset($this->session->isLogin)){ 
     $this->_helper->redirector('/guestbook'); 
    } 
} 

public function validAction() 
{ 
    if(!isset($this->session->isLogin)){ 
     $username = mysql_escape_string($_POST['username']); 
     $password = mysql_escape_string($_POST['password']); 

     $login = $this->loginLocal($username, $password); 
     if($login['username']!=''){ 
      echo '{success:true, result:{message:\'Welcome, '.$username.'!\'}}'; 
     } else { 
      echo '{success:false, errors:{reason:\'Login failed, try again.\'}}'; 
     } 
    } 
} 

private function loginLocal($username, $password) { 
    $sql = "SELECT * FROM USER WHERE username = '".$username."' AND password = SHA1('".$password."')"; 

    $fetch = $this->db->query($sql); 
    $login = $fetch->fetch(); 

    return $login; 
} 

をしかし、それは投げエラーで、働いていない「非オブジェクトのメンバ関数のクエリ()の呼び出し」。このクエリのエラーですか、何か、私はそれを把握していません。何か助けていただきありがとうございます。

UPDATE:ここで私はinit関数とvalidAction機能を追加し

。私はNetbeansでZend Frameworkを使用しています。確かに、$ this-> dbはNULLなので、どのように初期化できますか?ありがとうございました。

+0

ポストする必要があります。この

$db=new mysqli($server,$user,$pass,$databaseName) or die("Database error :".$db->error); 

のようにそれを実行してください> db、何とか$ this-> dbと思われます。これはPDOドライバで初期化されていません –

+0

'$ this-> db'は初期化されていますか? 'var_dump($ this-> db)'を実行してみてください。 – MicSokoli

+0

エラーは何が間違っているかを示しています。これはクエリエラーではなく、オブジェクトではないものに対して 'query()'関数を実行しようとしているということです。基本的に '$ this-> db'は@MicSokoliという名前のオブジェクトではなく、初期化されていないことを意味します。 – BizzyBob

答えて

0

あなたのデータベース接続が

が初期化されていません。そして、あなたのクエリは内部の$ this - 何だ、クラス全体またはコードブロック

$fetch = $db->query($sql); 
関連する問題