所以,我有这个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>
并在提交时重定向到此网址,并选中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
?如果没有,我怎么能让它像那样工作?
答案 0 :(得分:2)
我在表单中做错了什么,或者这是它应该如何工作?
这就是应该如何运作的。至少如果你需要用PHP读取查询字符串,那些括号需要在那里读取整个查询字符串,而下一个值不会覆盖每个search_filter
值。
如果没有,我怎么能让它像那样工作?
如果必须,您可以使用POST
请求,处理提交,并使用您想要的任何查询字符串重定向到您选择的网址。
来自你的评论:
我想像这样
&search_filter[]=checkbox1,checkbox2
制作网址,只是为了让它更“美丽”
请不要担心,认真。唯一重要的是当你进行极端搜索引擎优化并且你不希望两个URL指向同一个地方时。在这些情况下,通常的做法是删除所有未使用的密钥并按字母顺序排列它们,以便所有带有查询字符串的URL都是一致的,但将它们分解为自定义仍然不是其中的一部分。
除此之外,不要与行为作斗争 - 用与一起工作 - 它不会“破碎”并使其“美丽”对任何人都无关紧要,而且你必须猜测/记住哪些页面以正确的方式处理查询字符串,以及哪些页面使用“自定义”方法。
答案 1 :(得分:2)
如果您想要逗号格式,可以执行以下操作:
$filters = (array) $this->input->get('search_filter');
$filters = implode(',',$filters);
如果要更改表单提交的格式,请假设js的jquery:
$('#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,它将原生提交
答案 2 :(得分:1)
我在表单中做错了什么,或者这是应该如何工作的?
这就是它应该如何运作
不应该是这样的:&amp; search_filter [] = checkbox1,checkbox2?
然后你无法区分两个项目和一个带逗号的项目。
如果没有,我怎么能让它像那样工作?
突兀的JavaScript。不要那样做。表单的工作方式很好。
答案 3 :(得分:1)
这是完全正常的。表单数据始终以key=value
对形式发送,只有一个值。提交key=value,value
不是HTTP规范的一部分,并且将值视为单个整体字符串,而不是两个单独的逗号分隔值。
您当然可以使用一些JS来动态重建表单以使用value,value
格式,但是您必须修改服务器端脚本以接受新格式。 PHP不会在您之前自动拆分值,因为它不是标准表示。
答案 4 :(得分:1)
&search_filter[]=checkbox1,checkbox2
为什么需要这个?
使用它:
<?php
$searchFilter = $this->input->get('search_filter');
foreach($searchFilter as $filter)
// some actions with filters.
您search_filter[]
是一个简单数组,其中包含复选框输入值。