2017-01-21 3 views
0

Ich habe dieses Login-System, wenn ich das Modell mit meinem Controller verknüpfen, kann der Controller nicht die Variablen des Modells, das ist $ username, $ Passwort usw. Wie zur richtigen Handhabung Dieses Modell und Controller? Ich benutze kein Framework nur reines PHP und nur nach dem MVC-Muster.MVC PHP Modell an Controller übergeben

Wenn ich führen Sie den Code, um es zu Benutzername oder Passwort ungültig

Modell

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"; 
     } 
    } 

}

Controller

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

Sie haben nicht den Wert aus der Funktion queryUser() zurückgegeben wird. Geben Sie einfach die Zeile wie diese 'return $ row;' am Ende Ihrer Funktion 'queryUser()' zurück. –

+0

Ich füge return $ row hinzu; Ich bekomme immer noch Benutzername oder Passwort ist leer, als ich versucht habe, diese eine echo $ row ['username']; am Ende der Funktion queryUser(), ich bekomme die Benutzereingabe. @ AmanRawat –

+0

Nein, das kann man nicht tun. Sie haben die Werte in '$ this-> query' nicht in der Zeile zugewiesen. Also musst du nach '$ this-> query ['username']' 'statt $' row ['username'] '' –

Antwort

0

Es gibt viele Probleme im Code geht.

Erstens:empty($username) wird immer false zurückgeben, da Sie $ username in dieser Funktion nicht definiert haben.

Zweite: Variable $row['username'] In verschiedenen Funktionen können Sie nicht auf lokale Variable außerhalb zugreifen.

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 
    } 
} 

Controller:

//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

Ich habe die Post Base auf deine Antwort bearbeitet. Ich frage mich, warum plötzlich Fatal error: Klasse "DbConnector" nicht in C: \ xampp \ htdocs \ OOP \ model \ loginModel.php in Zeile 7 gefunden. Aber vorher ist es nicht so. –

+0

Aber ich bin mir sicher, dass sie sich im selben Ordner befinden. loginModel.php und db.php –

+0

Setzen Sie diese 'require_once (" ../ model/db.php ");' zurück in den Controller –

Verwandte Themen