表单元素名称-数组类型不起作用

时间:2019-11-05 作者:Alt C

我有一个带有多选字段的表单:

<select <?php echo esc_attr($item[\'pgggo_grid_sort_and_filter_multiselect\']);  ?> name="pgggo-taxon-select[]" class="ui fluid dropdown">
foreach循环生成此选择字段,但一旦提交表单,查询将是一个普通变量,而不是生成数组变量。它通过以下方式生成查询:

?pgggo-taxon-select%5B%5D=14&pgggo-taxon-select%5B%5D=1
请建议一种以数组格式显示的解决方案。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

为什么?pgggo-taxon-select%5B%5D=14&pgggo-taxon-select%5B%5D=1 在URL中,有三个常见的原因可以解释为什么在提交表单时会出现这种情况:

表单的methodpost (对应于HTTP POST方法)和:

a) 当前页面的URL中确实包含该字符串。E、 g.你上了example.com/my-page/?pgggo-taxon-select%5B%5D=14&pgggo-taxon-select%5B%5D=1

b) 表单的action 有那个字符串。E、 g。<form action="/my-app?pgggo-taxon-select%5B%5D=14&pgggo-taxon-select%5B%5D=1">

  • 或者(在您的情况下,最有可能是),表单的methodget (对应于HTTP GET方法,以及get 是默认窗体method).

    好的,但为什么不呢?pgggo-taxon-select[]=14&pgggo-taxon-select[]=1 ?

  • 因为方括号之类的特殊字符([]) URL中的(具有特定含义)需要进行百分比编码/URL编码(有关MDNWikipedia); 因此,这些括号变为%5B%5D 分别在URL中-tryurlencode( \'[\' ) 在PHP中。

    所以别担心。。一切都很好

    PHP仍然会处理输入($_GET[\'pgggo-taxon-select\']) — 发送时为pgggo-taxon-select%5B%5D 通过GET方法-作为数组。事实上,如果PHP(或服务器)使用的是unescaped[].

    从您的评论(格式简洁),“但是post 方法没有添加任何查询字符串,但我仍然得到所需的数组。我可以使用post ? 是否推荐“:

    只需使用更适合表单上下文/目的的方法-如果是用于上载文件,则应使用post; 如果只是为了阅读/显示按特定条件筛选的帖子,您可以使用get.

    这些资源将帮助您了解何时在提交表单时使用HTTP方法:

    相关推荐

    Dealing with html forms

    I want to work with html form but i cant understand the Action method and when we need to use it.For example found this code on w3schools:<form action=\"action_page.php\"> First name:<br> <input type=\"text\" value=\"Mickey\">&#