PHP MVC - 这是做模型,视图,控制器的正确方法吗?我做错了吗?

时间:2016-11-07 19:18:05

标签: php authentication

我是PHP和MVC的新手。我不想使用任何框架,如CodeIgniter或Laravel。我想从头开始学习这个。我正在尝试创建一个登录页面。所以这是我的代码:

HTML code:

<html>
<body>

<h2></h2>

<form action="" method="post">
  <input type="text" name="username">
  <input type="text" name="password">
  <input type="submit" value="Login">
</form>

</body>
</html>

Text.class.php代码:

<?php

    class Text {
        function __construct()
        {
        }

        private function sanitize($text) {
            $sanitizedText = htmlspecialchars($text, ENT_QUOTES);
            return $sanitizedText;
        }
    }

?>

数据库连接代码(connection.php):

<?php
class Connection {

    public function dbc() {
        $host = 'localhost';
        $db = 'database1';
        $user = 'root';
        $pass = 'password123';
        $charset = 'utf8';

        $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
        $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        return new PDO($dsn, $user, $pass, $opt);
    }
}
?>

控制器代码(LoginController.php):

<?php
include_once('Text.class.php');

class LoginController {
    private $model;

    public function __construct() {
        $this->model = new LoginModel();
    }

    public function login($usernameOrEmail, $password) {
        $usernameOrEmail = sanitize($usernameOrEmail);
        $password = sanitize($password);

        if(!empty($usernameOrEmail) && !empty($password)) {
            if(isset($_POST['usernameOrEmail']) && isset($_POST['password'])) {
                $usernameOrEmail = $_POST['usernameOrEmail'];
                $password = $_POST['password'];
                $this->model->loginUser($usernameOrEmail, $password);
            } else {
                return "Please enter a username or password.";
                die();
            }
        } else {
            return "Please enter a username or password.";
            die();
        }
    }
}
?>

型号代码(LoginModel.php):

<?php
include_once('connection.php');

class LoginModel() {
    private $dbc;

    private function loginUser($usernameOrEmail, $password) {
        $stmt = $this->dbc->prepare("SELECT username, password FROM users WHERE username = :usernameOrEmail OR email = :usernameOrEmail AND password = :password");
        $stmt->bindParam(':usernameOrEmail', $usernameOrEmail, PDO::PARAM_STR);
        $stmt->bindParam(':password', $password, PDO::PARAM_STR);
        $stmt->execute();
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if($row) {
            return "Login successful!"
        } else {
            return "Wrong username or password.";
            die();
    }
}
?>

我也有点困惑,我有3个问题:

  1. 在HTML代码中,我在表单标记中添加了什么操作=“”?
  2. 在我的班级Text.class.php中,我应该在__construct中添加什么?
  3. 在我的模型代码中,我如何通过“登录成功!”或“用户名或密码错误”。到视图并将其插入“”?
  4. 如果可以,请告诉我回答我的问题并告诉我我做错了什么(如果我做错了什么)。

    谢谢大家!

0 个答案:

没有答案