【问题标题】:Warning: a form on this page has more than 1000 fields PHP MySql [closed]警告:此页面上的表单有 1000 多个字段 PHP MySql [关闭]
【发布时间】:2023-03-16 11:02:01
【问题描述】:

我收到了一份周末上线的问卷。在达到这么多条目后,PhpMyAdmin 开始显示此警告:

警告:此页面上的表单包含 1000 多个字段。上 提交,某些字段可能会被忽略,由于 PHP 的 max_input_vars 配置。

该表名为 survey,它有 10 列和 300 行数据 - 大部分是 strings。我不知道它从哪里获得数字 1000 字段?一切都很好,直到survey 表达到大约 150 个条目。我担心我会丢失我的数据。

我的问卷共有 20 页,全部包含多项选择题。所有值都存储在$_SESSION 数组中,然后发送到第 21 页的 DB。

【问题讨论】:

  • 不看代码怎么知道?
  • 首先备份您的数据库。
  • 有一页又一页的代码——我从哪里开始?刚开始备份我的表
  • 而PhpMyAdmin与实际应用有什么关系?
  • " 我不知道它从哪里得到数字 1000 字段?" 10 x 300 = 3000 远远超过 1000。

标签: php mysql


【解决方案1】:

您不会丢失数据。此错误消息特定于您尝试查看表的内容并一次选择太多行。表格中的列数乘以显示的行数应低于 php.ini 中为 max_input_vars 设置的值。默认设置为 1000。

当您使用特定代码时,您应该不会遇到此错误,除非您尝试执行相同的操作 - 在某个时间点从返回的查询中显示超过 1,000 个“元素”。你真的希望这样做吗?如果是这样,那么请明智地对数据进行分页并在 SQL 查询中使用 LIMIT。

数据本身是安全的。唯一受影响的是 PHP 的检索和输出能力。

【讨论】:

    【解决方案2】:

    php.ini 文件中使用此配置:

    max_input_vars = 100000;
    

    【讨论】:

      【解决方案3】:

      转到 php.ini 然后在文件中找到 max_input_vars 并更改为:

      ;max_input_vars = 1000
      

      max_input_vars = 10000
      

      然后重新启动您的服务器。

      它将帮助你们为我工作

      编码愉快!!

      【讨论】:

      • 感谢您发布答案,但请检查是否已在另一个答案中发布了完全相同的更改(这里就是这种情况)
      【解决方案4】:

      php.ini 中的以下行对我有用:
      默认情况下,设置max_input_vars 的行将被注释。
      通过删除语句前面的 ; 取消注释,将值从 1000 更改为 1000000 并保存文件。
      然后重启 Apache 和 MySQL。

      ; How many GET/POST/COOKIE input variables may be accepted
      max_input_vars = 1000000
      

      它会像魅力一样起作用!

      【讨论】:

      • 感谢您发布答案,但请检查是否已在另一个答案中发布了完全相同的更改(这里就是这种情况)
      【解决方案5】:

      在 php.ini 文件中使用此配置:

      max_input_vars = 1000 to max_input_vars = 100000;
      

      它对我有用。

      【讨论】:

      • 感谢您发布答案,但请检查是否已在另一个答案中发布了完全相同的更改(这里就是这种情况)
      【解决方案6】:

      我刚刚发现新的 PHP 没有像样的默认值,并且 php.ini 变量 max_input_vars 被注释掉了。我取消了该变量的注释并且它起作用了。即使将其设置为 1000。

      【讨论】:

        【解决方案7】:
        max_input_vars integer
            How many input variables may be accepted (limit is applied to $_GET, $_POST and $_COOKIE 
            superglobal separately). Use of this directive mitigates the possibility of denial of 
            service attacks which use hash collisions. If there are more input variables than specified 
            by this directive, an E_WARNING is issued, and further input variables are truncated from
            the request.
        

        http://php.net/manual/en/info.configuration.php#ini.max-input-vars

        基本上“MAX_INPUT_VARS”限制了一次可以提交的输入值的数量。

        由于某种原因,当您将数据提交到服务器时,它说有超过 1000 个变量被提交。

        要解决这个问题,要么增加 php 配置中的限制,要么......在保存数据时进行更改。比如每次他们回答这么多问题或者当他们回答完一个页面时提交表单。

        【讨论】:

        • 谢谢——首先你如何更改max_input_vars,其次更令人担忧的是——阅读文档后我的问卷是否会受到威胁?我的表单上只有一个 name 文本框字段,我已将其包装在此函数中:real_escape_string。其余的都是单选按钮。
        • 您需要编辑 php.ini 文件。为了安全起见,我会检查以下内容:phpsec.org/projects/guide/2.html
        • 谢谢 - 现在我必须好好阅读这件事。我在godaddy 服务器上找到了php 配置,但它不可编辑。是否可能发生此错误,因为 PhpMyAdmin 页面上有超过 (10x300) 3000 个单元格,或者当我的用户提交时,有超过 1000 个条目进入数据库。正如我所说,查看我的数据,它似乎应该是 - 没有遗漏字段或奇怪的不人道的答案。我已经编辑了我的问题,以向您显示它所显示的错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多