Php 使用GET的HTML表单多选

Php 使用GET的HTML表单多选,php,html,forms,Php,Html,Forms,注意: 谷歌很难做到这一点,因为“GET”带来了很多“如何用javascript‘获取’表单的值”,等等 问题: TL;DR版本优先 您是否可以使用表单的GET方法使用multi-select from并仍然检索每个单独的值? 扩展解释 我正在构建的可搜索目录的要求包括在表单中使用GET方法,以便用户可以在url中看到他们的结果,还可以将搜索结果的直接链接发送给其他客户,等等 其中一个可搜索字段是多选框(具有MULTIPLE属性的选择框)。我的后端是用PHP编写的,我通常通过将名称设置为数组变量

注意:

谷歌很难做到这一点,因为“GET”带来了很多“如何用javascript‘获取’表单的值”,等等

问题:

TL;DR版本优先

您是否可以使用表单的GET方法使用multi-select from并仍然检索每个单独的值?

扩展解释

我正在构建的可搜索目录的要求包括在表单中使用GET方法,以便用户可以在url中看到他们的结果,还可以将搜索结果的直接链接发送给其他客户,等等

其中一个可搜索字段是多选框(具有
MULTIPLE
属性的选择框)。我的后端是用PHP编写的,我通常通过将名称设置为数组变量
(name=“multiselect[])
来处理多选,而post变量包括所选选项的数组
($\u post[“multiselect”]==array())

这种情况下的问题是,多选择值被传递给get字符串,如下所示:

action?multiselect=1&multiselect=2
因此,无论最后一个值是什么,都将替换get字符串中变量的第一次初始化的值。(在上述示例中,multiselect将等于“2”)

尝试将名称设置为数组只会以相同的方式替换数组值,如下所示

action?multiselect[]=1&multiselect[]=2
将导致
$\u GET[“multiselect”]==2


我最初建议使用一个复选框,因为它允许我们以不同的方式命名元素,并检查每个元素的真/假,但是对于这个特定的多选,有大约30个值,他们希望它位于可滚动的区域中

对我有用。刚试过


为什么不添加隐藏的表单元素并将multiselect值复制到相应的复选框中呢。使用jquery很容易。显然,使用“Get”是有原因的,但记住URL的长度是有限的。您无法通过URL本身发送8K数据。您是否尝试过使用foreach循环遍历post变量或使用大小为$\u GET[“multiselect”]?这是一个很好的观点。在任何情况下,限制他们可用的选项子集都可能是一个好主意。最初,我试图让这个表单完全可降解(我并不是真的希望迎合那些关闭了JS的人,但如果有人的JS失败或发生任何事情,我们总是被覆盖)。浏览器通过GET发送表单数据的方式是否束缚了我的手脚?barryhunter证明了我还有另一个问题。但现在我想起来了,它仍然会为表单上的每个输入发送一个空白值。在JS之外有没有一种方法可以防止这种情况发生,从而限制url大小?(这似乎现在需要一个新问题)这很奇怪,因为当我尝试最初的“multiselect”并没有逃逸到[]到%5B和%5D中时,它只是让它们像服务器显然不理解的([])。现在我正在尝试它,它显示了您正在谈论的内容,所以让我看看是否有其他潜在问题。@NateDSaint,您是否可能调试了未更新
[name]
的页面缓存版本?Epic失败。很明显,我的一个javascript库在发送到服务器之前就已经删除了所有内容。我在没有打开JS的情况下进行测试,它只是工作了。将问题留待以后,这样每个人都可以得到代表,其他人也可以找到,因为我当时正试图用谷歌搜索它。@ZZZBOV这实际上也是问题的一部分,使我无法注意到我在做什么,因为我正在刷新同一个url,而不是点击“提交”,并看到浏览器生成一个新的url
<select name="multiselect[]" ...