【发布时间】:2011-02-09 06:31:15
【问题描述】:
我正在创建一个二手车网站(用 PHP 编写),但我一直坚持从表单发送高级搜索选项。我有 30 多个,我想知道是否有可能以及如何将它们发送到一个变量中(例如 &options=1,2,3,5,6,10 或其他方式..)。
我也听说“按位”可以做到这一点,但我不知道如何做到这一点。或者如果有人有更好的想法,请告诉我。
谢谢。
【问题讨论】:
标签: php javascript search forms
我正在创建一个二手车网站(用 PHP 编写),但我一直坚持从表单发送高级搜索选项。我有 30 多个,我想知道是否有可能以及如何将它们发送到一个变量中(例如 &options=1,2,3,5,6,10 或其他方式..)。
我也听说“按位”可以做到这一点,但我不知道如何做到这一点。或者如果有人有更好的想法,请告诉我。
谢谢。
【问题讨论】:
标签: php javascript search forms
您可以将它们以数组的形式发送。
<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')
【讨论】:
将它们放在一个数组中,然后在处理表单的脚本中循环遍历它们。
<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
}
}
}
【讨论】:
好的,谢谢大家的回答。我想出了一个使用 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"/>
...
【讨论】:
您可以编写一个脚本,遍历您的所有字段(即复选框),将信息收集到一个隐藏字段中,以您提供的确切形式(1、3、5 表示选中 1、3 和 5 , 2 和 4 未选中)。
将其转换为位表示会使其构造和解构更加复杂。例如,在前面的示例中,您可以发送数字 10101 == 17 来表示位置(即位置 1 3 5 为“开启”,2 和 4 为关闭)。同样,不是那么容易,也不推荐。 [你也可以发送二进制表示,在这种情况下你会发送 send 1000 == 8 == 1 + 3 + 5 ---- 更复杂]
【讨论】:
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 上的某个人已经问过这个问题,我现在不想再打字了。 :)
【讨论】: