我有一个查询要在两个表中搜索空缺。
此查询的变量以具有多个输入/选择的形式发送。一个是用于输入职位空缺标题的文本输入,另一个是带有空缺所属的所有类别的下拉菜单。
当我将文本输入留空并仅选择一个类别时,我得到的所有空缺不只是所选类别中的空缺。
我的查询:
$functie = $_POST['functie'];
$branche = $_POST['branche'];
$regio = $_POST['regio'];
$search = "
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid
WHERE ('".$functie."' ='' OR cnt.title LIKE '%".$functie."%')
OR ('".$branche."' ='' OR cat.title LIKE '%".$branche."%')
";
如果我在不输入文本输入的情况下回显查询,这就是我得到的:
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid
WHERE ('' ='' OR cnt.title LIKE '%%')
OR ('logistiek' ='' OR cat.title LIKE '%logistiek%')
snm_content
是空缺,snm_categories
是类别。
我如何仅显示属于所选类别的空缺?
答案 0 :(得分:1)
请注意,您的代码已接受SQL injection相关攻击。请学习使用Prepared Statements
现在,我们将需要动态生成查询的WHERE
部分。我们可以使用!empty()
函数来检查输入过滤器值是否不为空,然后将其条件动态添加到查询中。
$functie = $_POST['functie'];
$branche = $_POST['branche'];
$regio = $_POST['regio'];
$search = "
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid ";
// Collect all the where conditions in an array
$whr = array();
// check if $functie has some value in input filter
if (!empty($functie)) {
$whr[] = "cnt.title LIKE '%" . $functie . "%'";
}
// check if $branche has some value in input filter
if (!empty($branche)) {
$whr[] = "cat.title LIKE '%" . $branche . "%'";
}
$where_sql = '';
// Prepare where part of the SQL
if (!empty($whr)) {
$where_sql = ' WHERE ' . implode(' OR ', $whr);
}
// Append to the original sql
$search .= $where_sql;