如何使用 PHP 处理多个表单输入

Posted

技术标签:

【中文标题】如何使用 PHP 处理多个表单输入【英文标题】:How to process many form inputs with PHP 【发布时间】:2019-04-19 03:13:08 【问题描述】:

我正在为一家分销公司构建一个管理面板,他们要求有一个页面,他们可以在其中为所有客户添加订单,因此我生成了一个表单,该表单为系统中的每个产品和每个客户动态添加输入行已创建(参见)

|问题是,添加的每个产品/客户端都会添加越来越多的输入,我已经不得不增加 max_input_vars,但这很容易达到数千个,如果不是数万个输入,这会减慢应用程序,我的问题是,处理所有这些输入的最佳方法是什么,或者实现此功能的另一种方法是什么?

【问题讨论】:

1.不要让他们添加数以万计的输入。这太疯狂了。给他们一个合理的硬限制。 2. 我只是做了一些非常相似的事情,我只是遍历产品行并将它们手动添加到表单数据中,我的只是一个联系表单,所以更容易一些,但概念是一样的。 表单是从产品表中动态创建的,因此无论添加多少产品,都将插入表单中,并且必须显示所有产品,以便他们可以将该产品添加到订单中,所以我不能做限制,你能解释一下为什么迭代产品行会有帮助吗? 在“动态”表代码中添加如下逻辑:if( rows * columns > field_limit ) raise_error 【参考方案1】:

我会重新考虑为每个客户端添加的输入字段数量增加一个最大值,或者为生成输入字段的每个客户端创建一个单独的页面。

如果您确实想继续,您可能需要考虑通过在脚本顶部添加 ini_set('maximum_execution_time', '60'); 来延长默认为 30 秒的 max_execution_time

在服务器端处理所有这些行。将您的输入字段数组保存为客户名称作为键:<input type="text" name="your_value[client1][column1]" /> 并为您的下一个客户执行<input type="text" name="your_value[client2][column1]" /> 为每一列增加列。

然后在服务器端你可以执行一个 foreach 循环来获取值。

foreach($_POST[your_value] as $client)

    foreach($client as $key => $val)
    
        echo $val;
    

【讨论】:

这会将每个数组视为请求中的一个变量吗? 您可以为每个客户端创建一个变量。您的服务器端阵列将如下所示:array(2) ["client1"]=> array(2) ["column1"]=> string(6) "value1" ["column2"]=> string(6) "value2" ["client2"]=> array(2) ["column1"]=> string(6) "value1" ["column2"]=> string(6) "value2" 我明白,但是为什么这有助于提高速度,现在所有的输入都这样命名 [name="clientId_ProductID"] 所以我喜欢你的方法,因为它更干净但是会增加速度或将每个数组及其内容视为一个变量 不会的。正如@RickCalder 提到的,给你的用户一个硬性限制。由于数以万计的输入是疯狂的,并且肯定会使您的应用程序崩溃。【参考方案2】:

使用 javascript(或客户端)仅提交已更改的数据。

如果图表中填充了存储的数据(我假设在数据库中),那么当条目更改时,您可以对 php 脚本使用 AJAX 请求,以便将更改的数据保存到数据库中。

【讨论】:

以上是关于如何使用 PHP 处理多个表单输入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular JS 处理表单中的多个提交按钮?

如何使用 PHP、jQuery 和 AJAX 上传多个文件

多个条目同名html表单

重定向处理时如何通过 $_POST 将表单错误发送回表单

如何使用 PHP 表单从多个表中检索数据?

如何在 php mysql 中处理动态模式和动态数据?