【问题标题】:MVC php passing model to controllerMVC php将模型传递给控制器
【发布时间】:2017-01-21 05:51:12
【问题描述】:

我有这个登录系统,当我将模型链接到我的控制器时,控制器无法获取模型的变量 $username、$password 等。 如何正确处理此模型和控制器?我没有使用任何框架,只是纯 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();

【问题讨论】:

  • 您还没有从函数 queryUser() 返回值。只需在函数queryUser() 的末尾返回这样的行return $row;
  • 我添加了 return $row;当我尝试输入这个 echo $row['username']; 时,我仍然收到用户名或密码为空。在函数 queryUser() 结束时,我正在获取用户输入。 @AmanRawat
  • 不,你不能那样做。您已在 $this->query 中分配值,而不是在行中。所以你必须检查$this->query['username'] insted 到$row['username']
  • 我认为第一个问题是 $username 和 $password,因为这个 if(empty($username) or $password == $empty){ } 这个总是返回 false @AmanRawat

标签: php model-view-controller


【解决方案1】:

你的代码有很多问题。

首先: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";
        }
   }
}

【讨论】:

  • 我根据您的回答编辑了帖子。我想知道为什么突然出现致命错误:第 7 行的 C:\xampp\htdocs\OOP\model\loginModel.php 中找不到 Class 'DbConnector'。但之前不是这样。
  • 但我确定它们在同一个文件夹中。 loginModel.php 和 db.php
  • 把这个require_once("../model/db.php");放回控制器
  • 我在你说之前做过,现在这是错误致命错误:在第 9 行调用 C:\xampp\htdocs\OOP\controller\loginController.php 中的未定义函数 queryUser()
  • 并且在return语句之后你不能做任何事情。这是一个无法访问的代码。
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多