2017-01-03 3 views
1

私はPDOを使い始めましたが、データを取得しようとしていますが、私の登録は完璧ですが、ログインの詳細を入力するときに間違った詳細が表示されます。私はここにコードをつけています。あなたがテストする前store_result()を実行しない限り、doLoginへ 接続ファイル私はpdo sqlsrvを使ってログインを作成しようとしています

class Database { 
    private $host = "*****"; 
    private $dbname = "*****"; 
    private $username = "*****"; 
    private $password = "*****"; 
    public $conn; 

    public function dbConnection() { 
     $this->conn = null;  
     try { 
      $this->conn = new PDO("sqlsrv:Server=" . $this->host . ";Database=" . $this->dbname, $this->username, $this->password); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $exception) { 
      echo "Connection error: " . $exception->getMessage(); 
     } 

     return $this->conn; 
    } 
} 

私のクラス

require_once('dbconfig.php'); 

class USER {  
    private $conn; 

    public function __construct() { 
     $database = new Database(); 
     $db = $database->dbConnection(); 
     $this->conn = $db; 
    } 


    public function doLogin($uname,$umail,$upass) { 
     try { 
      $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email, user_pass FROM cust WHERE user_name=:uname OR user_email=:umail "); 
      $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
      if($stmt->rowCount() == 1) { 
       if(password_verify($upass, $userRow['user_pass'])) { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } else { 
        return false; 
       } 
      } 
     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 
} 

コール()

<?php 
    session_start(); 
    require_once("class.user.php"); 
    $login = new USER(); 

    if($login->is_loggedin()!="") 
    { 
    $login->redirect('services.php'); 
    } 

    if(isset($_POST['btn-login'])) 
    { 
    $uname = strip_tags($_POST['txt_uname_email']); 
    $umail = strip_tags($_POST['txt_uname_email']); 
    $upass = strip_tags($_POST['txt_password']); 

    if($login->doLogin($uname,$umail,$upass)) 
    { 
     $login->redirect('services.php'); 
    } 
    else 
    { 
     $error = "Wrong Details !"; 
    } 
    } 
?> 
+0

は、どのようにパスワードを保存しているんだろうか?あなたは 'password_hash()'を使っていますか? –

+0

なぜ、あなたはユーザークラスでdb接続の新しいオブジェクトを作っていますか?ユーザークラスでdbクラスを拡張する方が簡単です。 – SuperDJ

+1

どこでも 'doLogin()'が呼び出されることはありません。それはまた役に立つと思うかもしれない – RiggsFolly

答えて

1

$stmt->rowCount()は、いくつかのケースで有効な結果を返しません。 SELECTから返された行の数。

require_once('dbconfig.php'); 

class USER {  
    private $conn; 

    public function __construct() { 
     $database = new Database(); 
     $db = $database->dbConnection(); 
     $this->conn = $db; 
    } 


    public function doLogin($uname,$umail,$upass) { 
     try { 
      $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email,user_pass 
             FROM cust 
             WHERE user_name=:uname 
              OR user_email=:umail "); 
      $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 

      // new line 
      $stmt->store_result(); 

      if($stmt->rowCount() == 1) { 
       // moved inside if as no point reading result unless one exists 
       $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

       if(password_verify($upass, $userRow['user_pass'])) { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } else { 
        return false; 
       } 
      } else { 
       return false; 
      } 
     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 
} 

代わりに、あなただけの

public function doLogin($uname,$umail,$upass) { 
     try { 
      $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email,user_pass 
             FROM cust 
             WHERE user_name=:uname 
              OR user_email=:umail "); 
      $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 

      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

      if(!empty($userRow)) { 

       if(password_verify($upass, $userRow['user_pass'])) { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } else { 
        return false; 
       } 
      } else { 
       return false; 
      } 
     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 
} 
+0

ありがとう、それは働いた。 :) –

関連する問題