0

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

如果是这样,我是否想在我的表单中使用隐藏的输入类型来指示要运行哪个 switch case,例如在我的表单中:

<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;
}

谢谢!

4

5 回答 5

1

我将牢牢抓住我的两分钱,进入这个讨论。

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

如果您有许多或多或少相同的表单(相同的字段,相同的逻辑,只是细微的差异,例如谁通过电子邮件收到表单的每个实例的内容),那么有一个可以处理所有这些的处理程序表格是最好的方法。

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

在维护方面,更少的文件当然是一个加分项,因为您需要查找的地方更少,但您不应该牺牲责任/功能的逻辑分离来将所有内容都塞进一个文件中。

于 2012-12-07T03:32:56.953 回答
1

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

如果您的代码大小变得难以处理,您可以随时将其分解为单独的文件,然后在您的案例语句中调用 include("file_name.php") 来执行您需要的脚本。

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

如果事情变得非常复杂,那么您可能会考虑类。在这种情况下,您可以有一个具有添加方法和删除方法的用户类,然后您将包含用户类,然后像这样使用它。

$user = new User();

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

就像我说的那样,这一切都取决于您的具体需求。找到适合您的方法并顺其自然。

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

于 2012-12-07T03:18:09.470 回答
0

These days, you would implement what's called a RESTful API. In addition to POST, HTTP supports DELETE, GET, and PUT methods. Use the type of submission to determine what action your code should execute.

于 2012-12-07T03:48:14.247 回答
0

这样做会创建一个单一的入口点,其他程序员可以使用它来遵循程序逻辑。如果有 50 个 PHP 文件,每个文件都针对不同的表单或 AJAX 请求,无论它们的名称多么好,查看代码库的其他程序员将不知道它们的用途。像这样的单一入口点为您和其他程序员提供了更容易的可读性和可维护性。

编辑:让我明确一点,我不建议将所有代码都放在一个文件中。您可以拥有五十个 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;
}
于 2012-12-07T03:09:29.000 回答
-2

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

于 2012-12-07T03:09:42.337 回答