Php 如何搜索复选框数组

Php 如何搜索复选框数组,php,arrays,checkbox,get,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 &l

我正在构建一个搜索表单,但如何搜索一系列复选框

这是我的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>

您可以使用$materialValue存储到数据库中

<?php
if(isset($_GET['material'])){
    $material = $_GET['material'];
    foreach($material as $materialIndex){
         $materialValue .= $materialIndex.',';
    }
}

// use value to store into db

发布后,将提交一个名为
material
(可通过
$\u GET['material']
访问)的数组,该数组仅包含选中的值

然后,您可以使用它们或按如下方式输出它们:

foreach ($_GET['material'] AS $material) {
  echo $material;
}
编辑问题后添加:
您还可以使用
infrade()
将数组值与
,'
粘合,并将其用作SQL语句中的搜索参数。只要把它改为在中使用
,而不是像@Prashant M Bhavsar在他的回答中建议的那样使用

我想这会对你有所帮助

在变量中获取提交的材料数组

$material_array = $_POST['material'];
您可以在select查询中内爆数组以获取相关结果

 $selected_search_material = implode(',', $material_array);
    SELECT * FROM `shop` WHERE `material` IN ($selected_search_material)

我还没有对此进行测试,但是由于您收到一个数组(
$\u get['material']
已经是一个数组),只需使用以下代码


内爆
$\u获取['material']
并使用不同的查询:

$where = implode(', ',$_GET['material']);
$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE `material` IN ?');

然后在
execute()中使用
$where

使用
foreach
首先修复你的
s。是的,但是你如何用foreach搜索查询解释和帮助在哪里?@RichardBernards.你能告诉我我发布的错误答案是什么吗..这将帮助我改进..谢谢你刚刚粘贴了一些代码。。。这是如何解决OP的问题的?
$materialIndex
是一个值,而不是一个索引。。。尝试更好地命名变量。第二在循环结束时,
$materialValue
将只包含数组的最后一个值。。。不是期望的效果现在末尾有一个逗号,它使用INNo中断SQL查询,您将获得所有值,而不仅仅是最后一个值。所以我可以使用这个来使用IN查询?或者它会因为最后一个“,”而不起作用吗?@DanielLe请不要尝试使用此代码。。。这是一个很糟糕的例子,如果你想学习一些关于内爆和字符串的东西,你没有真正使用PDO的绑定,这就是为什么你要使用这个。。。
$material_array = $_POST['material'];
 $selected_search_material = implode(',', $material_array);
    SELECT * FROM `shop` WHERE `material` IN ($selected_search_material)
<?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));

?>
$where = implode(', ',$_GET['material']);
$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE `material` IN ?');