2

我有一个带有 a 的表格,method="get"现在它看起来像这样:

    <form>
            <input type="submit" id="searchsubmit" value="Sort Projects" class="project-sort" />
            <input type="checkbox" name="type" class="type-checkbox" value="type1"> 
            <label for="type1">Type 1</label>
            <input type="checkbox" name="type" class="type-checkbox" value="type2"> 
            <label for="type1">Type 2</label>
            <input type="checkbox" name="type" class="type-checkbox" value="type3"> 
            <label for="type1">Type 3</label>
    </form>

然而,当我选择其中两个时,它发送给我的网址看起来像这样
/?type=type1&type=type2

我已经尝试添加[ ]到输入名称,当发生这种情况时,url 看起来像:

/?type%5B%5D=type1&type%5B%5D=type2

知道我在这里做错了什么吗?

4

3 回答 3

2

为每个复选框使用不同的名称,(不要为每个复选框使用 name="type")

<form>
  <input type="submit" id="searchsubmit" value="Sort Projects" class="project-sort" />
  <input type="checkbox" name="type1" class="type-checkbox" value="type1"> 
  <label for="type1">Type 1</label>
  <input type="checkbox" name="type2" class="type-checkbox" value="type2"> 
  <label for="type2">Type 2</label>
  <input type="checkbox" name="type3" class="type-checkbox" value="type3"> 
  <label for="type3">Type 3</label>
</form>

匹配名称用于单选按钮组,而不是复选框。
一般来说,匹配名称用于单选按钮组,而不是复选框。使用匹配名称有一些原因(如下所述),但显然这样做会涉及一些问题。

也许OP可以在接收端手动explodepreg_split整个查询字符串,然后创建一个包含所有“type”值的数组,(即不要使用$_GET[“type”])。

于 2013-09-11T23:53:56.130 回答
0

在表单上使用 GET 操作会将其多次放入查询字符串中。但是当接收页面从查询字符串中获取值时,它会将它们放在一起。

查询字符串看起来像:/?type=type1&type=type2

当您从查询字符串中获取参数“type”的值时,该值将是“type1, type2”

使用经典 ASP,从表单集合中获取信息时:

查询字符串:http ://domain.com/page.asp?type=type1&type=type2

收集这样的信息:

<%
    response.write("Value of type is: " & request("type"))
%>

输出到页面:

type 的值为:type1, type2

于 2013-09-12T00:00:39.043 回答
0

如果您使用 type[] 作为名称,则 url 看起来像您已经发现的 /?type%5B%5D=type1&type%5B%5D=type2 。

这是 /?type[]=type1&type[]=type2 的 urlencoded[1] 形式。([ 编码为 %5B 和 ] 编码为 %5b)使用这种语法,php 将 type 生成一个包含值“type1”和“type2”的数组

一个例子:

<html>
  <head><title>test</title></head>
  <body>
    <pre>$_GET is <?php var_dump($_GET); ?></pre>
    <hr/>
    <form method="get" action="">
      <input type="submit" id="searchsubmit" value="Sort Projects" class="project-sort" />
      <input type="checkbox" name="type[]" class="type-checkbox" value="type1"> 
      <label for="type1">Type 1</label>
      <input type="checkbox" name="type[]" class="type-checkbox" value="type2"> 
      <label for="type1">Type 2</label>
      <input type="checkbox" name="type[]" class="type-checkbox" value="type3"> 
      <label for="type1">Type 3</label>
    </form>
  </body>
</html>

试试这个,你会看到你得到的值的结构。例如,如果您选中第一个和第三个框,则表单上方的输出将如下所示:

$_GET is array(1) {
  ["type"]=>
  array(2) {
    [0]=>
    string(5) "type1"
    [1]=>
    string(5) "type3"
  }
}

[1] http://en.wikipedia.org/wiki/Percent-encoding

于 2013-09-12T00:50:33.933 回答