所以,我有这个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>
并在提交时重定向到此URL,同时选中的2个复选框
results?search_query=dreams&search_filter[]=checkbox1&search_filter[]=checkbox2
它是这样工作的(在codeigniter中,我使用$this->input->get('search_filter')
获取数据),但我的问题是:我在表单中做了一些错误的事情,或者这就是它应该如何工作的?我的意思是:&search_filter[]=checkbox1&search_filter[]=checkbox2
。它不应该是类似于:&search_filter[]=checkbox1,checkbox2
吗?如果没有,我怎么能让它这样工作?
如果您想要逗号格式,可以执行以下操作:
$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();
});
当然,如果用户没有启用js,它将以本机方式提交
我是在表格里做错了什么,还是应该这样做?
这就是它应该如何工作。至少,如果您需要用PHP读取查询字符串,那么这些括号需要在那里读取整个查询字符串,而不会让下一个值覆盖每个search_filter
值。
如果没有,我怎么能让它这样工作?
如果必须,您可以使用POST
请求,处理提交,并使用所需的任何查询字符串重定向到您选择的URL。
根据您的评论:
我想把这个网址做成
&search_filter[]=checkbox1,checkbox2
,只是为了让它更"漂亮"一点
别担心,说真的。唯一重要的是当你在做极端的SEO时,你不希望两个URL指向同一个地方。在这些情况下,通常的做法是删除所有未使用的键并按字母顺序排列,以便所有带有查询字符串的URL都是一致的,但将它们篡改成自定义的东西仍然不是其中的一部分。
除此之外,不要反对这种行为-使用它来处理-它不会"坏掉",让它"漂亮"对任何人来说都无关紧要,而且你必须猜测/记住哪些页面以正确的方式处理查询字符串,哪些页面使用你的"自定义"方法。
我在表单中做错了什么,或者这就是它应该如何工作?
应该就是这样工作的
不应该是这样的吗;search_filter[]=checkbox1,checkbox2?
然后你就分不清两个项目和一个有逗号的项目之间的区别了
如果没有,我怎么能让它这样工作?
引人注目的JavaScript。不要那样做。表单的工作方式很好。
这很正常。表单数据总是以key=value
对的形式发送,只有一个值。提交key=value,value
不是HTTP规范的一部分,并且会将这些值视为一个单独的字符串,而不是两个逗号分隔的值。
你当然可以使用一些JS来动态重建你的表单,以使用value,value
格式,但你也必须修改你的服务器端脚本来接受这种新格式。PHP不会在您之前自动拆分值,因为它不是标准表示。
&search_filter[]=checkbox1,checkbox2
你为什么需要这个?
像这样使用:
<?php
$searchFilter = $this->input->get('search_filter');
foreach($searchFilter as $filter)
// some actions with filters.
search_filter[]
是一个简单的数组,包含来自复选框输入的值。