2017-01-21 153 views
0

我有這樣的登錄系統,當我的模型鏈接到我的控制器,該控制器不能得到模型中的變量是$用戶名,密碼$等 如何處理正確方式這個模型和控制器?我沒有使用任何框架只是純粹的PHP,只是遵循mvc模式。PHP MVC模型傳遞到控制器

當我運行它關係到無效的用戶名的密碼或密碼

模型

require_once("db.php"); 

class loginModel{ 

    public function __construct(){ 
     $dbCon = new DbConnector(); 
     $this->dbCon = $dbCon->getConnection(); 
    } 

    public function queryUser($username, $password){ // use parameters 
     $username = mysqli_real_escape_string($this->dbCon, $username); 
     $password = mysqli_real_escape_string($this->dbCon, sha1($password)); 
     $empty = "da39a3ee5e6b4b0d3255bfef95601890afd80709"; 

     $myQuery = "SELECT * FROM login WHERE username = '".$username."' and password = '".$password."'"; 
     $results = $this->dbCon->query($myQuery); 
     return $results->fetch_array(); // return the result 

     if(empty($username) or $password == $empty){ 
      return "Username or Password is empty"; 
     }elseif($username == $row['username'] and $password == $row['password']){ 
     if($results->num_rows == 1){ 
      session_start(); 
      $_SESSION['user'] = $username; 
      header('Location: ../view/index.php'); 
     }else{ 
      return "Login Unsuccessful"; 
     } 
     }else{ 
      return "Invalid Username or Password"; 
     } 
    } 

}

控制器

require_once("../model/loginModel.php"); 

class loginController{ 
    public $loginModel; 
    public function __construct(){ 
    $loginModel = new loginModel(); // create object of model 
} 

    public function select(){ 
     $userData = $this->loginModel->queryUser($_POST['username'], $_POST['password']); 

     if($userData) { 
      session_start(); 
      $_SESSION['user'] = $userData; 
      header('Location: ../view/index.php'); 
     } else { 
      return "Invalid Username or Password"; 
     } 
    } 
} 
$loginController = new loginController(); 
$loginController->select(); 
+0

您還沒有返回從函數queryUser()的值。只需在函數queryUser()'的末尾返回像這樣的'return $ row;'行即可。 –

+0

我加回來$ row;我仍然收到用戶名或密碼爲空,當我試圖把這一個回聲$ row ['username'];在函數queryUser()的末尾,即時獲取用戶輸入。 @AmanRawat –

+0

不,你不能這樣做。您已將'$ this-> query'中的值分配給不在行中。所以你必須檢查'$ this-> query ['username']'insted to'$ row ['username']' –

回答

0

有在你的代碼中的許多問題。

第一個:empty($username)將始終返回false,因爲您尚未在該函數中定義$ username。

第二個:變量$row['username']在不同的功能你不能訪問局部變量之外。

require_once("db.php"); 

class loginModel{ 

    public function __construct(){ 
     $dbCon = new DbConnector(); 
     $this->dbCon = $dbCon->getConnection(); 
    } 

    public function queryUser($username, $password){ // use parameters 
     $username = mysqli_real_escape_string($this->dbCon, $username); 
     $password = mysqli_real_escape_string($this->dbCon, sha1($password)); 
    $empty = "da39a3ee5e6b4b0d3255bfef95601890afd80709"; 

     $myQuery = "SELECT * FROM login WHERE username = '".$username."' and password = '".$password."'"; 
     $results = $this->dbCon->query($myQuery); 
     return $results->fetch_array(); // return the result 
     // do the validation and exception handling too 
    } 
} 

控制器:

//require_once("../model/db.php"); No need to imprt this 
require_once("../model/loginModel.php"); 

class loginController{ 
    $loginModel; 
    public function __construct(){ 
     $loginModel = new loginModel(); // create object of model 
    } 

    public function select(){ 
     $userData = $this->loginModel->queryUser($_POST['username'], $_POST['password']); 

     if($userData) { 
      session_start(); 
       $_SESSION['user'] = $userData; 
       header('Location: ../view/index.php'); 
     } else { 
      return "Invalid Username or Password"; 
     } 
    } 
} 
+0

我編輯的基礎上你的答案。我想知道爲什麼突然發生致命錯誤:在第7行的C:\ xampp \ htdocs \ OOP \ model \ loginModel.php中找不到類'DbConnector'。但在它不是那樣的之前。 –

+0

但我確定他們在同一個文件夾中。 loginModel.php和db.php –

+0

把這個'require_once(「../model/db.php」);'回到控制器 –

相關問題