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

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

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

【问题讨论】:

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

标签: javascript php jquery forms serialization


【解决方案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 请求,以便将更改的数据保存到数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2022-06-15
    • 2022-01-02
    • 2021-10-07
    相关资源
    最近更新 更多