【问题标题】:PHP not converting form inputs with square brackets in names to arraysPHP没有将名称中带有方括号的表单输入转换为数组
【发布时间】:2015-09-30 12:23:34
【问题描述】:

我正在制作一个如下所示的表单:

<form id="add_to_basket" action="" method="post">
    <select name="option[10]">
        <option value="1">Red</option>
        <option value="2">Silver</option>
    </select>
    <select name="option[11]">
        <option value="A">Metallic</option>
        <option value="B">Colour Changing</option>
    </select>
</form>

表单由 JavaScript 验证和提交,然后由 PHP 脚本处理。在实时服务器上,表单可以正常工作并且值被正确捕获,如果我使用 var_dump() 来获取 $_POST 的内容,我会看到:

array(1) {
    ["option"]=>
    array(2) {
        [10]=>
        string(1) "1"
        [11]=>
        string(1) "A"
    }
}

但是当我在本地服务器上做同样的事情时,我会看到:

array(1) {
    ["option"]=>
    string(0) ""
}

我省略了其他输入字段,但它们的 ID 或名称中都没有“选项”。

是否有可能我的 PHP 版本没有正确配置来执行此操作,或者这是默认行为并且它应该可以工作?直播服务器使用 PHP 5.2 (XAMPP),本地服务器使用 PHP 5.3.5 (MAMP)。

感谢您的任何帮助或 cmets。

【问题讨论】:

  • 您使用的是任何框架还是这个原生 PHP?你试过用 JUST var_dump($_REQUEST); 创建一个页面吗?并检查结果是否相同?
  • 感谢您的建议 - 使用 $_REQUEST 而不是 $_POST 可以显示正确的值。为了回答您的问题,本网站未使用 PHP 或 JavaScript 框架。
  • 这肯定很奇怪。 $_REQUEST 是所有 GPC 变量,$_POST 只是 post,但两者本质上应该以相同的方式工作,你确定你没有错误地给 _POST 赋值吗?
  • 同意。如果 $_REQUEST 都被归类为 GPC 变量,那么对它们的处理方式与 $_POST 不同是没有意义的。

标签: php forms


【解决方案1】:

PHP 使用 parse_str() 函数对其进行解析,该函数仅使用 1 个现已弃用的设置

所以检查magic_quotes_gpc在本地和远程的设置并进行比较。

仔细观察parse_str() 是如何解析样本字符串的。您可以获取您的 $_SERVER['QUERY_STRING'] 并在此字符串上使用 parse_str() 并查看结果。

同时检查:

【讨论】:

  • 谢谢罗伯特。在本地服务器的 php.ini 设置中打开 magic_quotes_gpc 解决了这个问题。正如 EJTH 所建议的那样,即使在 php.ini 设置中关闭了 magic_quotes_gpc,如果使用 $_REQUEST 而不是 $_POST,表单值也会被正确解析。
  • 你永远不应该启用魔术引号,反正 PHP 5.4.0 已经没有了它们
  • 是的,这很好,我从来没有在我自己的服务器上启用它。在这个特定的例子中,我的客户拥有自己的(位于同一地点的)服务器,因此他们不必担心服务器会被托管服务提供商升级,并且可以在可预见的未来继续使用 PHP 5.2。
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 2016-09-06
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2021-07-12
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多