表单拥有超过 1900 个字段,由于 php html 中的查询字符串限制,无法使用 post 方法提交



我有超过 1900 个输入框列的动态表,我无法通过表单提交提交所有字段,它只通过 60% 的行将页面保存在 php 中。我猜它的查询字符串长度限制。

我使用以下代码在网站文件夹中添加了.htaccess文件:

RewriteEngine on
php_value post_max_size 512M

甚至我也php.ini文件夹中添加了public_html文件:

file_uploads = On
php_value post_max_size = 512M
upload_max_filesize = 512M
max_input_vars 2000

我有 Godaddy 的共享主机服务器。我已经尽力了,但表单只提交了 60% 的字段。即使我已经更改了 C 面板中 php 选择器选项中post_max_size值的值。

如果您使用的是 GET,您肯定会遇到浏览器的字符限制。

相反,您应该在表单中使用 POST 方法,例如

<form action="http://example.com" method="post">

当然,您的max_input_vars应该超过您的字段最大数量。此设置分别限制超全局变量$_GET$_POST$_COOKIE

如果您仍在使用 POST,则应验证您的max_input_vars设置是否处于活动状态:

<?php
echo "max_input_vars: " . ini_get('max_input_vars') . PHP_EOL;
echo "post_max_size: " . ini_get('post_max_size') . PHP_EOL;
?>

你说你在public_html中添加了php.ini.通常php.ini不在此文件夹中(也许是您的主机的特殊之处?!而且似乎您的 php.ini 格式不正确,因为您使用 .htaccess 关键字php_value并且您忘记使用等号表示max_input_vars

如果你的php.ini不起作用,你应该尝试将所有设置添加到你的.htaccess中,如下所示:

php_value post_max_size 512M
php_value max_input_vars 2000

正如@NigelRen建议的那样,您也可以拆分请求以减少字段总数。这可以通过使用 AJAX 来解决。它允许在不重新加载页面的情况下向服务器发送请求。一个好的JavaScript框架可以实现这一点可能是jQuery。这样,您可以在单个字段失去焦点后更新单个字段,或者添加一个单独的更新按钮,仅将这些行发送到已更改的服务器(例如,每个输入都会获得一个ID,并且您计算所有具有焦点的行(。使用此方法,您还可以使用简单循环限制发送到服务器的字段数量(例如,每个循环仅更新 100 个字段(。

另一种方法是分页。这意味着每页仅显示 x 行,因此用户只能更新这些 x 行。

我建议使用 AJAX,因为它会大大降低性能要求。

最新更新