我对PHP和MVC相当陌生。我不想使用任何框架,如CodeIgniter或Laravel。我想从头开始学习。我正试图使登录页面。下面是我的代码:
HTML代码:
<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();
}
}
?>
我也有点卡住了,我有三个问题:
- 在HTML代码中,我把for action="在表单标签中放什么?
- 在我的类Text.class.php中,我把什么放在__construct中?
- 在我的模型代码中,我如何将"登录成功!"或"用户名或密码错误"传递给视图并将其插入"?
如果可以的话,请告诉我回答我的问题,告诉我我做错了什么(如果我做错了什么)。
谢谢大家!
- 没什么,这个类根本不应该存在。验证应该在模型层中完成,最好在相关的域对象中完成。您的控制器应该将用户名和密码传递给身份验证服务(这是模型层的一部分)。然后,视图应该要求来自身份验证服务的关于用户帐户的信息(如果身份验证失败,它将返回
null
或异常)。此外,您应该散列用户密码或获得一个新的爱好。