发送多个复选框选项

时间:2010-04-17 23:42:36

标签: php javascript search forms

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

我也听说过这是可能的“按位”,但我不知道如何做到这一点。或者如果有人有更好的想法,请告诉我。

感谢。

5 个答案:

答案 0 :(得分:5)

您可以将它们发送到阵列中。

<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')

您甚至可以使用多维数组:

<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')

答案 1 :(得分:2)

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

<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>

关键是将复选框值放入数组中。 option[]

然后在您的脚本中,您可以访问该数组并循环遍历提交的选项。

if(!empty($_POST['submit']) //process the form

     if(!empty($_POST['option']) //check to see if any checkboxes were selected
     {
          $options = $_POST['option'];
          foreach($options as $option) //loop through the checkboxes
          {
               //do what you need to do with an option
          }
     }

}

答案 2 :(得分:2)

好的伙计们,谢谢大家的回答。我想出了一个使用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"/>
...

答案 3 :(得分:0)

您可以编写一个遍历所有字段(即复选框)的脚本,以您提供的确切形式将信息收集到隐藏字段中(1,3,5表示检查1 3和5) ,2和4未经检查。)

将其转化为位表示,会使构造和解构更复杂。例如,在前一个例子中,你可以发送数字10101 == 17来表示一个位置(即位置1 3 5是“开”,2和4是关闭的)。同样,不那么容易,也不推荐。 [你也可以发送二进制表示,在这种情况下你发送1000 == 8 == 1 + 3 + 5 ----更复杂]

答案 4 :(得分:0)

GET请求将生成具有默认行为的许多选项的长而复杂的URL。

POST请求可能会为您留下短网址,但使用“后退”按钮可能会表现不佳,并且不会对书签友好。

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

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

01010010010001001010101010101001

或者:

0101 0010 0100 0100 1010 1010 1010 1001
  #8   #7   #6   #5   #4   #3   #2   #1

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