Php 一个文件来管理他们所有人
假设我的网站上有大约10个表单,我想用一个php文件(submit.php)处理它们的数据。所以Php 一个文件来管理他们所有人,php,html,Php,Html,假设我的网站上有大约10个表单,我想用一个php文件(submit.php)处理它们的数据。所以action=“./submit.php”在我所有的表单中 今天,当我提交表单时,我使用GET调用该php文件中的不同函数,例如action=“./submit.php?func=user”。这样submit.php就知道提交了什么表单。当然,表单使用POST作为方法 这样做不好吗?每个表单应该有一个.php文件吗?有更好的方法吗?复杂性: 它会很快变得毛茸茸的——形式越多,就越有趣 这就是为什么大多
action=“./submit.php”
在我所有的表单中
今天,当我提交表单时,我使用GET调用该php文件中的不同函数,例如action=“./submit.php?func=user”
。这样submit.php就知道提交了什么表单。当然,表单使用POST作为方法
这样做不好吗?每个表单应该有一个.php文件吗?有更好的方法吗?复杂性:
它会很快变得毛茸茸的——形式越多,就越有趣
这就是为什么大多数框架每个类使用一个文件,以及为什么大多数框架提供一个表单类来构建/验证/处理表单
这显然增加了文件夹结构的复杂性和文件的数量。它有时仅为约定目的生成文件,例如仅包含扩展其他类的空新类的文件
这是大多数人为“漂亮干净的建筑”付出的代价。它是可读的、标准化的(ish),其他开发人员都很熟悉
安全:
如果允许代码基于用户提供的数据运行任何函数,则可能存在安全漏洞。如果您还从用户提供的数据中获取参数,那么您基本上提供了一个开放的、不安全的RPC服务器
我可以运行?func=unlink¶m[0]=/etc/apache2/sites available/default
boom,下次重新启动时服务器将关闭
如果将$\u GET['func']
中的函数名与受限制的允许函数列表进行核对,例如在\u数组($\u GET['func'],数组('functionOne','functionTwo')中核对。那你就安全了
维护:
日复一日地工作MVC会扭曲人们对“必要”的看法。我要说的是,你“有必要”学习MVC,编写20个文件来完成与这一个文件相同的任务
另一方面,我一直在各种遗留项目上与您如出一辙,我说过“嗯,MVC并不总是必要的,我只是修补和修复这个东西,因为它现在速度更快”。我做了,我打了20-30次补丁,修复了一些东西,直到最初写20个文件的全部努力似乎都没有那么多
因此,在维护规模上,MVC是一项巨大的初始投资,无论您何时重新访问该项目,它都会带来巨大的投资回报
答复:
在我看来,结构有助于将这些表单分解为多个文件。即使您将请求提交到“submit.php”和“submit.php”,也会根据$\u GET
参数为每个表单包含相应的文件
此外,使用类和多态性。这将帮助您根据您尝试使用的类自动包含文件(了解和了解自动加载标准)
使用多态性,您的“submit.php”可能看起来很简单,如下所示:
// submit.php
/* some bootstrapping code you use to get your project settings up and running */
require_once('../bootstrap.php');
if(!empty($_GET['form']) and !empty($_GET['params'])) {
$formClass = $_GET['form'];
$params = $_GET['params'];
if(class_exists($formClass) and is_subclass_of($formclass, 'FormInterface')) {
$form = new $formClass;
if($errors = $form->validate($params)) {
$message = $form->process($params);
if($message === '') {
echo($message);
}
}
else {
echo('<ul class="errors">');
foreach($errors as $error) {
echo('<li>'.$error.'</li>');
}
echo('</ul>');
/* reprinting the form to allow the user to try again */
echo $form->toHtml();
}
}
else {
/* hack attempt? */
echo("The form you are submitting doesn't exist");
}
}
//submit.php
/*一些用于启动和运行项目设置的引导代码*/
需要一次_('../bootstrap.php');
如果(!empty($\u GET['form'])和!empty($\u GET['params'])){
$formClass=$_GET['form'];
$params=$_GET['params'];
如果(类_存在($formClass)并且是($formClass,'FormInterface')的子类_){
$form=新的$formClass;
如果($errors=$form->validate($params)){
$message=$form->process($params);
如果($message==''){
回声($信息);
}
}
否则{
回声('');
foreach($errors作为$error){
回声(“- ”.$error.
”);
}
回声(“
”);
/*重新打印表单以允许用户重试*/
echo$form->toHtml();
}
}
否则{
/*黑客企图*/
echo(“您提交的表单不存在”);
}
}
您不知道(或需要知道)什么是类$formClass
。自动加载程序知道类应该位于哪个文件夹中,以及它应该具有什么文件名。在自动加载器包含它之后,您可以开始使用它,例如,检查类是否实现了FormInterface
接口的所有功能,如果实现了,则可以安全地继续并尝试使用该类验证表单。复杂性:
它会很快变得毛茸茸的——形式越多,就越有趣
这就是为什么大多数框架每个类使用一个文件,以及为什么大多数框架提供一个表单类来构建/验证/处理表单
这显然增加了文件夹结构的复杂性和文件的数量。它有时仅为约定目的生成文件,例如仅包含扩展其他类的空新类的文件
这是大多数人为“漂亮干净的建筑”付出的代价。它是可读的、标准化的(ish),其他开发人员都很熟悉
安全:
如果允许代码基于用户提供的数据运行任何函数,则可能存在安全漏洞。如果您还从用户提供的数据中获取参数,那么您基本上提供了一个开放的、不安全的RPC服务器
我可以运行?func=unlink¶m[0]=/etc/apache2/sites available/default
boom,下次重新启动时服务器将关闭
如果将$\u GET['func']
中的函数名与受限制的允许函数列表进行核对,例如在\u数组($\u GET['func'],数组('functionOne','functionTwo')
中核对。那你就安全了
维护:
日复一日地工作MVC会扭曲人们对“必要”的看法。我要说的是,你“有必要”学习MVC,编写20个文件来完成与这一个文件相同的任务
另一方面,我一直在各种遗留项目中与您保持着密切的联系,我说过“嗯,MVC