我正在建立一个搜索表单,但是你如何搜索一系列复选框?
这是我的html表单
<form method="get">
<label>
<input type="checkbox" name="material[]" value="metal">metal
</label>
<label>
<input type="checkbox" name="material[]" value="plastic">Plastic
</label>
<label>
<input type="checkbox" name="material[]" value="carbon">Carbon
</label>
<input type="text" name="keyword">
<input type="submit" value="search">
</form>
到目前为止的PHP是。那么我如何搜索每个检查的材料。
<?php
if(isset($_GET['keyword'])){
$keyword = $_GET['keyword'];
// $material = $_GET['material'];
// $Search->search($keyword);
}
?>
到目前为止查询
$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE `material` = ?');
答案 0 :(得分:1)
发布时,这将提交一个名为material
的数组(可通过$_GET['material']
访问),该数组仅包含已检查的值。
然后您可以使用它们或输出它们:
foreach ($_GET['material'] AS $material) {
echo $material;
}
编辑问题后添加:
您还可以使用implode()
', '
数组值作为粘合剂,并将其用作SQL语句中的搜索参数。只需将其更改为使用IN
而不是=
,就像@Prashant M Bhavsar在他的回答中所建议的那样。
答案 1 :(得分:1)
我认为这会对你有帮助
将您提交的材质数组放入变量
$material_array = $_POST['material'];
您可以在select查询中内插数组以获取相关结果
$selected_search_material = implode(',', $material_array);
SELECT * FROM `shop` WHERE `material` IN ($selected_search_material)
答案 2 :(得分:0)
我还没有对此进行测试,但由于您收到一个数组($_get['material']
已经是一个数组),只需使用以下代码find_in_set;
<?php
$materials = array();
if (array_key_exists('material', $_GET)) {
$materials = $_GET['material'];
}
$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE find_in_set(cast(material as char), :materials');
$query->execute(array('materials' => $materials));
?>
答案 3 :(得分:0)
内爆$_GET['material']
并使用其他查询:
$where = implode(', ',$_GET['material']);
$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE `material` IN ?');
然后在$where
;
execute()
答案 4 :(得分:-1)
您可以使用$ materialValue存储到数据库中。
<?php
if(isset($_GET['material'])){
$material = $_GET['material'];
foreach($material as $materialIndex){
$materialValue .= $materialIndex.',';
}
}
// use value to store into db
将$ materialValue变量传递给IN查询也从字符串
中删除最后一个“,”$materialValue.substring(0,$materialValue.length()-1);
?>