Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 发送多个复选框选项_Php_Javascript_Search_Forms - Fatal编程技术网

Php 发送多个复选框选项

Php 发送多个复选框选项,php,javascript,search,forms,Php,Javascript,Search,Forms,我正在创建一个二手车网站(用PHP编写),我一直在从表单发送高级搜索选项。我有30多个,我想知道是否有可能,以及如何在一个变量中发送它们(例如&options=1,2,3,5,6,10或其他方式…) 我还听说“按位”可以实现这一点,但我不知道如何做到这一点。或者如果有人有更好的主意,请告诉我 谢谢。您可以将它们以数组形式发送 <form method="post"> <input type="checkbox" name="param[]" value="blue" /

我正在创建一个二手车网站(用PHP编写),我一直在从表单发送高级搜索选项。我有30多个,我想知道是否有可能,以及如何在一个变量中发送它们(例如
&options=1,2,3,5,6,10
或其他方式…)

我还听说“按位”可以实现这一点,但我不知道如何做到这一点。或者如果有人有更好的主意,请告诉我


谢谢。

您可以将它们以数组形式发送

<form method="post">
    <input type="checkbox" name="param[]" value="blue" />
    <input type="checkbox" name="param[]" value="red" />
    <input type="checkbox" name="param[]" value="orange" />
    <input type="checkbox" name="param[]" value="green" />
    <input type="checkbox" name="param[]" value="black" />
    <input type="submit" value="Submit" />
</form>

>> $_POST['param']
array('blue', 'orange')

>>$\u POST['param']
数组('蓝色','橙色')
您甚至可以使用多维数组:

<form method="post">
    <input type="checkbox" name="param[color][]" value="blue" />
    <input type="checkbox" name="param[color][]" value="red" />
    <input type="checkbox" name="param[color][]" value="orange" />
    <input type="checkbox" name="param[color][]" value="green" />
    <input type="checkbox" name="param[color][]" value="black" />
    <input type="checkbox" name="param[year][]" value="1999" />
    <input type="checkbox" name="param[year][]" value="2000" />
    <input type="checkbox" name="param[year][]" value="2001" />
    <input type="checkbox" name="param[year][]" value="2002" />
    <input type="checkbox" name="param[year][]" value="2003" />
    <input type="submit" value="Submit" />
</form>

>> $_POST['param']['color']
array('blue', 'green')

>> $_POST['param']['year']
array('2001', '2004')

>>$\u POST['param']['color']
数组('蓝色','绿色')
>>$\邮政['param']['year']
数组('2001'、'2004')

将它们放在一个数组中,并在处理表单的脚本中循环它们

<form action="yourscript.php" method="POST">
     <label for="option1">Option 1</label>
     <input id="option1" type="checkbox" name="option[]" value="option1" />
     <label for="option2">Option 2</label>
     <input id="option2" type="checkbox" name="option[]" value="option2" />
     <label for="option3">Option 3</label>
     <input id="option3" type="checkbox" name="option[]" value="option3" />
     <input type="submit" name="submit" value=Submit />
</form>

您可以编写一个脚本,迭代所有字段(即复选框),将信息收集到一个隐藏字段中,格式与您提供的完全相同(1,3,5表示选中了1 3和5,未选中2和4)


将其转换为位表示将使构造和反构造更加复杂。例如,在前一个示例中,您可以发送数字10101==17来表示一个位置(即位置1、3、5为“开”,2和4为关)。再说一次,没那么容易,也不推荐。[您也可以发送一个二进制表示,在这种情况下,您将发送1000==8==1+3+5----甚至更复杂]

好的,谢谢大家的回答。我已经使用jQuery提出了一个解决方案。我已从数组中的这些复选框中收集了所有值,并将此数组分配给一个隐藏字段。所有这些选项都在表单之外,未提交

javascript:

$('.options').click(function() {
var selectedItems = new Array();
$("input:checkbox[name='opt[]']:checked").each(function() {selectedItems.push($(this).val());});
var data = selectedItems.join('|');
$("#opts").val(data);
});
及表格:

<form name="search" method="get" action="blabla.php">
.....
<input type="hidden" name="options" id="opts" value=""/>
....
</form>

.....
....
表格之外还有所有可用的选项

...
<input type="checkbox" name="opt[]" class="options" value="1"/>
<input type="checkbox" name="opt[]" class="options" value="2"/>
<input type="checkbox" name="opt[]" class="options" value="3"/>
...
。。。
...

GET请求将生成长而复杂的URL,其中包含许多默认行为的选项

POST请求可能会给您留下短URL,但使用“后退”按钮可能会表现不好,并且不利于书签

要使用GET生成短URL,您需要一个中介脚本,将所选选项转换为更紧凑的内容,或者需要使用JavaScript观察所选选项并创建紧凑的URL客户端

按位计算意味着将单个变量中的每一位或每一组位分配给给定的选项和预定义的值集。例如,32位整数可以表示8个属性,每个属性4位:

01010010010001001010101010101001
或:


因此,一个整数可以表示八个属性,每个4位组有16个可能的值。很明显,这需要详细说明,但我相信SO上已经有人问过这个问题,我现在不准备再打字了。:)

它的工作原理是一样的。只需将method=“post”替换为method=“get”,将$\u post替换为$\u get。是的,我的错:D。但我的URL中有一个巨大的“香肠”:
01010010010001001010101010101001
0101 0010 0100 0100 1010 1010 1010 1001
  #8   #7   #6   #5   #4   #3   #2   #1