Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一个文件来管理他们所有人_Php_Html - Fatal编程技术网

Php 一个文件来管理他们所有人

Php 一个文件来管理他们所有人,php,html,Php,Html,假设我的网站上有大约10个表单,我想用一个php文件(submit.php)处理它们的数据。所以action=“./submit.php”在我所有的表单中 今天,当我提交表单时,我使用GET调用该php文件中的不同函数,例如action=“./submit.php?func=user”。这样submit.php就知道提交了什么表单。当然,表单使用POST作为方法 这样做不好吗?每个表单应该有一个.php文件吗?有更好的方法吗?复杂性: 它会很快变得毛茸茸的——形式越多,就越有趣 这就是为什么大多

假设我的网站上有大约10个表单,我想用一个php文件(submit.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