如何搜索复选框数组

时间:2015-02-06 12:48:13

标签: php arrays checkbox get

我正在建立一个搜索表单,但是你如何搜索一系列复选框?

这是我的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` = ?');

5 个答案:

答案 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);
?>