我希望能够通过选中复选框来搜索各个制造商,我该怎么做?
如果他们选择7来搜索如何使用sql字符串现在我必须像LIKE '%BMW'
那样手动输入它,但我希望它来自循环:
if(!empty($_POST['check_list'])) {
// Loop to store and display values of individual checked checkbox.
foreach($_POST['check_list'] as $selected) {
echo $selected."</br>";
}
}
$sql = "SELECT * FROM `Cars` WHERE `manufacturer` LIKE '%BMW' OR
`manufacturer` LIKE '%Audi' ORDER BY `tier` ASC";
答案 0 :(得分:2)
通常当您使用复选框缩小范围时,例如在亚马逊中,他们不会使用通配符。在这种情况下,您可能最好为制造商列表dnvm list
。
global.json
在这种情况下,要在PDO预处理语句中使用,您不需要循环。只需使用array_fill和implode()生成占位符,然后在execute()中绑定数组。
WHERE IN
如果SELECT * FROM `Cars`
WHERE `manufacturer` IN ('BMW', 'Audi', 'Mercedes', 'Lexus', 'Cadillac', 'Huffy Bikes');
中有奥迪和宝马,$placeholders = array_fill(0, count($_POST['check_list']), '?');
$pdo->prepare('SELECT * FROM `Cars` WHERE `manufacturer` IN ('.implode(',' $placeholders).')');
$stmt->execute($_POST['check_list']);
将输出$_POST['check_list']
和 pdo :: execute()会将每个占位符(implode(',', $placeholders)
)与相应的值绑定。
答案 1 :(得分:0)
假设我们在$ _POST ['check_list']数组中有制造商的名称。
您可以简单地将该名称连接到变量中,并使用它来构建查询。要构建查询,最简单的方法是使用IN运算符,而不是类似运算符。 代码应该是:
$query = "SELECT * FROM `Cars` WHERE `manufacturer` IN (".implode(",",$_POST['check_list']).")";
这应该可行,但会产生安全问题(sql注入)。 要以正确的方式做事,你应该使用一个数组,其中包含制造商名称和每个的ID,如:
$manufacturers = array( 1 => "BMW", 3 => "Renault", 4 => "Ferrari");
你可以从这个数组创建一个dinamically复选框:
foreach($manufacturers as $id => $name) {
echo '<label><input type="checkbox" name="check_list[]" value="'.$id.'>'.$name.'</label>';
}
而且,在查询部分中,您必须循环到$ _POST ['check_list'](现在包含数字ID)并分配给临时数组,您需要在查询中插入的制造商名称< / p>
$manif_to_select = array();
foreach($_POST['check_list'] as $manif_id) {
if(!isset($manufacturers[$manif_id]))
continue;
$manif_to_select[] = $manufacturers[$manif_id];
}
$query = "SELECT * FROM `Cars` WHERE `manufacturer` IN (".implode(",",$manif_to_select).")";