我正在允许管理候选人的网站上工作。 多种功能已经投入使用,例如高级搜索,带有ajax的候选动态列表,排序,以GDPR格式导出zip格式的候选内容。但是,目前还没有开发任何体系结构。 因此,从我的登录表单中,我想添加MVC体系结构。
我是否正确的假设是,模型将包含SQL select语句,控制器将处理数据,例如if(isset($ _ POST [“ identity”])){并且视图将包含基本HTML格式用户将在哪里输入数据?
问题在于,从我现有的文件中,我看不到如何添加MVC。
我的config.php最终将变成model.php,index.php,login.php是视图,但是对于控制器,我却陷入困境! :/
配置。 php:
set_5
login.php:
<?php
$host = '127.0.0.1';
$db = 'candidates';
$user = 'root';
$pass = '';
$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,
];
try
{
$cnx = new PDO($dsn, $user, $pass, $opt);
}
catch(PDOException $e)
{
die('Connection failed :'. $e->getMessage());
}
?>
checkLogin.php
<?php
session_start();
include('template.php');
if(isset($_SESSION['flash']))
{
foreach($_SESSION['flash'] as $type => $message)
{
echo $message;
}
unset($_SESSION['flash']);
}
if(isset($_SESSION['user']))
{
header('Location: ../index.php');
}
?>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<div class="container">
<div id="container">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href=""><img id="imgNavbar" src="../img/candidacy.jpg" alt="Home"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="../index.php">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item" style="margin-left: 0px">
<a class="nav-link" href="login.php">Connect</a>
</li>
</ul>
</div>
</nav>
</div>
<form method="post" action="checkLogin.php">
<div class="container">
<div class="card card-container">
<img id="profile-img" class="profile-img-card" src="../img/avatar.png" />
<p id="profile-name" class="profile-name-card"></p>
<form class="form-signin">
<span id="formIdentity" class="formIdentity"></span>
<input type="text" id="identity" name="identity" class="form-control" placeholder="Your identity" autofocus>
<input type="password" id="password" name="password" class="form-control" placeholder="Your password">
<button class="btn btn-lg btn-primary btn-block btn-signin" type="submit" id="submitBtn" name="submit" onclick="checkForm(this)">Connect</button>
</form><!-- /form -->
<a href="forgotPassword.php" class="forgot-password">
Forgot password ?
</a>
</div><!-- /card-container -->
</div><!-- /container -->
</form>
</div>
</body>
</html>
index.php:
<?php
require('config/config.php');
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
{
if(isset($_POST['identity']) && isset($_POST['password']))
{
$stmt = $cnx->prepare("SELECT * from users WHERE nameUser = :username");
$stmt->bindValue(':username', $_POST['identity'], PDO::PARAM_STR);
$stmt->execute();
$users = $stmt->fetch(PDO::FETCH_ASSOC);
$result = $stmt->rowCount();
if($result > 0)
{
if(password_verify($_POST['password'], $users['passwordUser']))
{
$token = bin2hex(random_bytes(64));
$_SESSION['user'] = $users;
$_SESSION['token'] = $token;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (120 * 60);
header('Location: ../index.php');
}
else
{
$_SESSION['flash']['info'] = "<div class='alert alert-danger'>Check your information !</div>";
header('Location: ../login.php');
exit(0);
}
}
else
{
$_SESSION['flash']['connect'] = "<div class='alert alert-danger'>Non-existent user !</div>";
header('Location: ../login.php');
exit(0);
}
$stmt->closeCursor();
}
if(empty($_POST['identity']) || empty($_POST['password']))
{
$_SESSION['flash']['empty'] = "<div class='alert alert-danger'>Fill in the fields please !</div>";
header('Location: ../login.php');
exit(0);
}
}
?>
答案 0 :(得分:0)
实际上,我相信您不只是学习如何将MVC应用于特定问题,而且还可以学习背后的概念和理论。您可以在here中查找基础。
此外,通常建议使用框架,这样您就不会无意间破坏某些设计模式概念。
关于您的情况,我会这样处理:
型号:
控制器:
观看次数: