gpt4 book ai didi

php - MVC - 将表单提交给 Controller 或模型

转载 作者:行者123 更新时间:2023-12-05 09:22:47 27 4
gpt4 key购买 nike

我正在尝试在没有任何框架的情况下将简单的 MVC 模式应用于我当前的网站。因为我还没有真正进入 oop,但我目前仍在使用过程。

我有一个简单的登录表单( View )

<form action="controller/login.php" method="Post">
<input type="text" name="username" placeholder="Username" />
<input type="text" name="password" placeholder="Password" />
<input type="submit" value="Sign in" />
</form>

此表单将提交给登录表单的 Controller 。 Controller 现在将检查两个字段是否都有输入并或多或少地“清理”输入

if(isset($_POST['username'])){
$username = $_POST['username'];
$password = $_POST['password'];
$username_escape = mysqli_real_escape_string($connect, $username);
$password_escape = mysqli_real_escape_string($connect, $password);
}

header("../model/login.php");

现在这是一个非常简单的检查,但是我现在想知道我应该将 Controller 包含到模型中并从 Controller 重定向到模型,还是首先提交表单并包含 Controller 。

模型

include_once("../controller/login.php");
$query = mysqli_query($connect, "INSERT into DB_table (username, password)
VALUES($username_escape, $password_escape)");

最佳答案

尝试分离您的关注点很好,但 MVC 是一种基于 OOP 原则的设计模式。

OOP 与对象一起工作,这些对象由一个类定义,就像一个蓝图。

所以在这个例子中,你希望一切都通过 Controller ,然后根据你是否想要保存,你想要调用模型。

例如。

class LoginController
{
public function indexAction()
{
$username = $_POST['username'];
$password = $_POST['password'];

if(!is_null($username) AND !is_null($password))
{
$user = new \Service\User();
$credentialsAreValid = $user->checkCredentials($username, $password);
if($credentialsAreValid)
{
header("Redirect: Somewhere");
}
}

require_once __DIR__."/../templates/login.php";
}
}

class User
{
public function checkCredentials($username, $password)
{
$dsn = "mysql:host=localhost;dbname=db";
$dbuser = "root";
$dbpass = "pass";
$db = new PDO($dsn, $dbuser, $dbpass);

$sth = $db->prepare("SELECT * FROM user WHERE username = ? AND password = ?");
$sth->bindValue(1, $username);
$sth->bindValue(2, $password);

$sth->execute();
if(count($sth->fetchAll())>0) return true;
return false;
}
}

如您所见,逻辑被分离到一个服务中,并且仅在需要时调用。我们还使用 PDO 来防止 SQL 注入(inject),(尽管实际上不应该在这里创建对象)。

我建议您研究一下自动加载,并尝试使用像 Silex 这样的框架,因为它会教给您这些原则。

关于php - MVC - 将表单提交给 Controller 或模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com