Daniel Le
Daniel Le

Reputation: 199

how to search array of checkboxes

Im building a search form but how do you search a array of checkboxes?

here is my html form

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

and the php so far is. So how can i search the material for each checked.

<?php
if(isset($_GET['keyword'])){
$keyword = $_GET['keyword'];
// $material = $_GET['material'];
// $Search->search($keyword);
}
?>

ANd the query would be so far

$query = $this->pdo->prepare('SELECT * FROM `shop` WHERE `material` = ?');

Upvotes: 1

Views: 599

Answers (5)

Ghanshyam Dekavadiya
Ghanshyam Dekavadiya

Reputation: 153

You can use $materialValue to store into Database.

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

// use value to store into db

pass $materialValue variable to IN query also remove last "," from string

$materialValue.substring(0,$materialValue.length()-1);
?>

Upvotes: -1

user169600
user169600

Reputation:

Implode $_GET['material'] and use a different query:

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

Then use $where in your execute();

Upvotes: 0

Prashant M Bhavsar
Prashant M Bhavsar

Reputation: 1164

I think this will help you

Get your submitted material array in variable

$material_array = $_POST['material'];

You can implode array in select query to fetch related result

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

Upvotes: 1

RichardBernards
RichardBernards

Reputation: 3097

I haven't tested this yet, but since you receive an array ($_get['material'] is already an array), just use the following code with 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));

?>

Upvotes: 0

Cornelius
Cornelius

Reputation: 4264

When posted this will submit an array named material (accessible via $_GET['material']) that contains only the values that were checked.

You can then use those or output them like this:

foreach ($_GET['material'] AS $material) {
  echo $material;
}

Addition after the question was edited: You can also implode() the array values with ', ' as glue and use that as the search parameter in your SQL statement. Just change it to use IN instead of =, like @Prashant M Bhavsar suggested in his answer.

Upvotes: 1

Related Questions