Php HTML复选框表单和HTTP URL

Php HTML复选框表单和HTTP URL,php,forms,url,checkbox,Php,Forms,Url,Checkbox,我有一个HTML表单: <form id="search_form" class="form_wrapp" accept-charset="utf-8" method="get" action="http://testing.com/results"> <input class="inputbox" type="text" name="search_query"> <input class="ic_search" type="submit"

我有一个HTML表单:

<form id="search_form" class="form_wrapp"
    accept-charset="utf-8" method="get" action="http://testing.com/results">
    <input class="inputbox" type="text" name="search_query">
    <input class="ic_search" type="submit" value="">

    <input type="checkbox" value="checkbox1" name="search_filter[]">
    <label for="Checkbox1">Checkbox1</label>
    <input type="checkbox" value="checkbox2" name="search_filter[]">
    <label for="Checkbox2">Checkbox2</label>
</form>

复选框1
复选框2
并在提交时重定向到此URL,并选中2个复选框

results?search\u query=dreams&search\u filter[]=checkbox1&search\u filter[]=checkbox2

它的工作原理是这样的(在codeigniter中,我使用
$this->input->get('search\u filter')
获取数据),但我的问题是:我在表单中做了一些错误的事情,或者这就是它应该如何工作的? 我的意思是:
&search\u filter[]=checkbox1&search\u filter[]=checkbox2
。它不应该是这样的:
&search\u filter[]=checkbox1,checkbox2
?如果没有,我如何才能让它像那样工作

我在表单内部做了一些错误的事情,或者这就是它应该如何工作的

这就是它的工作原理

它不应该是这样的:&search\u filter[]=checkbox1,checkbox2吗

然后,您无法区分两个项目和一个包含逗号的项目之间的区别

如果没有,我如何才能让它像那样工作


突兀的JavaScript。不要那样做。表单的工作方式很好。

这完全正常。表单数据总是成对发送,只有一个值。提交
key=value,value
不是HTTP规范的一部分,并且会将这些值视为单个整体字符串,而不是两个单独的逗号分隔值

当然,您可以使用一些JS动态地重新构建表单,以使用
值,value
格式,但是您还必须修改服务器端脚本以接受新格式。PHP不会在您面前自动分割这些值,因为它不是标准的表示形式

我是不是在表单内部做错了什么,还是应该这样做

这就是它的工作原理。至少,如果您需要使用PHP读取查询字符串,那么这些括号需要在那里读取整个查询字符串,而不会让下一个值覆盖每个
search\u filter

如果没有,我如何才能让它像那样工作

如果必须,您可以使用
POST
请求,处理提交,并使用所需的任何查询字符串重定向到您选择的URL

根据您的评论:

我想让url像这样
&search\u filter[]=checkbox1,checkbox2
,只是为了让它更“漂亮”

别担心,说真的。唯一重要的是当你在做极端的搜索引擎优化时,你不希望两个URL指向同一个地方。在这些情况下,删除所有未使用的键并按字母顺序排列是常见的做法,这样所有带有查询字符串的URL都是一致的,但将它们修改成自定义的内容仍然不是其中的一部分


除此之外,不要反对这种行为-使用它-它不会“坏”并且使它“漂亮”对任何人都不重要,另外,你必须猜测/记住哪些页面以正确的方式处理查询字符串,哪些页面使用“自定义”方法。

&search\u filter[]=checkbox1,checkbox2

你为什么需要这个

使用如下方式:

<?php

$searchFilter = $this->input->get('search_filter');

foreach($searchFilter as $filter)
    // some actions with filters.

如果您想要逗号格式,可以执行以下操作:

$filters = (array) $this->input->get('search_filter');
$filters = implode(',',$filters);
如果要更改表单提交的格式,假设jquery for js:

$('#search_form').submit(function() {
   var $hidden = $('<input type="hidden" name="search_filter" />').appendTo($(this)),
       $filters = $('input[name^=search_filter]'),
       value = '';

      //loop through the filters check if there checked and add them to the value

      $hidden.val(value);

      $filters.remove();       
});
$('search_form')。提交(函数(){
var$hidden=$('').appendTo($(this)),
$filters=$('input[name^=search\u filter]'),
值=“”;
//通过过滤器循环检查是否已选中,并将其添加到值中
$hidden.val(值);
$filters.remove();
});

当然,如果用户没有启用js,它将以本机方式提交

这是我已经在做的事情,但是我想让url像这样
&search\u filter[]=checkbox1,checkbox2
只是为了让它更“漂亮”,没有JavaScript你无法做到这一点=(