用于处理多个表单提交的单个PHP文件被认为是“错误形式”吗?

时间:2012-12-07 02:59:44

标签: php html forms

我正在开发一个小型网站(研究生课程的项目),我有一堆html表单收集数据并将其传递给MySQL数据库。目前,每个表单(大多数存在于不同的页面上)调用不同的php文件作为表单操作。随着网站的增长,这变得有点混乱。是否常见,或者可接受/推荐的方法,有一个php文件,所有表单都在提交时调用它们的动作,然后在该php文件中使用switch语句来确定要执行哪个代码块?

如果是这样,我是否想在表单中使用隐藏的输入类型来指示要运行的开关案例,例如以我的形式:

<input type="hidden" name="my_case" value="add_user">

...

在我的php文件中:

switch($_POST['my_case']) {

case 'add_user':
   // do soemthing
   break;
case 'del_user':
   // do something
   break;
}

谢谢!

5 个答案:

答案 0 :(得分:1)

我认为没有任何标准的方法可以做到这一点。它完全是关于偏好的...那就是编写代码的美妙之处在于你可以创建解决方案,如果它适用于你正在做的事情那么没关系。如果您稍后确定需要重新加工,那么您可以。

如果您的代码大小变得很麻烦,您可以随时将其分解为单独的文件,然后在case语句中调用include(“file_name.php”)来执行您需要的脚本。

switch($_POST['my_case']) {
  case 'add_user':
    include("add_user.php");
    break;
  case 'del_user':
    include("del_user.php");
  break;
}

如果事情变得非常复杂,那么你可以考虑上课。在这种情况下,您可以拥有一个具有add方法和delete方法的用户类,然后您将包含该用户类,然后像这样使用它。

$user = new User();

$user->add();
$user->delete();

就像我说的那样,这完全取决于你的具体需求。找到适合你的东西并随之滚动。

要回答有关隐藏的输入,如果必须使用POST方法,那么这将是必要的。您还可以使用GET并将某种指示符附加到表单URL的查询部分。喜欢?action = add

答案 1 :(得分:1)

我要用手握住我的两分钱来讨论这个讨论。

使用单个表单处理程序取决于表单/数据收集的相似程度

如果您有多个表单,或多或少相同(相同的字段,相同的逻辑,只是微小的差异,如谁通过电子邮件发送表单的每个实例的内容),然后有一个单一的处理程序,可以处理所有这些形式是最好的方式。

如果您有多个表单,除了它们是表单之外没有任何共同点(或非常少),那么拥有单个处理程序可能不是最佳选择。话虽如此,您可以根据相似性将表单分组为“系列”,然后为每个系列构建处理程序。 (即“发送电子邮件”系列,“文件上传”系列等)。

当涉及到维护时,较少的文件肯定是一个优势,因为您需要寻找某些东西的地方较少,但您不应该牺牲责任/功能的逻辑分离,以便将所有内容都集中到一个文件。

答案 2 :(得分:0)

这样做会创建一个单一的入口点,其他程序员可以使用它来遵循程序逻辑。如果有50个PHP文件,每个文件都以不同的形式或AJAX请求为目标,无论它们的命名有多好,另一个查看代码库的程序员都不知道它们的用途。像这样的单个入口点允许您和其他程序员更容易阅读和维护。

编辑:让我明确指出,我不建议将所有代码放在该文件中。你可以有50个PHP文件。但是在包含case语句的文件中,您可以:

switch($_POST['my_case']) {

    case 'add_user':
    include_once 'add_user_handler.php';
    // call function in add_user_handler.php to initiate execution
    break;

   case 'del_user':
   include_once 'del_user_handler.php';
   // call function in del_user_handler.php to initiate execution
   break;

   // And of course, good programming practice, use default
   default:
   exit("Unable to handle request");
   break;
}

答案 3 :(得分:0)

现在,您将实现所谓的RESTful API。除了POST之外,HTTP还支持DELETE,GET和PUT方法。使用提交类型来确定代码应执行的操作。

答案 4 :(得分:-2)

好的,我从来没有读过这个,但在我的情况下,我通常不使用表单,我的意思是,我不使用经典按钮“提交”,而不是使用ajax我发送所有内容并通过事件,当用户点击图片(如按钮)或类似图片时。关键是,由于这个原因,我可以通过仅使用控制器(这是你的问题)从一个部分发送不同的部分(如果它们是不同的形式)。我从来没有遇到任何问题,真的以这种方式你可以处理好一切,因为你绑定了CONTROLLER - VIEW - FORMS_OF_THIS_VIEW。这是一种管理所有信息的好方法,因为通常你有一个视图和控制器匹配一个问题(汽车,偏好,优惠,登录等)。通过这种方式,您可以非常轻松地找到所有内容(控制器,视图,表单,进程)